A maneira mais fácil de gerenciar isso é com listas de controle de acesso . Eles permitem que as permissões sejam configuradas para quantos usuários e grupos você quiser, não apenas um usuário e um grupo, como as permissões básicas do Unix.
As ACLs precisam estar ativadas no sistema de arquivos. Com ext [234] ou reiserfs, você precisa passar a opção acl
mount. Também verifique se você tem os utilitários ACL instalados (pacote acl
no Debian ou Ubuntu).
Defina uma ACL que permita que ambos os usuários acessem os arquivos e defina uma ACL padrão correspondente nos diretórios (a ACL padrão é herdada pelos arquivos criados no diretório).
setfacl -m user:www-data:rwx -m user:svnuser:rwx -R /path/to/directory/tree
setfacl-d -m user:www-data:rwx -m user:svnuser:rwx -R /path/to/directory/tree
Você pode definir permissões diferentes, se quiser. O bit executável será ignorado se o arquivo não for executado através das permissões não-ACL (aquelas que você definiu com chmod
).
Os comandos dados são para o Linux. Muitas outras variantes unix suportam ACLs, mas o conjunto exato de permissões disponíveis e o utilitário para defini-las não são padronizados.
Você pode usar grupos para controlar o acesso, se quiser. Mesmo se você fizer isso, a ACL terá a vantagem de não se deparar com um problema de umask: se você acabou de criar um grupo, é necessário garantir que todos os arquivos e diretórios sejam graváveis por grupo, o que significa que você precisa garantir criar um arquivo tem umask de 002 ou 007, o que, por sua vez, pode fazer com que as permissões em outros lugares sejam mais liberais. Então, mesmo se você criar um grupo, as ACLs serão úteis.
setfacl -m group:mygroup:rwx -R /path/to/directory/tree
setfacl -d -m group:mygroup:rwx -R /path/to/directory/tree
Observe que não concedo nenhuma garantia quanto à adequação desse modelo de segurança ao seu caso de uso. Estou apenas fornecendo uma implementação.