Primeiro, para tornar suas permissões mais fáceis de aplicar e manter, sugiro que você separe seus dados no local fora de sua raiz principal da web. Use a configuração em seu código ou links simbólicos para apontar para a pasta separada.
Vamos supor que você esteja preocupado com a segurança, para que você não use uma conta root para fazer o upload. Atualize a raiz do documento do servidor da web, se necessário.
Crie um grupo como www-pub
, adicione a conta que você usa para publicar o código nesse grupo.
- /var/www/www.example.org/data
- /var/www/www.example.org/www
Com isso, geralmente defino permissões como essa. Esses comandos são escritos de uma maneira que deve torná-los repetíveis com segurança.
# perms for the code/html folder
find /var/www/www.example.org/www -type d ! -perm 2775 -print0 | xargs --null --no-run-if-empty chmod 2775
find /var/www/www.example.org/www -type f ! -perm 0664 -print0 | xargs --null --no-run-if-empty chmod 0664
find /var/www/www.example.org/www \( ! -user root -o ! -group www-pub \) -print0 | \
xargs --verbose --null --no-run-if-empty chown root:www-www-pub
# perms for the data folder
find /var/www/www.example.org/data -type d ! -perm 2755 -print0 | xargs --null --no-run-if-empty chmod 2755
find /var/www/www.example.org/data -type f ! -perm 0644 -print0 | xargs --null --no-run-if-empty chmod 0644
find /var/www/www.example.org/data \( ! -user www-data -o ! -group www-data \) -print0 | \
xargs --verbose --null --no-run-if-empty chown www-data:www-data
A outra coisa importante é configurar seu servidor shell e sftp para ter umask de 0002. Sem configurar a mudança do umask do padrão comum de 0022, os arquivos gravados seriam apenas legíveis em grupo. Mas você precisa não mascarar o bit de gravação do grupo.
Se você não quiser mexer nas máscaras e as ACLs estiverem ativadas para o seu sistema de arquivos, você poderá usar as ACLs, o que de certa forma simplifica as coisas, já que a umask de ambientes não é considerada para entradas não padrão quando você está usando ACLs.
# set on empty directory before uploading files
# the parent directory has full read-write-execute for www-pub
# newly create files will be read-write for www-pub
setfacl --recursive --modify group:www-pub:rwx,default:group:www-pub:rw- /var/www/www.example.org/www
setfacl --recursive --modify group:www-data:rwx,default:group:www-data:rw- /var/www/www.example.org/data
De qualquer forma, não há um caminho verdadeiro, mas esperamos que o acima possa ser um ponto de partida útil.