Uma solução que geralmente uso em servidores da web está usando ACLs. Basicamente, isso significa usar conjuntos adicionais de permissões, além do sistema usual de grupo de usuários. Eu acho isso particularmente útil quando estou configurando acesso PHP restrito (por exemplo, usando suPHP).
Para manter a propriedade dos meus arquivos, tenho certeza de que eles pertencem a mim:
$ chown me:me /var/www -R
Em seguida, dou www-data
acesso de leitura em todos os lugares (e permissão de acesso em diretórios; configurações mais refinadas podem ser desejáveis às vezes).
$ setfacl -Rdm 'u:www-data:r-X' /var/www
$ setfacl -Rm 'u:www-data:r-X' /var/www
Eu também dou acesso de gravação ao Apache onde quer que eu escreva coisas. Por exemplo:
$ setfacl -Rdm 'u:www-data:rwX' /var/www/uploads
$ setfacl -Rm 'u:www-data:rwX' /var/www/uploads
Observe que, para usar as ACLs, você precisa certificar-se de montar o sistema de arquivos com a opção acl
. Isso é feito em /etc/fstab
:
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/sdxy /var ext4 defaults,acl 0 2
(assumindo que /var
esteja em uma partição diferente, caso contrário, veja /
)
A propósito, em alguns sistemas, a opção acl
é configurada por padrão. Por exemplo :
As of Ubuntu 14.04 and for ext4, the above is not required as acl are already default.
Você pode verificar se as ACLs estão ativadas em um sistema de arquivos usando tune2fs
(assumindo um ext * FS):
# tune2fs -l /dev/sdxy | grep acl
Default mount options: acl ...
Para mais informações sobre setfacl
, dê uma olhada aqui .