Dando permissão PHP para gravar arquivos e pastas

7

ATUALIZADO PARA MAIS CLARITY:

De acordo com o link , ele diz:

For most Unix hosts the following is typical, but you may check with your host to see if more restrictive permissions can be used to allow PHP to write to files (666) and folders (777). On Windows servers the following will not apply, but you will need to ensure that the files and folders are writable by ExpressionEngine. You may need to contact your host for this.

Não tenho certeza do que isso significa. Eu posso mudar os arquivos e pastas específicos para 666 e 777, respectivamente, onde eu sou o chown'er, mas o acima soa como eu preciso permitir que o PHP faça isso também?

PERGUNTA ORIGINAL:

Eu preciso garantir que o PHP possa gravar em arquivos específicos (666) e pastas (777).

Como faço isso?

    
por oshirowanen 04.04.2012 / 17:08

3 respostas

13

Editar: opa, desculpe, não vi que esse tópico era muito antigo. Bem, isso pode ajudar outras pessoas ..

Eu completarei as respostas de rahmu e MV com uma solução técnica.

Encontrando o nome de usuário do servidor web

Em primeiro lugar, você precisará saber o nome de usuário sob o seu servidor web. Se você estiver usando o Apache, ele pode ser apache ou httpd , www-data , etc. Na maioria dos sistemas semelhantes ao Debian, o Apache é www-data .

Para conferir, tente:

ps aux | grep -E '[a]pache|[h]ttpd|[_]www|[w]ww-data|[n]ginx' | grep -v root | head -1 | cut -d\  -f1

Verifique se o nome de usuário que este comando retorna é coerente (por exemplo, eu uso 99% do Apache, mas esse comando retorna tomcat7 ).

Conceder permissões ao servidor Web ( chmod , chown )

Fazer chmod de 666 ou 777 pode ser suficiente, mas não é seguro. Dar permissões 666 ou 777 dará acesso a "outros". Então não apenas Apache, mas também sua avó e a NSA.

É melhor ser mais preciso e conceder permissões apenas a você e ao Apache, mas não à nossa avó. Altere o grupo de seus arquivos para fornecer o controle total sobre seus arquivos no servidor da web. Para fazer isso, altere o proprietário recursivamente:

chown -R www-data:www-data /folder/used/by/EE

Como alternativa, você pode manter acesso total aos seus arquivos alterando apenas o grupo:

chown -R yourusername:www-data /folder/used/by/EE

Em seguida, faça o chmod apropriado para dar ao grupo www-data as mesmas permissões que você. Por exemplo, se o modo real for 640, defina-o como 660. Veja a resposta de rahmu para mais explicações.

Conceder permissões ao servidor Web ( ACL )

Às vezes, a primeira solução não é suficiente. Vou pegar o exemplo do Symfony Framework que registra e armazena em cache muitos dados. Por isso, precisa de acesso de gravação à pasta apropriada.

E o método chmod / chown pode não ser suficiente, quando você está usando em paralelo o Symfony Console na CLI (sob minha conta de usuário) e a Web (usuário do servidor web), isso causa muitos problemas porque o Symfony está constantemente modificando permissões.

Nesse caso, usaremos a ACL (Lista de controle de acesso), que é uma maneira mais avançada de gerenciar permissões.

Aqui os comandos dados pela documentação oficial do Symfony (por favor, adapte app/cache e app/logs às suas necessidades):

Em um sistema que suporta chmod +a

sudo chmod +a "www-data allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs
sudo chmod +a "'whoami' allow delete,write,append,file_inherit,directory_inherit" app/cache app/logs

Em um sistema que não suporta chmod +a

Você precisará da ferramenta setfacl , talvez ela esteja instalada no seu sistema por padrão. Caso contrário, siga a documentação do Ubuntu .

sudo setfacl -R -m u:"www-data":rwX -m u:'whoami':rwX app/cache app/logs
sudo setfacl -dR -m u:"www-data":rwX -m u:'whoami':rwX app/cache app/logs
    
por 14.12.2014 / 00:18
2

Não importa quem seja o proprietário dos arquivos, 666 permissões e 777 seriam suficientes: o último dígito garante que todos os usuários do sistema tenham acesso. Embora essa seja a maneira mais fácil de fazê-lo, ela definitivamente não é a mais segura por esse motivo exato.

Uma maneira melhor de fazer isso

A primeira coisa que você precisa entender é como as permissões do Unix funcionam . No interesse de entender a resposta que dei neste link, observe que as permissões podem ser traduzidas para números:

  • 0: ---
  • 1: --x
  • 2: -w-
  • 3: -wx
  • 4: r--
  • 5: r-x
  • 6: rw-
  • 7: rwx

Um chmod 666 é equivalente a alterar as permissões para rw-rw-rw .

Em seguida, você precisa descobrir qual é o usuário que está executando o script PHP. Normalmente, esse seria o usuário que está executando seu servidor da web. Veja um exemplo de como fazer isso (você pode substituir o Apache pelo nome do seu servidor web).

Depois que você souber qual é o usuário que está executando os scripts e qual é o proprietário dos arquivos mencionados, cabe a você definir as permissões apropriadas. Lembre-se de que conceder acesso de gravação (até mesmo leitura) a todos os usuários do sistema pode ser potencialmente desastroso.

    
por 23.06.2012 / 17:20
0

O Expression Engine é semelhante a muitos outros aplicativos da Web PHP que precisam de acesso de leitura + gravação a alguns arquivos e diretórios. Por exemplo, o EE requer acesso de gravação aos seus arquivos config.php e database.php e grava o acesso aos diretórios de upload de arquivos.

O que a documentação está dizendo é que, como a maioria dos servidores rodam o PHP como mod_php (e assim rodam com as permissões do servidor web), e como você provavelmente irá carregar seus arquivos com FTP (ou similar) usando seu próprio usuário, esses arquivos e diretórios precisarão receber permissões 666 (todos podem ler e escrever) e 777 (todos podem ler, escrever e navegar).

Essa não é a maneira mais segura, mas certamente é a mais fácil, especialmente se você estiver usando um serviço de hospedagem.

No entanto, como o estado das instruções de EE, pergunte ao seu provedor de hospedagem, porque alguns não usam mod_php mas uma versão fastcgi, suphp ou diferente. Esses servidores executam o PHP como seu próprio usuário, então todos os arquivos que você carrega já são legíveis e graváveis pelo PHP e por qualquer arquivo criado pelos scripts EE. Nesse caso, arquivos e diretórios acessados pelo PHP precisariam receber 600 e 700 acessos. Outros arquivos a serem acessados diretamente pelo servidor da Web (não o tempo de execução do PHP) ainda precisariam de acesso 666 e 777).

    
por 23.06.2012 / 14:45