Como concedo aos arquivos e diretórios criados pelo FTP as permissões corretas para o Apache os ler e gravar?

8

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

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

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

Este é o meu entendimento até agora:

  • O usuário www-data precisa da propriedade de pastas e arquivos, pois todos os arquivos em / var / www / html executam scripts que exigem que eles gravem em sua pasta. E é claro que ele precisa ser capaz de servir as páginas via http.
  • Meu usuário de ftp (vamos chamá-lo de ftpuser ) também requer permissão para gravar na pasta / var / www / html (recursiva), pois eu preciso fazer o upload de novos arquivos.

Com isso em mente, criei um grupo chamado ftpandwww e copiei todas as pastas e arquivos para esse grupo. Isso funcionou até certo ponto ...

Estou quase no lugar certo, exceto pelo fato de que todas as novas pastas criadas usando o meu cliente FTP têm as permissões erradas (que eu posso corrigir alterando-as no cliente FTP), mas os dados da www não conseguem gravá-las porque eles são de propriedade do ftpuser e eu acabo tendo que fazer o SSH e executar um grupo chown to ftpandwww para que ambos fiquem felizes.

Como faço para que todas as novas pastas criadas no FTP tenham as permissões corretas (774) e sejam automaticamente de propriedade do grupo ftpandwww , para que eu possa fazer upload e servir via web (com permissões de gravação) sem precisar entrar e exibir todos os novas pastas e arquivos de cada vez?

omega1
fonte

Respostas:

10

Use as permissões SetGID no diretório raiz da web e propague-as para os filhos.

Quando você aplica o SetGID em um diretório, todos os novos itens desse diretório serão criados com o mesmo grupo que seus pais, independentemente da associação ao grupo padrão do usuário.

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

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

No seu caso, execute algo como isto (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 sairão como propriedade ftpuser:ftpandwww.

Editar:

Dependendo do seu caso de uso, é provável que SetGID seja suficiente para resolver seu problema, mas se você tiver problemas contínuos em que um ou outro usuário não poderá gravar, devido a uma permissão de grupo incorreta (mas a propriedade é correta), sua melhor opção será definir um UMASK 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 encadeamento nas opções para configurar o 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.

Frank Thomas
fonte
Obrigado, vou tentar isso, quando você mencionar que todos os arquivos e pastas terão essa propriedade ftpuser: ftpandwww o www-data ainda os servirá e terá permissões (via script) para gravar também nas pastas? Obrigado novamente.
Omega1
O usuário-proprietário real será proibidamente o usuário executando o processo, a menos que use autenticação local (mas isso depende inteiramente do aplicativo). De qualquer forma, a resposta à sua pergunta depende do XXX que você escolher. como ambos wwwdata e ftpdata estão no mesmo grupo, se você fornecer 770, sim, ambas as contas poderão gravar nos objetos. se você desse 740, no entanto, somente o usuário proprietário seria capaz de escrever, mas qualquer membro do ftpandwww seria capaz de ler. O ponto é que você está usando permissões de grupo em vez de permissões de usuário para essas operações.
27415 Frank Thomas