У меня проблемы с запуском ряда скриптов, потому что 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
?
nobody
пользователь запускает php с этой строкой кода:<?php echo exec('whoami'); ?>
(в моем случае www-data), и после этого было просто, как только что написал,chown -R www-data:www-data /var/lib/php/sessions
это недооцененный результат Google, так как это был единственный ответ, который помог меня после нескольких часов поиска! Благодарность!Если вы используете nginx, вы можете столкнуться с этим при запуске обновления системы.
Иногда при обновлении системы группа
/var/lib/php/session
меняется на apache.Попробуйте выполнить
sudo chgrp nginx /var/lib/php/*
вместо установки разрешений 777, что является плохой практикой.Это работало для меня по крайней мере.
источник
Используйте директиву
/etc/php.ini
session.save_path .«Если вы оставите этот набор в общедоступном каталоге, другие пользователи на сервере могут перехватить сессии, получив список файлов в этом каталоге».
источник
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 могут его использоватьМне пришлось создать папку с правами 0700 в / var / lib / php / session для каждого пула php-fpm.
Владелец этой папки - пользователь и группа из пула php-fpm.
И / var / lib / php / session теперь 0777.
Я думаю, что этот метод является наиболее безопасным. Только пользователь пула php-fpm будет видеть эти сеансы.
источник
У меня была такая же проблема, и я решил ее. Я пошел
/tmp
(там находятся мои файлы ses_ *) и удалил их все. После этого все было в порядке.Насколько я мог судить, система пыталась записать старые заблокированные файлы.
Проблема возникла после того, как я поиграл
php.ini
. Я потерял пару лет из своей жизни, но в конце концов я нашел решение.источник
Правильным способом должно быть изменение владельца папки сеанса на nginx. Однако PHP-FPM не запускается с использованием пользователя nginx по умолчанию. По умолчанию он использует apache.
С учетом сказанного, вы должны изменить пользователя, который используется PHP-FPM, путем редактирования
/etc/php-fpm.d/www.conf
.Перезапустите 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
.источник
Директория / var / lib / php / session должна иметь права на закрепление битов.
источник
Исходя из ответа @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 для разрешения на запись
источник