Der Besitzer des PHP-Sitzungsordners ändert sich ständig

700
Patrick R.

Problem

Alle paar Wochen wird der PHP-Sitzungsordner eines Computers in Besitzer geändert, apacheobwohl ich Nginx verwende. Dadurch werden PHP-Anwendungen, beispielsweise phpMyAdmin, mit einem session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13)-Error gebrochen.

Ich kann das Problem manuell beheben sudo chown -R nginx /var/lib/php/session/

Umgebung

  • Virtuelle Maschine mit CentOS Linux Version 7.4.1708, yum-cron mit automatischer Installation des Sicherheitsupdates
  • EPEL-Repository installiert
  • Nginx-Version: Nginx / 1.14.0
  • PHP-Version: 7.0.29 (PHP-FPM)

Weitere Details

  • Dies scheint alle paar Wochen zu brechen, ich kann jedoch nicht genau sagen, wann genau diese PMA nicht täglich verwendet wird. Es hat jedoch diese Woche gebrochen, und /var/log/yum.logich kann sehen, dass Nginx diese Woche aktualisiert wurde: Apr 18 04:35:53 Aktualisiert: nginx.x86_64 1:1.14.0-1.el7_4.ngx
  • Ich kann keine Erwähnung des Benutzers apachein meinem finden /etc/php.ini.
  • Die Ordnerberechtigungen lauten wie folgt: drwxrwx---. 2 root apache 94 28. Mär 07:49 session

Frage

Warum ändern (automatische) Nginx-Updates den Besitzer des PHP-Sitzungsordners und beschädigen dadurch meine Anwendungen?

1
woher hast du nginx? EPEL zeigt für mich "1: 1.12.2-2.el7". Andernfalls `rpm -ql ...` in Paketen und prüfen Sie, ob dieses Verzeichnis vorhanden ist, oder suchen Sie nach Paketskripts, die möglicherweise mit Berechtigungen übereinstimmen. Es könnte etwas anderes sein, daher benötigen Sie möglicherweise SystemTap- oder sysdig-Überwachung bei Systemaufrufen, die dieses Verzeichnis betreffen. thrig vor 6 Jahren 1
Diese Maschine steht nicht unter Marionette, aber die Geschichte besagt, dass ich sie direkt von meinen Repos über `yum install nginx 'erhalten habe. Der Sitzungsordner wird nicht in `rpm -ql nginx` erwähnt. Wo würde ich nach diesen Paketskripten suchen? Ist das, was SystemTap ist? Patrick R. vor 6 Jahren 0
`rpm -q - Skripte `. SystemTap oder sysdig sind völlig verschieden und würden (mit entsprechendem Code) die Protokollierung ermöglichen, wenn etwas `/ var / lib / php / session 'berührt thrig vor 6 Jahren 0
@thrig, du hast mich nur in die richtige Richtung gelenkt - das php-fpm-Paket setzt den Besitz zurück. Ich habe neue Ordner erstellt, die Konfiguration von PHP geändert, um sie zu verwenden, und SELinux wiederhergestellt. Möchten Sie eine Antwort schreiben, damit ich sie annehmen kann, oder soll ich es selbst tun? Patrick R. vor 5 Jahren 0

1 Antwort auf die Frage

1
thrig

Es gibt mehrere Möglichkeiten, dieses Problem anzugehen

Paketsuche

Wenn der Verdacht besteht, dass ein Paket Änderungen verursacht hat, überprüfen Sie die Pakete, um festzustellen, ob die betreffende Datei Eigentümer ist. RPM enthält einen %filesAbschnitt, in dem detailliert beschrieben wird, für welche Dateien ein Paket autorisiert ist. Dies kann mit mit abgefragt werden rpm -ql. Zum Beispiel könnte eine rohe Gewalt, um herauszufinden, welches Paket (falls vorhanden) gehört, /etc/passwdaussehen:

$ rpm -qa | while read p; do rpm -ql $p | grep -q /etc/passwd && echo $p; done setup-2.8.71-9.el7.noarch 

Diese Methode findet jedoch keine Dateien, die indirekt von einem Paket geändert werden. RPM enthalten Skripts, die beliebige Aktionen ausführen können (oder beliebige andere Codebits aufrufen, die die Änderung durchführen, nach der gesucht wird). Diese Skripte können mit aufgelistet rpm -q --scriptsund dann mit dem Code überprüft werden. Es kann hilfreich sein, die Suche auf nur die kürzlich installierten Pakete zu beschränken (prüfen Sie die Protokolle, um welche es sich handelt), da möglicherweise viel Code durchgesehen wird.

Kernel-Debugging

Der Linux-Kernel bietet verschiedene Kernel-basierte Debugging-Funktionen, die Sie anweisen können, um Sie mitzuteilen, wenn eine Datei von einer Datei berührt wird. Mit dieser Methode würde geeigneter Code für SystemTapoder sysdigoder was auch immer eingerichtet werden, und dann würden Sie darauf warten, um Ihnen mitzuteilen, welcher Prozess die Datei geändert hat. Zum Beispiel, sysdigwenn etwas ein Verzeichnis ändert, an dem Sie interessiert sind:

# sysdig "fd.directory contains /var/lib/php" 

sollte Details (die mit dem -pFlag konfiguriert werden können ) für Systemaufrufe anzeigen, die dieses Verzeichnis betreffen. Dieser Befehl muss irgendwo ausgeführt werden, möglicherweise in einer tmuxSitzung oder als benutzerdefinierter Dienst, damit er automatisch gestartet wird, bis der anstößige Code gefunden wird. (Außerdem müssen Sie möglicherweise die Debug-Ausgabe einschränken, da das Kernel-Debugging möglicherweise zu umfangreichen Informationen führt, wenn die Suche zu umfangreich ist und der Befehl längere Zeit ausgeführt wird.)

Danke noch einmal. In meinem speziellen Fall war es das php-fpm-Paket, das einfach erwartet, dass php mit dem Benutzer apache ausgeführt wird, und setzt den Ordnerbesitzer bei der Aktualisierung zurück. Dies wurde behoben, indem neue Sitzungsordner erstellt und in der Konfigurationsdatei angegeben wurden. Patrick R. vor 5 Jahren 0