Como concedo aos arquivos e diretórios criados pelo FTP as permissões corretas para o Apache lê-los e gravá-los?

Como concedo aos arquivos e diretórios criados pelo FTP as permissões corretas para o Apache lê-los e gravá-los?

Eu sou mais uma pessoa do Windows, então desculpe minha ignorância com esta questão básica do Linux.

Estou cuidando de um servidor Linux (Debian) que possui apenas Apache2 e vsftp instalados.

O que está acontecendo é que estou tendo uma batalha constante com quem possui arquivos e pastas e não consigo acertar.

Este é o meu entendimento até agora:

  • www-dadoso usuário precisa ser proprietário de pastas e arquivos, pois todos os arquivos em /var/www/html executam scripts que exigem que eles gravem em suas pastas. E é claro que precisa poder servir as páginas via http.
  • Meu usuário FTP (vamos chamá-loftpuser) também requer permissão para gravar na pasta /var/www/html (recursiva), pois preciso poder fazer upload de novos arquivos.

Pensando nisso criei um grupo chamadoftpandwwwe transferi todas as pastas e arquivos para este grupo. Isso funcionou até certo ponto...

Estou quase no lugar certo, exceto pelo fato de que quaisquer novas pastas criadas usando meu cliente FTP têm as permissões erradas (que posso corrigir alterando-as no cliente FTP), mas www-data não pode gravar neles porque são propriedade deftpusere acabo tendo que fazer SSH e executar um chown no grupo ftpandwww para que ambos fiquem felizes.

Como faço para que todas as novas pastas que criei no FTP tenham as permissões corretas (774) e sejam automaticamente propriedade deftpandwwwgrupo para que eu possa fazer upload e servir via web (com permissões de gravação) sem ter que entrar e chown todas as novas pastas e arquivos a cada vez?

Responder1

UsarDefinirGIDpermissões no diretório raiz da web e propagá-las para os filhos.

Quando você aplica SetGID em um diretório, todos os novos itens nesse diretório serão criados com o mesmo grupo que seu pai possui, independentemente da associação de grupo padrão do usuário.

Para aplicar SetGID a um objeto do sistema de arquivos, use chmod2 na frente do código de permissão.
(ex.: 740 => 2740).

Eu uso SetGID em muitos dos meus compartilhamentos Samba, para que os arquivos sempre tenham o grupo proprietário Userse qualquer membro do grupo possa ler os arquivos (geralmente uso 2750para que apenas o usuário proprietário possa gravar no arquivo).

No seu caso, execute algo assim (substitua XXX pelas permissões desejadas):

sudo chown -R  root:ftpandwww /var/www
sudo chmod -R 2XXX /var/www 

Em seguida, novos arquivos e pastas surgirão com propriedades como ftpuser:ftpandwww.

Editar:

Dependendo do seu caso de uso, o SetGID provavelmente será suficiente para resolver seu problema, mas se você tiver problemas contínuos em que um ou outro usuário foi negado a gravação, devido a uma permissão de grupo incorreta (mas a propriedade está correta), então sua melhor aposta é definir aUMASK personalizado para o usuário que cria os arquivos.

Se você tiver dificuldade em configurar o UMASK para o usuário (porque é um daemon), verifique este tópico sobre opções paraconfigurando UMASK de um usuário daemon.

Eu recomendaria a máscara 007se você quiser que os membros do grupo possam gravar e excluir arquivos, e sem privilégios para não proprietários.

informação relacionada