Mam problem z uruchomieniem wielu skryptów, ponieważ PHP-FPM nie może pisać do mojego folderu sesji:
„2009/10/01 23:54:07 [błąd] 17830 # 0: * 24 FastCGI wysłany w stderr:„ Ostrzeżenie PHP: Nieznany: open (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR) nie powiodło się: Odmowa zezwolenia (13) w Nieznany w wierszu 0 Ostrzeżenie PHP: Nieznany: Nie można zapisać danych sesji (plików). Proszę zweryfikuj że bieżące ustawienie session.save_path jest poprawne (/ var / lib / php / session) w Nieznany w wierszu 0 „podczas czytania w górę”
Oczywiście jest to kwestia pozwolenia; właścicielem / grupą mojego folderu sesji jest użytkownik serwera WWW, NGINX. PHP-FPM działa tak, nobody
jakby i dlatego dodanie go do grupy nginx nie jest takie proste.
Tymczasowym rozwiązaniem jest ustawienie uprawnień /var/lib/php/session
do 777
- mam wrażenie, że nie jest to „najlepsza praktyka”.
Jaka jest najlepsza praktyka, gdy trzeba przypisać demonowi dostęp do zapisu do folderu, ale działa on jako nobody
?
nobody
użytkownikiem, który uruchamia php z tym wierszem kodu:<?php echo exec('whoami'); ?>
(w moim przypadku www-data), a potem było to proste, ponieważ właśnie napisałem,chown -R www-data:www-data /var/lib/php/sessions
że jest to niedoceniany wynik google, ponieważ była to jedyna odpowiedź, która pomogła ja po godzinach poszukiwań! dzięki!Jeśli używasz nginx, możesz napotkać to podczas uruchamiania aktualizacji systemu.
Czasami podczas aktualizacji systemu grupa
/var/lib/php/session
zmienia się na apache.Spróbuj wykonać
sudo chgrp nginx /var/lib/php/*
zamiast ustawiać uprawnienia na 777, co jest złą praktyką.To mi przynajmniej działało.
źródło
Użyj dyrektywy
/etc/php.ini
session.save_path .„Jeśli pozostawisz ten zestaw w katalogu czytelnym dla całego świata, inni użytkownicy na serwerze mogą przechwycić sesje, uzyskując listę plików w tym katalogu”.
źródło
nginx.conf
lubphp-fpm.conf
), abyś mógł zachować ten katalog 700. 2. Użyj,chown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/session
więc myślę, że zarówno nginx, jak i php-fpm mogą go używaćMusiałem utworzyć folder z uprawnieniami 0700 w / var / lib / php / session dla każdej puli php-fpm.
Właścicielem tego folderu jest użytkownik i grupa z puli php-fpm.
I / var / lib / php / session teraz 0777.
Myślę, że ta metoda jest najbezpieczniejsza. Tylko użytkownik puli php-fpm będzie widział te sesje.
źródło
Miałem ten sam problem i go rozwiązałem. Poszedłem do
/tmp
(tam są moje pliki ses_ *) i usunąłem je wszystkie. Potem wszystko było w porządku.Tak blisko, jak mogłem stwierdzić, system próbował pisać na starych zablokowanych plikach.
Problem pojawił się po tym, jak się bawiłem
php.ini
. Straciłem kilka lat życia, ale w końcu znalazłem rozwiązanie.źródło
Prawidłowym sposobem powinna być zmiana własności folderu sesji na nginx. Jednak PHP-FPM nie działa domyślnie przy użyciu użytkownika nginx. Domyślnie używa apache.
Powiedziawszy to, musisz zmienić użytkownika używanego przez PHP-FPM poprzez edycję
/etc/php-fpm.d/www.conf
.Uruchom ponownie PHP-FPM i powinieneś być gotowy.
service php-fpm restart
PHP lokalizacja ścieżka sesji można znaleźć w
/etc/php.ini
niedostateczniesession.save_path
./var/lib/php/session
jest wartością domyślną.Polecenie aktualizacji własności i grupy folderów sesji php
chown -R nginx:nginx /var/lib/php/session
I powinieneś być dobry nawet z chmod
700
.źródło
Sesje na katalog / var / lib / php / powinny mieć lepkie uprawnienia do bitów.
źródło
Oparte na odpowiedzi @Judder , aby zadziałało, musiałem dodać następujące polecenie, aby dać uprawnienia do odczytu i zapisu nikomu i nogroup :
chown -R nobody:nogroup /var/lib/php/session
sudo chmod -R ug+rw /var/lib/php/sessions
chmod zmieni uprawnienia w danym folderze
-R zastosuje te same uprawnienia do utworzonych folderów i plików w danym folderze
u dla użytkownika
g dla grupy
r dla uprawnienia do odczytu
w dla uprawnienia do zapisu
źródło