Назад | Перейти на главную страницу

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

У меня проблемы с запуском нескольких скриптов, потому что 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 изменит разрешения для данной папки
применит те же разрешения к папкам и файлам, созданным в данной папке
ты для пользователя
грамм для группы
р для разрешения на чтение
ш для разрешения на запись