Que permissões / propriedade deve ser definida na pasta de sessões do PHP ao executar o FastCGI / PHP-FPM (como usuário “nobody”)?

16

Estou tendo problemas para obter vários scripts em execução porque o PHP-FPM não pode gravar em minha pasta de sessão:

"2009/10/01 23:54:07 [error] 17830#0: *24 FastCGI sent in stderr: "PHP Warning:
    Unknown: open(/var/lib/php/session/sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR)
    failed: Permission denied (13) in Unknown on line 0
PHP Warning:  Unknown: Failed to write session data (files). Please verify
    that the current setting of session.save_path is correct
    (/var/lib/php/session) in Unknown on line 0" while reading upstream"

Obviamente, esta é uma questão de permissão; o proprietário / grupo da minha pasta de sessão é o usuário do servidor, NGINX. O PHP-FPM é executado como nobody e, 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 daemon para gravar o acesso a uma pasta, mas ela está sendo executada como nobody ?

    
por Professor Frink 02.10.2009 / 06:16

8 respostas

22

As permissões corretas para nós, onde

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

como php-cgi é executado como nobody , mesmo que o NGinx seja executado como usuário nginx

    
por 13.12.2011 / 10:55
5

Às vezes, quando você atualiza o sistema, o grupo de /var/lib/php/session é alterado para o apache.

Tente executar sudo chgrp nginx /var/lib/php/* em vez de definir permissões para 777, o que é uma prática ruim.

Isso funcionou para mim pelo menos.

    
por 14.03.2017 / 11:32
3

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

A temporary solution is to set the permissions of /var/lib/php/session to 777 - I have a feeling that's not the "best practice" though.

"Se você deixar este 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."

    
por 02.10.2009 / 09:46
3

Eu tive que criar uma pasta com direitos 0700 em / var / lib / php / session para cada conjunto php-fpm.

O proprietário desta pasta é usuário e grupo do conjunto php-fpm.

E / var / lib / php / session agora 0777.

Acho que esse método é mais seguro. Apenas o usuário do pool php-fpm verá essas sessões.

    
por 19.11.2013 / 19:11
1

Eu tive o mesmo problema e resolvi isso. Eu fui para /tmp (é onde meus arquivos ses_ * estão) e deletei todos eles. Depois disso tudo deu certo.

Tão perto quanto eu poderia dizer que o sistema estava tentando escrever em arquivos antigos bloqueados.

O problema ocorreu depois que eu estava jogando com php.ini . Eu perdi alguns anos da minha vida, mas acabei encontrando a solução.

    
por 03.09.2011 / 00:31
1

A maneira correta deve ser alterar a propriedade da pasta de sessão para nginx. Entretanto, o PHP-FPM não roda usando o usuário nginx por padrão. Ele usa o apache por padrão.

Com isso dito, você deve alterar o usuário que é 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 do PHP pode ser encontrado em /etc/php.ini under session.save_path . /var/lib/php/session é o padrão.

Comando para atualizar a propriedade e o grupo da pasta de sessão do php

chown -R nginx:nginx /var/lib/php/session

E você deve ser bom mesmo com chmod de 700 .

    
por 17.06.2015 / 22:12
1

Diretório / var / lib / php / sessions deve ter permissões de bits fixos.

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
    
por 08.12.2017 / 12:02
0

Com base na resposta do @Judder , para que funcione, precisei adicionar o seguinte comando para conceder leitura e gravação às permissões > nobody e nogroup :

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

sudo chmod -R ug+rw /var/lib/php/sessions

chmod mudará as permissões na pasta dada O -R aplicará as mesmas permissões às pastas e arquivos criados dentro da pasta especificada
u para o usuário
g para o grupo
r para permissão de leitura
w para permissão de gravação

    
por 18.05.2016 / 23:07