Які дозволи / право власності встановити на PHP Sessions Folder під час роботи FastCGI / PHP-FPM (як користувач "ніхто")?


17

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

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

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

Тимчасове рішення полягає у встановленні дозволів /var/lib/php/sessionна 777- хоча я маю відчуття, що це не "найкраща практика".

Яка найкраща практика, коли вам потрібно призначити доступ до запису демона до папки, але він працює як nobody?

Відповіді:


24

Правильні дозволи для нас, де

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

як php-cgiпрацює nobody, навіть якщо NGinx працює як користувачnginx


У моєму випадку це не було питання власності / дозволів. Видаліть "3;" від session.save_path = "3; / var / lib / php / session"
John Doe

1
Я отримую наступне повідомлення про помилку: Invalid групи << ніхто: nogroup >> :(
Патросу

я зміг побачити, хто мій 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
Це слід позначити як прийняту відповідь.
Yuda Prawira

3

Використовуйте директиву /etc/php.ini session.save_path .

Тимчасовим рішенням є встановлення дозволів / var / lib / php / session на 777 - я маю відчуття, що це не "найкраща практика".

"Якщо ви залишите цей набір у каталозі, читаному у всьому світі, інші користувачі на сервері можуть мати змогу захопити сеанси, отримавши список файлів у цьому каталозі."


Вибачте, я думаю, що я, можливо, не зрозумів: session.save_path вже встановлено на / var / lib / php / session. Проблема полягає в тому, що я не можу визначити, які дозволи та права власності призначити до каталогу сеансу шляху, щоб одночасно дозволити PHP-FPM писати до нього, а також захистити його. Якщо каталог встановлено як власник / групу "nginx" (Веб-сервер, на якому я працюю) та дозволи 755, схоже, не роблять фокусу
професор Frink

4
1. Використовуйте того ж користувача: 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: ніхто (або nginx: nogroup за деяких обставин) не працює. Якщо це можливо, я б схилявся до варіанту 1 SaveTheRbtz '.
Майкл Джонсон

3

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

Власник цієї папки - це користувач та група з пулу php-fpm.

І / var / lib / php / сесія зараз 0777.

Я думаю, що цей метод є найбільш безпечним. Тільки користувачі пулу php-fpm бачитимуть ці сеанси.


1

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

Як я можу сказати, система намагалася писати на старі заблоковані файли.

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


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.


1

Каталог / var / lib / php / сесії повинен мати клейкі бітові дозволи.

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 : chmod змінить дозволи на задану папку -R застосує ті ж дозволи до створених папок і файлів. в межах заданої папки u для користувача g для групи r для дозволу читання w для дозволу на запис

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

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






Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.