A melhor maneira de conseguir isso é com ACLs posix . Permissões padrão de arquivos unix não são suficientes. Você pode fazer isso com alguns kludging, mas não é muito mais do que um kludge, basicamente não é uma solução simples.
O uso de uma ACL resolverá esse problema de forma sucinta. Para fazer isso, você pode usar os seguintes comandos:
setfacl -R -m www-user:rwx /home/user1/public_html
setfacl -R -d -m www-user:rwx /home/user1/public_html
setfacl -R -m user1:rwx /home/user1/public_html
setfacl -R -d -m user1:rwx /home/user1/public_html
O sinalizador -d faz com que os novos arquivos herdem as ACLs que você definiu no diretório.
Há algumas advertências a serem lembradas.
- Seu sistema de arquivos deve suportá-lo (a maioria desses dias, eles podem ser ativados remontando o sistema de arquivos com suporte a ACL na maioria dos sistemas de arquivos). Coisas como o NFS não funcionam.
- A ACL padrão do grupo Unix se torna uma máscara. I.E Se um arquivo diz g + x o arquivo é executável com o comando acima. se o seu arquivo não for executável, independentemente de o conjunto de permissões ser ou não rwx na ACL. Isso garante que você evite uma situação em que você teria que marcar todos os diretórios rwx no acl e em todos os arquivos rw - .
Isso corrige um problema de maneira sensata e permite várias combinações de cenários:
- Aplica o menor privilégio, pois você não precisa começar a modificar as associações de grupos de usuários.
- user1 pode criar um arquivo que pode ser modificado mais tarde por www1-user (assim o usuário1 pode fazer upload de conteúdo SFTP que pode ser excluído e / ou modificado por um CMS no apache posteriormente) e vice-versa.
- O Apache permanece em uma conta do sistema que evita ter que usar as soluções alternativas do SetUID para alterar o assunto do apache (usuário).
- A modificação se aplica somente a uma estrutura de diretórios específica e não permite inadvertidamente permitir acesso de usuário ou usuário1 a outras partes da árvore do sistema de arquivos que você não deseja que elas acessem.
- Alterar ou revogar permissões é uma alteração trivial.
Esta é a minha maneira preferida de resolver esse tipo de problema. É uma mudança simples, não disruptiva e trivial.