Ich habe Probleme, eine Reihe von Skripten zum Laufen zu bringen, da PHP-FPM nicht in meinen Sitzungsordner schreiben kann:
"2009/10/01 23:54:07 [error] 17830 # 0: * 24 FastCGI gesendet in stderr:" PHP Warning: Unbekannt: open (/ var / lib / php / session / sess_cskfq4godj4ka2a637i5lq41o5, O_RDWR) fehlgeschlagen: Berechtigung verweigert (13) in Unbekannt in Zeile 0 PHP-Warnung: Unbekannt: Fehler beim Schreiben der Sitzungsdaten (Dateien). Bitte überprüfen dass die aktuelle Einstellung von session.save_path korrekt ist (/ var / lib / php / session) in Unknown in Zeile 0 "beim Upstream-Lesen"
Offensichtlich handelt es sich hierbei um eine Berechtigungsfrage. Der Besitzer / die Gruppe meines Sitzungsordners ist der Benutzer des Webservers, NGINX. PHP-FPM läuft so, als nobody
ob, und daher ist es nicht so trivial, es der Nginx-Gruppe hinzuzufügen.
Eine vorübergehende Lösung besteht darin, die Berechtigungen für /var/lib/php/session
festzulegen 777
- ich habe jedoch das Gefühl, dass dies nicht die "beste Vorgehensweise" ist.
Was ist die beste Vorgehensweise, wenn Sie einem Ordner einen Daemon-Schreibzugriff zuweisen müssen, der jedoch als ausgeführt wird nobody
?
nobody
, wer mein Benutzer ist, der PHP mit dieser Codezeile ausführt:<?php echo exec('whoami'); ?>
(in meinem Fall www-data) und danach war es so einfach wie gerade geschrieben.chown -R www-data:www-data /var/lib/php/sessions
Dies ist ein unterschätztes Google-Ergebnis, da es die einzige Antwort war, die es half mich nach stundenlangem suchen! Vielen Dank!Manchmal, wenn Sie das System aktualisieren, wird die Gruppe von
/var/lib/php/session
zu Apache geändert.Versuchen Sie, auszuführen,
sudo chgrp nginx /var/lib/php/*
anstatt die Berechtigungen auf 777 zu setzen, was eine schlechte Praxis ist.Das hat zumindest bei mir funktioniert.
quelle
Verwenden
/etc/php.ini
Sie die Anweisung session.save_path ."Wenn Sie diesen Satz in einem von der Welt lesbaren Verzeichnis belassen, können andere Benutzer auf dem Server möglicherweise Sitzungen entführen, indem sie die Liste der Dateien in diesem Verzeichnis abrufen."
quelle
nginx.conf
oderphp-fpm.conf
), so dass Sie mit diesem Verzeichnis 700. 2. Verwenden Sie halten können ,chown -R nginx:nobody /var/lib/php/session && chmod -R 770 /var/lib/php/session
so denke ich beide nginx und php-fpm es verwenden könnenIch musste einen Ordner mit 0700-Rechten in / var / lib / php / session für jeden php-fpm-Pool erstellen.
Besitzer dieses Ordners sind Benutzer und Gruppen aus dem php-fpm-Pool.
Und / var / lib / php / session jetzt 0777.
Ich denke, diese Methode ist am sichersten. Nur Benutzer des php-fpm-Pools können diese Sitzungen sehen.
quelle
Ich hatte das gleiche Problem und ich habe es gelöst. Ich ging zu
/tmp
(dort sind meine ses_ * -Dateien) und löschte sie alle. Danach war alles in Ordnung.Soweit ich das beurteilen konnte, versuchte das System, auf alte gesperrte Dateien zu schreiben.
Das Problem trat auf, nachdem ich mit gespielt hatte
php.ini
. Ich habe ein paar Jahre meines Lebens verloren, aber schließlich habe ich die Lösung gefunden.quelle
Der richtige Weg sollte darin bestehen, den Besitz des Sitzungsordners in nginx zu ändern. PHP-FPM wird jedoch nicht standardmäßig mit dem Benutzer nginx ausgeführt. Standardmäßig wird Apache verwendet.
Vor diesem Hintergrund müssen Sie den von PHP-FPM verwendeten Benutzer durch Bearbeiten ändern
/etc/php-fpm.d/www.conf
.Starten Sie PHP-FPM neu und Sie sollten einsatzbereit sein.
service php-fpm restart
Die Position des PHP-Sitzungspfads finden Sie
/etc/php.ini
untersession.save_path
./var/lib/php/session
ist die Standardeinstellung.Befehl zum Aktualisieren des Besitzes und der Gruppe des PHP-Sitzungsordners
chown -R nginx:nginx /var/lib/php/session
Und du solltest auch mit chmod von gut auskommen
700
.quelle
Das Verzeichnis / var / lib / php / sessions sollte über Sticky-Bit-Berechtigungen verfügen.
quelle
Basierend auf der Antwort von @Judder musste ich den folgenden Befehl hinzufügen, um niemandem und nogroup Lese- und Schreibberechtigungen zu erteilen : chmod ändert die Berechtigungen für den angegebenen Ordner -R wendet dieselben Berechtigungen auf die erstellten Ordner und Dateien an innerhalb des angegebenen Ordners u für Benutzer g für Gruppe r für Leseberechtigung w für Schreibberechtigung
chown -R nobody:nogroup /var/lib/php/session
sudo chmod -R ug+rw /var/lib/php/sessions
quelle