A maneira como normalmente faço isso em minhas configurações de servidor é criar um grupo para o site, depois usar uma combinação de setgid e umask para garantir que os arquivos permaneçam graváveis pelos aplicativos desejados. Guia passo a passo abaixo:
1 / Crie um novo grupo para o seu site:
$ sudo groupadd web-grp
2 / Adicione o usuário que o servidor da Web executa ao grupo:
$ sudo gpasswd -a www-data web-grp
3 / chown os diretórios e arquivos que você deseja que o servidor tenha acesso:
$ sudo chown -R :web-grp /path/to/website
4 / Defina o bit gid e outras permissões nesses diretórios:
$ sudo chmod -R ug+rw /path/to/website
$ find /path/to/website -type d -exec chmod g+xs {} \;
5 / Defina a umask do seu programa de ftp para 002
. Isso vai depender do seu cliente ftp e do servidor, procure por aí para descobrir como fazer isso para sua configuração particular.
6 / Reinicie seu servidor da web para obter a nova permissão de grupo:
$ sudo service apache2 restart
O interessante aqui é que o setgid
bit nesses diretórios fará com que novos arquivos criados nos diretórios tenham o mesmo grupo por padrão. Isso significa que você não precisa de 777
de permissões, o que significa que você tem mais segurança, além de um sistema que deve continuar a funcionar.
A parte umask
também é importante. Novos arquivos terão os bits de permissão no umask
retirado, portanto, se o seu umask
for 022
, os novos arquivos não poderão ser gravados em grupo, e as coisas não funcionarão muito bem.
Eu tenho usado essa configuração com muito sucesso há alguns anos.