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-x
aos arquivos * - Concede ao usuário
$USERNAME
rwx
para os arquivos - Concede grupo
$USERNAME
rwx
aos 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