Redis-Socket-Berechtigungen zwischen / var / run und http abgefangen

486
Johannes Ernst

Ich möchte, dass meine PHP-Webanwendung (als Benutzer ausgeführt apache) über einen UNIX-Socket eine Verbindung zu Redis herstellt. Also dachte ich daran, redis auch als Benutzer auszuführen apacheund die Socket-Berechtigungen können 0700 gehören apache. Ich möchte aber auch den Socket /var/run, der sich im Besitz von rootund nicht beschreibbar befindet apache.

Wenn ich also redis als betreibe root, kann meine PHP-App keine Verbindung herstellen, es sei denn, ich erzeuge die Socket-Berechtigungen. Dies würde ich lieber nicht tun, wenn ich es vermeiden kann.

Wie kann ich diesen Kreis quadrieren? (Redis wird von systemd verwaltet)

1

1 Antwort auf die Frage

1
grawity

Normalerweise leben IPC-Sockets nicht /run/direkt, sondern in einem Unterverzeichnis, das sich im Besitz des Daemons befindet - beispielsweise unter /run/redis/.

drwxr-xr-x 37 root root 920 Jun 1 08:14 /run/ drwxr-xr-x 2 redis redis 40 Jun 1 08:14 /run/redis/ srw-rw-rw- 1 redis redis 0 Jun 1 08:14 /run/redis/socket= 

Das Verzeichnis kann automatisch mit den richtigen Berechtigungen beim Start (durch eine Konfiguration von tmpfiles.d in allen Systemd-Versionen) oder beim Starten des Diensts (durch den Parameter RuntimeDirectory = in Ihrem Dienst in systemd ≥v211) vorab erstellt werden. Sehr wahrscheinlich, dass Ihre Distribution dies bereits getan hat.

Beachten Sie, dass es sicherer ist, die Daemons unter separaten UIDs auszuführen, aber machen Sie die Socket- Gruppe für eine der Gruppen zugänglich, deren apacheMitglied ist. Dies erlaubt IPC-Verbindungen wie beabsichtigt, verhindert jedoch, dass sich Apache mit dem Redis-Daemon selbst herumwirbelt.