Nossa solução é criar uma conta de usuário principal para cada cliente, como flowershop . Cada cliente pode criar um número arbitrário de contas secundárias com suas próprias senhas, como flowershop_developer , flowershop_tester , flowershop_dba , etc. Isso permite que elas distribuam contas sem compartilhar a senha da conta principal, o que é melhor para um Um monte de razões (por exemplo, se eles precisam remover a conta do DBA, eles podem facilmente fazer isso sem alterar suas próprias senhas).
Cada uma dessas contas está no grupo flowershop , com uma pasta pessoal de /home/flowershop/ . O SSH usa isso como o diretório chroot ( /home/%u , conforme mostrado na configuração da questão).
Em seguida, usamos as ACLs para permitir que todos os usuários do grupo flowershop modifiquem todos os arquivos. Quando uma nova conta de cliente é criada, definimos as ACLs da seguinte forma:
setfacl -Rm \
d:group:admin:rwx,d:user:www-data:r-x,d:user:$USERNAME:rwx,d:group:$USERNAME:rwx,\
group:admin:rwx, user:www-data:r-x, user:$USERNAME:rwx, group:$USERNAME:rwx \
/home/$USERNAME/
Isso faz o seguinte:
- Concede grupo
admin(para nós, os provedores de hospedagem)rwx - Concede ao usuário
www-data(Apache)r-xaos arquivos * - Concede ao usuário
$USERNAMErwxpara os arquivos - Concede grupo
$USERNAMErwxaos arquivos
Esta configuração parece estar funcionando bem para nós, mas estamos abertos a qualquer sugestão para fazer melhor.
* usamos suexec para CGI / PHP sendo executado como a conta do cliente