У меня проблемы с запуском нескольких скриптов, потому что PHP-FPM не может писать в мою папку сеанса:
"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"
Очевидно, это проблема с разрешением; Владелец / группа моей папки сеанса - это пользователь веб-сервера, NGINX. PHP-FPM работает как nobody
хотя и, следовательно, добавить его в группу nginx не так уж и тривиально.
Временное решение - установить разрешения для /var/lib/php/session
к 777
- У меня такое ощущение, что это не лучшая практика.
Каков наилучший метод, когда вам нужно назначить демону доступ на запись к папке, но он работает как nobody
?
Правильные разрешения для нас, где
chown -R nobody:nogroup /var/lib/php/session
так как php-cgi
работает как nobody
, хотя NGinx работает как пользователь nginx
Если вы используете nginx вы можете столкнуться с этим при запуске обновления системы.
Иногда при обновлении системы группа /var/lib/php/session
заменен на apache.
Попробуйте выполнить sudo chgrp nginx /var/lib/php/*
вместо установки разрешений на 777, что является плохой практикой.
По крайней мере, у меня это сработало.
Мне пришлось создать папку с правами 0700 в / var / lib / php / session для каждого пула php-fpm.
Владелец этой папки - пользователь и группа из пула php-fpm.
И теперь / var / lib / php / session 0777.
Я считаю этот метод наиболее безопасным. Только пользователь пула php-fpm увидит эти сеансы.
Использовать /etc/php.ini
session.save_path директива.
Временным решением является установка разрешений для / var / lib / php / session равными 777 - хотя мне кажется, что это не лучшая практика.
«Если вы оставите это значение для каталога, доступного для чтения всем, другие пользователи на сервере смогут захватить сеансы, получив список файлов в этом каталоге».
Правильный способ - сменить владельца папки сеанса на 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 из 700
.
У меня была такая же проблема, и я ее решил. я пошел в /tmp
(вот где мои файлы ses_ *) и удалил их все. После этого все было в порядке.
Насколько я мог судить, система пыталась записывать старые заблокированные файлы.
Проблема возникла после того, как я играл с php.ini
. Я потерял пару лет своей жизни, но в конце концов нашел решение.
Каталог / var / lib / php / sessions должен иметь разрешения для закрепленных битов.
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
На основе @Judder ответ, чтобы заставить его работать, мне пришлось добавить следующую команду, чтобы дать читать и записывать разрешения на никто и группа: chown -R nobody:nogroup /var/lib/php/session
sudo chmod -R ug+rw /var/lib/php/sessions
chmod изменит разрешения для данной папки
-Р применит те же разрешения к папкам и файлам, созданным в данной папке
ты для пользователя
грамм для группы
р для разрешения на чтение
ш для разрешения на запись