Estou tendo problemas para obter vários scripts em execução porque o PHP-FPM não pode gravar na minha pasta da sessão:
"01/10/2009 23:54:07 [erro] 17830 # 0: * 24 FastCGI enviado no stderr:" PHP Aviso: Desconhecido: aberto (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR) falha: permissão negada (13) em Desconhecido na linha 0 Aviso do PHP: Desconhecido: falha ao gravar os dados da sessão (arquivos). Por favor verifique que a configuração atual de session.save_path está correta (/ var / lib / php / session) em Desconhecido na linha 0 "durante a leitura upstream"
Obviamente, esse é um problema de permissão; o proprietário / grupo da pasta da minha sessão é o usuário do servidor da web, NGINX. O PHP-FPM é executado como nobody
se, portanto, adicioná-lo ao grupo nginx não é tão trivial.
Uma solução temporária é definir as permissões de /var/lib/php/session
para 777
- tenho a sensação de que essa não é a "melhor prática".
Qual é a melhor prática quando você precisa atribuir um acesso de gravação de daemon a uma pasta, mas está sendo executado como nobody
?
nobody
usuário que executa o php com esta linha de código:<?php echo exec('whoami'); ?>
(no meu caso www-data) e depois disso era simples, como acabei de escrever,chown -R www-data:www-data /var/lib/php/sessions
este é um resultado subestimado do Google, pois foi a única resposta que ajudou depois de horas pesquisando! obrigado!Se você usar o nginx, poderá encontrar isso ao executar uma atualização do sistema.
Às vezes, quando você atualiza o sistema, o grupo de
/var/lib/php/session
é alterado para apache.Tente executar em
sudo chgrp nginx /var/lib/php/*
vez de definir permissões para 777, o que é uma prática ruim.Isso funcionou para mim, pelo menos.
fonte
Use a diretiva
/etc/php.ini
session.save_path ."Se você deixar esse conjunto em um diretório legível pelo mundo, outros usuários no servidor poderão seqüestrar sessões obtendo a lista de arquivos nesse diretório".
fonte
nginx.conf
ouphp-fpm.conf
), para que possa manter este diretório 700. 2. Usechown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/session
então eu acho que ambos nginx e PHP-FPM pode usá-loEu tive que criar uma pasta com direitos 0700 em / var / lib / php / session para cada pool de php-fpm.
O proprietário desta pasta é usuário e grupo do pool php-fpm.
E / var / lib / php / session agora 0777.
Eu acho que esse método é mais seguro. Somente o usuário do pool php-fpm verá essas sessões.
fonte
Eu tive o mesmo problema e resolvi-o. Eu fui para
/tmp
(é onde estão meus arquivos ses_ *) e apaguei todos eles. Depois disso tudo estava bem.Tão perto quanto eu poderia dizer, o sistema estava tentando escrever em arquivos bloqueados antigos.
O problema ocorreu depois que eu estava brincando
php.ini
. Perdi alguns anos da minha vida, mas finalmente encontrei a solução.fonte
A maneira correta deve ser alterar a propriedade da pasta da sessão para nginx. No entanto, o PHP-FPM não é executado usando o usuário nginx por padrão. Ele usa o apache por padrão.
Com isso dito, você deve alterar o usuário usado pelo PHP-FPM editando
/etc/php-fpm.d/www.conf
.Reinicie o PHP-FPM e você deve estar pronto.
service php-fpm restart
O local do caminho da sessão PHP pode ser encontrado em
/etc/php.ini
abaixosession.save_path
./var/lib/php/session
é o padrão.Comando para atualizar a propriedade e o grupo da pasta da sessão php
chown -R nginx:nginx /var/lib/php/session
E você deve estar preparado para acompanhar o chmod de
700
.fonte
O diretório / var / lib / php / sessions deve ter permissões de bits persistentes.
fonte
Com base na resposta do @Judder , para fazê-lo funcionar, tive que adicionar o seguinte comando para conceder permissões de leitura e gravação a ninguém e nogroup :
chown -R nobody:nogroup /var/lib/php/session
sudo chmod -R ug+rw /var/lib/php/sessions
chmod alterará as permissões na pasta especificada
-R aplicará as mesmas permissões nas pastas e arquivos criados dentro da pasta fornecida
u para o usuário
g do grupo
r para permissão de leitura
w para permissão de gravação
fonte