Quais permissões / propriedade devem ser definidas na pasta Sessões do PHP ao executar o FastCGI / PHP-FPM (como usuário “nobody”)?

17

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 nobodyse, portanto, adicioná-lo ao grupo nginx não é tão trivial.

Uma solução temporária é definir as permissões de /var/lib/php/sessionpara 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?

Professor Frink
fonte

Respostas:

24

As permissões corretas para nós onde

chown -R nobody:nogroup /var/lib/php/session

é php-cgiexecutado como nobody, mesmo que o NGinx seja executado como usuárionginx

Judder
fonte
No meu caso, não era uma questão de propriedade / permissões. Remova o "3"; de session.save_path = "3; / var / lib / php / sessions"
John Doe
1
Eu recebo o seguinte erro: Grupo inválido << ninguém: nogroup >> :(
Patros
Eu era capaz de ver qual é o meu nobodyusuá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/sessionseste é um resultado subestimado do Google, pois foi a única resposta que ajudou depois de horas pesquisando! obrigado!
Dimitar
9

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.

Nick G
fonte
1
Isso deve ser marcado como resposta aceita.
Yuda Prawira 22/09
3

Use a diretiva /etc/php.ini session.save_path .

Uma solução temporária é definir as permissões de / var / lib / php / session para 777 - acho que essa não é a "melhor prática".

"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".

SaveTheRbtz
fonte
Desculpe, acho que talvez não tenha sido claro: session.save_path já está definido como / var / lib / php / session. O problema é que não consigo descobrir quais permissões e propriedade atribuir ao diretório do caminho da sessão, a fim de permitir que o PHP-FPM grave nele, além de mantê-lo seguro. Tendo o conjunto diretório como dono / grupo "nginx" (O servidor web que eu estou correndo) e permissões 755 não parece fazer o truque
Professor Frink
4
1. Use mesmo usuário: grupo para o nginx e PHP-FPM (via tanto nginx.confou php-fpm.conf), para que possa manter este diretório 700. 2. Use chown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/sessionentão eu acho que ambos nginx e PHP-FPM pode usá-lo
SaveTheRbtz
2
Posso confirmar que o uso do nginx: ninguém (ou nginx: nogroup em algumas circunstâncias) funciona. Se for possível, eu me inclinaria para a opção 1 do SaveTheRbtz '.
22611 Michael Johnson
3

Eu 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.

Alexander Merkulov
fonte
1

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.

Christos
fonte
1

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.

; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

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.iniabaixo session.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.

josephting
fonte
1

O diretório / var / lib / php / sessions deve ter permissões de bits persistentes.

sudo chmod 1773 /var/lib/php/sessions

ls -al /var/lib/php/
drwxr-xr-x  4 root root   .
drwxr-xr-x 51 root root   ..
drwxr-xr-x  3 root root   modules
drwx-wx-wt  2 root root   sessions
Łukasz
fonte
0

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

Guillaume Genreau
fonte