O que é uma maneira simples e segura de lidar com permissões de arquivo para o Apache?

0

Eu tenho mexido com a atribuição de diferentes usuários e grupos para os arquivos em /var/www , mas cada maneira que eu tentei até agora acaba sendo excessivamente complicada e propensa a erros. Eu estou procurando por um padrão simples e repetitivo que difere minimamente das configurações do sistema de arquivos padrão (permissões, bits, ACLs, etc.) Uma vez que eu recebo isso, planejo replicá-lo em vários servidores ao longo do tempo. / p>

Minha situação é que eu tenho um aplicativo da web que vive em /var/www/foo e precisa ser enviado via SFTP. Estou pensando em fazer o git-ftp fazer os uploads reais. Todos os arquivos precisam ser legíveis pelo Apache. Algumas pastas e quaisquer subpastas criadas pelo aplicativo precisam ser graváveis pelo Apache. Eu tenho uma única conta de usuário no servidor em questão que não pertence a nenhum grupo especial no momento, mas tem sudo de acesso total. Haverá vários uploads ao longo do tempo e, após cada upload, eu preciso executar um script que possa criar, modificar ou excluir arquivos.

Qual é a maneira menos invasiva de colocar os arquivos no lugar e não ter problemas com as permissões, seja durante o upload ou em tempo de execução?

Caso isso ajude, estou configurando os aplicativos do Laravel no Debian, embora o padrão que estou procurando deva generalizar além do framework, a linguagem em que ele é executado e essa distribuição.

    
por Michael Cordingley 24.02.2017 / 19:14

1 resposta

1

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.

    
por 24.02.2017 / 21:07