tl; dr: root:root rwxr-xr-x
, a menos que você precise gravar acesso ao diretório, em cujo caso root:www-data rwxrwxr-x
, a menos que você precise proteger segredos (por exemplo, senhas de banco de dados) no diretório da web, Nesse caso, root:www-data rwxr-x---
, a menos que você precise de acesso de gravação e , é necessário proteger os segredos. Nesse caso, root:www-data rwxrwx---
.
Sim, idealmente, os arquivos do seu website devem ser de propriedade do root. Isto é por causa do princípio do menor privilégio: com relação às permissões, o root pode fazer qualquer coisa de qualquer maneira, então ter algo pertencente ao root realmente não confere nenhum privilégio adicional no root - ele meramente tira privilégios de outras contas. Isso é uma coisa boa.
Caso você não saiba qual é o principal privilégio, é basicamente: dar aos processos as permissões mínimas necessárias, e não mais, porque você quer limitar os danos se e quando o processo receber o pwd e o O atacante começa a jogar com as novas permissões que ele acabou de herdar do processo pwd. Esta é a motivação para o SELinux , daemons tendo a habilidade de privilégios de descarte , recursos do Linux , chroot jails 1 - todas essas coisas são projetadas para limitar os danos que um processo pode causar tomado por um invasor.
No cenário típico, você deseja que todos tenham privilégios de leitura e forneçam somente privilégios de gravação de raiz. Nesse cenário, se você definiu ou não que seu diretório da Web pertence ao grupo www-data
2 não importa, porque ele obterá r-x
permissões de qualquer forma.
No entanto, existem cenários mais complicados que exigem que você diferencie o que o Apache obtém acesso e o que os meros humanos cutucando na árvore de diretórios têm acesso. É aqui que entra a coisa www-data
-como grupo. Permite, por exemplo conceder permissão de gravação para o Apache, mas não para usuários regulares. Ou se você, por exemplo precisa proteger as senhas do banco de dados, então você pode negar todas as permissões de leitura, mas ainda permitir que o Apache veja o conteúdo.
1 : esta é uma ligeira deturpação. A chamada de sistema chroot()
na verdade nunca foi projetada como um recurso de segurança, e as jaulas chroot foram inventadas depois que chroot()
apareceu originalmente. Por causa disso, eles têm algumas limitações - por exemplo, se você for root, você pode sair de uma jaula de chroot . O mesmo se aplica aos contêineres do Linux (Docker, systemd-nspawn
, estou olhando para você). Coisas como Cadeias BSD e Solaris Zonas basicamente pegaram o conceito de jail chroot e as fizeram realmente funcionar com segurança - então, a não ser que, por exemplo, vulnerabilidades de segurança do kernel, você não pode sair de uma cadeia BSD, mesmo se você estiver dentro dela .
2 : o nome do grupo do servidor da web pode variar de distribuição para distribuição. É www-data
no Debian e derivados, mas eu não sei sobre o que a família RHEL faz.