
DR:Como posso ativar o mod_userdir de forma segura? (ou seja: cada usuário deve ser capaz de criar e servir seu conteúdo em ~/public_html mas não deve ter permissão para ler o conteúdo uns dos outros nem diretamente - cat /home/userX/public_html/file
- nem através de funções PHP ( file_get_contents('/home/userX/public_html/file'
))
Detalhes: Eu configurei o Apache com mod_userdir para oferecer aos meus usuários a opção de servir seu conteúdo, descartando arquivos em sua pasta ~/public_html. Para proteger o acesso aos arquivos e evitar que qualquer usuário possa ler os arquivos de outras pessoas, configurei as seguintes permissões:
/home/userA user.user drwx--x--x (711)
/home/userA/public_html user.user drwxrwx--x (771)
Eu adicionei www-data
ao grupo de cada usuário:
usermod -a -G user www-data
(também poderia funcionar criando um grupo e adicionando todos os usuários, incluindo www-data
ele)
Toda a configuração funciona conforme o esperado. Qualquer usuário pode acessar seu conteúdo em https://server/~user e não pode ler os arquivos de outros:
userA@ubuntu:/home$ cat userB/public_html/index.php
cat: userB/public_html/index.php: Permission denied
Até agora tudo bem. Mas o problema é que, como o Apache está rodando como www-data
e tem acesso de grupo a qualquer arquivo dentro de /home/*, qualquer usuário pode criar um arquivo PHP para ler o conteúdo de outras pessoas usando funções como exec
, system
, file_get_contents
, etc.
Eu sei que posso desabilitar a execução de tais funções, adicionando-as ao disable_functions
bloco, php.ini
mas vejo isso como um patch, não uma solução. Portanto, parece-me que deveria haver outra maneira mais segura de definir essa configuração do Apache habilitada para userdir. Procurei uma maneira de fazer isso corretamente, mas não encontrei uma solução adequada.