Какие права доступа / права владения установить для Папки сессий PHP при запуске FastCGI / PHP-FPM (как пользователь «nobody»)?

17

У меня проблемы с запуском ряда скриптов, потому что PHP-FPM не может записать в мою папку сессии:

"2009/10/01 23:54:07 [error] 17830 # 0: * 24 FastCGI отправлено в stderr:" Предупреждение PHP:
    Неизвестно: открыто (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR)
    Сбой: В доступе отказано (13) в Неизвестно в строке 0
Предупреждение PHP: Неизвестно: не удалось записать данные сеанса (файлы). Пожалуйста, подтвердите
    что текущая настройка session.save_path верна
    (/ var / lib / php / session) в поле Unknown в строке 0 «при чтении в восходящем направлении»

Очевидно, что это проблема разрешения; владельцем / группой моей папки сеанса является пользователь веб-сервера, NGINX. PHP-FPM работает так nobodyже, и, следовательно, добавление его в группу nginx не так тривиально.

Временное решение состоит в том, чтобы установить разрешения /var/lib/php/sessionдля 777- у меня такое ощущение, что это не «лучшая практика».

Какова оптимальная практика, когда вам нужно назначить демону доступ на запись к папке, но он работает как nobody?

Профессор фринк
источник

Ответы:

24

Правильные разрешения для нас, где

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

as as php-cgias nobody, хотя NGinx работает как пользовательnginx

вибрировать
источник
В моем случае это был не вопрос владения / разрешения. Удалить "3;" from session.save_path = "3; / var / lib / php / session"
Джон Доу,
1
Я получаю следующую ошибку: Неверная группа << nobody: nogroup >> :(
Pathros
я смог увидеть, какой мой nobodyпользователь запускает php с этой строкой кода: <?php echo exec('whoami'); ?>(в моем случае www-data), и после этого было просто, как только что написал, chown -R www-data:www-data /var/lib/php/sessionsэто недооцененный результат Google, так как это был единственный ответ, который помог меня после нескольких часов поиска! Благодарность!
Димитар
9

Если вы используете nginx, вы можете столкнуться с этим при запуске обновления системы.

Иногда при обновлении системы группа /var/lib/php/sessionменяется на apache.

Попробуйте выполнить sudo chgrp nginx /var/lib/php/*вместо установки разрешений 777, что является плохой практикой.

Это работало для меня по крайней мере.

Ник Дж
источник
1
Это должно быть помечено как принятый ответ.
Юда Prawira
3

Используйте директиву /etc/php.ini session.save_path .

Временное решение состоит в том, чтобы установить права доступа / var / lib / php / session равным 777 - но у меня такое ощущение, что это не «лучшая практика».

«Если вы оставите этот набор в общедоступном каталоге, другие пользователи на сервере могут перехватить сессии, получив список файлов в этом каталоге».

SaveTheRbtz
источник
Извините, я думаю, что, возможно, не был ясен: session.save_path уже установлен в / var / lib / php / session. Проблема в том, что я не могу выяснить, какие разрешения и владельца назначить каталогу пути сеанса, чтобы разрешить PHP-FPM запись в него и сохранить его в безопасности. Установка каталога в качестве владельца / группы "nginx" (веб-сервер, на котором я работаю) и разрешений 755, похоже, не помогают
профессор Фринк,
4
1. Используйте один и тот же user: group для nginx и php-fpm (с помощью либо nginx.confили php-fpm.conf), чтобы вы могли сохранить этот каталог 700. 2. Используйте, chown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/sessionтак что я думаю, что и nginx и php-fpm могут его использовать
SaveTheRbtz
2
Я могу подтвердить, что использование nginx: nobody (или nginx: nogroup в некоторых случаях) работает. Если это возможно, я бы склонялся к варианту SaveTheRbtz '1.
Майкл Джонсон
3

Мне пришлось создать папку с правами 0700 в / var / lib / php / session для каждого пула php-fpm.

Владелец этой папки - пользователь и группа из пула php-fpm.

И / var / lib / php / session теперь 0777.

Я думаю, что этот метод является наиболее безопасным. Только пользователь пула php-fpm будет видеть эти сеансы.

Александр Меркулов
источник
1

У меня была такая же проблема, и я решил ее. Я пошел /tmp(там находятся мои файлы ses_ *) и удалил их все. После этого все было в порядке.

Насколько я мог судить, система пыталась записать старые заблокированные файлы.

Проблема возникла после того, как я поиграл php.ini. Я потерял пару лет из своей жизни, но в конце концов я нашел решение.

Christos
источник
1

Правильным способом должно быть изменение владельца папки сеанса на nginx. Однако PHP-FPM не запускается с использованием пользователя nginx по умолчанию. По умолчанию он использует apache.

С учетом сказанного, вы должны изменить пользователя, который используется PHP-FPM, путем редактирования /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

Перезапустите PHP-FPM, и все будет хорошо.

service php-fpm restart


Путь к сеансу PHP можно найти в /etc/php.iniразделе session.save_path. /var/lib/php/sessionпо умолчанию.

Команда для обновления владельца и группы папки сеанса php

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

И вы должны хорошо идти даже с chmod of 700.

josephting
источник
1

Директория / var / lib / php / session должна иметь права на закрепление битов.

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
Лукаш
источник
0

Исходя из ответа @Judder , чтобы это работало, мне пришлось добавить следующую команду, чтобы дать права на чтение и запись никому и nogroup :

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

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

chmod изменит разрешения для данной папки
-R будет применять те же разрешения для созданных папок и файлов в заданной папке
u для пользователя
g для группы
r для разрешения на чтение
w для разрешения на запись

Гийом Жанро
источник