Qual é a solução adequada para um servidor da web tentando gravar em um diretório?

3

Então, eu tenho uma caixa com um usuário "deploy". Este usuário de implantação possui um repositório de código e o wordpress está sendo executado nesta caixa ...

Quando o wordpress tenta fazer algo como carregar um plug-in, ele está usando o usuário "www-data" para gravar em "wp-content / plugins" .. Aparentemente, ele está carregando um arquivo zip, desarquivando e removendo o arquivo zip .

Eu continuei encontrando problemas onde o wordpress era incapaz de fazer essas coisas. Já que todo o meu repositório de código foi configurado para ser o proprietário e o grupo: "deploy: deploy", obviamente o www-data não é capaz de acessar isso. / p>

Então, minha primeira tentativa foi adicionar www-data ao grupo de implantação.

usermod -a -G deploy www-data

Imediatamente após a emissão deste comando, descobri que não podia mais ssh na caixa .. Totalmente confuso sobre o porquê - alguém pode me preencher sobre isso? Então acabei fazendo:

chmod -R go-w ~

E, em seguida, poderia ssh de novo ... fazendo "grupos www-data" mostrou implantar como uma das opções, então eu pensei hooray ... Eu fui e certifiquei-se de que os diretórios wp-content e plugin tivessem acesso de escrita para o grupo, e eles fizeram ... Double horray, deve funcionar perfeitamente!

No entanto, não ... Falha ao tentar carregar um plugin.

Depois de muito aborrecimento, eu entrei na configuração do apache e mudei o APACHE_RUN_USER & GROUP para "implantar"

Problema resolvido ... Mais ou menos. Exceto a idéia do apache rodando como o usuário principal, eu acho horrível.

De qualquer forma, depois de fazer essa alteração, o upload de um plug-in foi bem-sucedido e vi:

drwxr-xr-x 8 deploy deploy 4096 Oct 22 21:28 wp-crm

Então, o grupo não tem acesso de escrita-- eu pensei que talvez seja uma dica do porquê isso estava falhando ... Mas então, o fato de estar escrevendo com deploy significa que não é realmente uma dica ... Porque isso é apenas devido a como umask do deploy está definida para .. Eu assumo ...

Então ... acabei de perder o que a solução é ...

O meu grupo de conteúdo wp deve ser www-data?

Ou estou faltando alguma outra coisa aqui?

    
por patrick 23.10.2012 / 00:04

2 respostas

1

A solução mais simples para isso seria ACLs do sistema de arquivos. Não tenho certeza se concordo com a configuração (porque o diretório não é estático e não está usando outro diretório para dados temporários), mas isso é outra questão.

Com as ACLs do sistema de arquivos, você pode conceder o acesso de usuário www-data a um diretório específico, mesmo que as permissões normais não permitam isso.

Então, por exemplo

setfacl -R -m user:www-data:rwx wp-content/plugins
setfacl -d -R -m user:www-data:rwx wp-content/plugins

A concessão do primeiro comando, www-data read + write +, é executada em wp-content/plugins e tudo nela (recursivamente). O segundo comando define as permissões padrão para que os novos arquivos e pastas criados em wp-content/plugins tenham a ACL especificada (e, portanto, sejam lidos + escritos + executados por www-data ).

    
por 24.10.2012 / 05:43
1

Infelizmente usermod -G substitui os grupos do usuário. Você queria usermod -G -a .

    
por 23.03.2013 / 20:27