Para garantir a responsabilidade nesse contexto e ainda fornecer a propriedade e as permissões corretas para o conteúdo publicado, eu uso uma versão ligeiramente modificada do fluxo de trabalho descrito em este artigo.
Isto é como eu implementei, note que a maioria das peças são substituíveis:
- Todo o conteúdo publicado é gerenciado por um sistema de controle de versão (git neste caso)
- Os usuários têm contas nominais registradas em um LDAP Kerberizado, juntamente com suas chaves públicas RSA
- No passado, eu usava essas chaves públicas para conceder acesso aos repositórios diferentes usando gitosis / gitolite, mas você também pode usar o git simples com o git-shell.
- Um tempo atrás, mudei para gitblit, que fornece autorização LDAP. O acesso à UI da web do gitblit requer um ticket kerberos válido.
- Os repositórios têm o gancho pós-atualização vinculado a um script que contém:
#!/bin/sh
sudo /usr/local/sbin/publisher-hub2live
exit 0
O script não está acessível diretamente a usuários não autorizados:
# ls -lrt /usr/local/sbin/publisher-hub2live
-rwx------. 1 root root 400 Oct 12 2012 /usr/local/sbin/publisher-hub2live
Daí o sudorule:
Defaults:git !requiretty
git Host_Alias = (root) NOPASSWD: /usr/local/sbin/publisher-hub2live
Substitua git
pelo proprietário atual dos repositórios.
O conteúdo do script do editor trabalha a "mágica" aqui (versão simplificada):
#!/bin/sh
echo
echo "**** Pulling changes into Live [Hub's post-update hook]"
echo
cd /path/to/live/repo || exit
umask 0022
unset GIT_DIR
git pull hub master
chown -R root:root /path/to/live/repo
find /path/to/live/repo/ -type d | xargs chmod u=rwx,go+rx
find /path/to/live/repo/ -type f | xargs chmod u=rw,go+r
restorecon -v -R /path/to/live/repo
exec git update-server-info
exit 0
Suas necessidades podem ser diferentes em relação às permissões de proprietário, grupo, DAC e MAC, mas o fluxo de trabalho é o mesmo.