Apache als anderer Benutzer ausführen

9

Wenn ich den ps -efHBefehl ausführe, um den gesamten Prozess aufzulisten, sehe ich, dass Apache als ausgeführt wird rootund dass anscheinend Unterprozesse als ausgeführt werden www-data. Hier ist der Auszug:

root     30117     1  0 09:10 ?        00:00:00   /usr/sbin/apache2 -k start
www-data 30119 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30120 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start
www-data 30121 30117  0 09:10 ?        00:00:00     /usr/sbin/apache2 -k start

Kann ich dafür sorgen, dass Apache und alle Unterprozesse als unterschiedliche Benutzer ausgeführt werden apache2d:apache2d? Wenn das so ist, wie? Ich habe irgendwo gelesen, dass die Einstellungen dafür in zu finden sind, /etc/apache2/httpd.confaber diese Datei scheint leer zu sein? Kann dies erreicht werden, indem der Eigentümer und die Gruppe des /etc/init.d/apache2Skripts geändert werden und dann das Flag setuid darauf gesetzt wird?

Mridang Agarwalla
quelle

Antworten:

20

Apache muss zunächst als root ausgeführt werden, um eine Bindung an Port 80 herzustellen. Wenn Sie es zunächst nicht als root ausführen, können Sie keine Bindung an Port 80 herstellen. Wenn Sie eine Bindung an einen Port über 1024 herstellen möchten, können Sie dies. Ansonsten mach dir keine Sorgen um root. Das ist der übergeordnete Apache-Prozess und verarbeitet keine Anforderungen. Es werden untergeordnete Prozesse erzeugt und Berechtigungen zum Verarbeiten von Anforderungen gelöscht.

Um den Apache-Benutzer zu ändern, stellen Sie die Userund Group-Parameter in Ihrer Apache-Konfiguration ein.

Bahamat
quelle
Tut mir leid, aber ich stelle fest, dass haproxy als haproxy (nicht als root) ausgeführt werden kann und den TCP 80-Port bindet. Wie erreicht man das? Irgendeine Erleuchtung?
Mittwoch,
1
Das tut es nicht. Prozesse können nur mit Superuser-Rechten an Ports unter 1024 gebunden werden. Also startet haproxy entweder als root und löscht Privilegien (wahrscheinlich) oder als setuid root (unwahrscheinlich).
Bahamat
Sie müssen es nicht als root ausführen, sondern Ihrem Apache-Benutzer nur den Zugriff auf eingeschränkte Ports (dh Ports unter 1024) gewähren. Diese Antwort wird erklärt , wie Sie ‚authbind‘ können das tun: superuser.com/questions/710253/...
Animal451
4

@bahamat erklärt es ziemlich gut, aber ich werde ein wenig mehr Details hinzufügen.

Im normalen Betrieb führt der Apache-Prozess, der sich im Besitz von Root befindet, keine anderen tatsächlichen Vorgänge aus, als Port 80 abzuhören und eingehende Verbindungen an seine (sicher nicht privilegierten, als www-dataBenutzer) Kinder weiterzuleiten .

Der Speicherort der Masterkonfigurationsdatei hängt von den Kompilierungsoptionen ab und variiert je nach Distribution /etc/apache2/apache2.conf.

Wenn Sie ein Mehrbenutzer-Webhosting-System einrichten, sollten Sie sich auch mit SuExec und fcgid befassen, damit der Apache-Prozess jedes einzelnen Webhosting-Benutzers als dieser Benutzer ausgeführt wird Benutzer sind nicht betroffen.

Shadur
quelle
3

Zumindest in Ubuntu sind die Einstellungen dafür in /etc/apache2/envvars. Optimieren Sie diese, starten Sie Apache neu und Sie können loslegen.

mlissner
quelle
Danke, das hat mir geholfen! Ich richte eine Ubuntu-Vagrant-Box ein und aus irgendeinem Grund wurde /etc/apache2/httpd.conf nicht zum Laden des Benutzers und der Gruppe verwendet. Envars scheint den Trick zu tun!
Greg
2

Schauen Sie sich auch Apache2 ITK MPM an .

Es gabelt einen Apache-Thread mit dem zugewiesenen uid/ gid, das können Sie weiterhin verwenden mod_php. Nicht mehr chmod/ chownetc.

Olli
quelle
Das Upvoting mpm_itkist eine signifikante Verbesserung gegenüber suexec / fcgid
Shadur
0

Mac OS X:

Was bei mir funktioniert hat, ist die Apache-Konfigurationsdatei:

/etc/apache2/httpd.conf

In dieser Datei habe ich nach Benutzer oder Gruppe gesucht

und stieß auf:

User _www
Group _www

Ich habe es in den Benutzer / die Gruppe geändert, den / die ich benötigt habe (in meinem Fall in den Benutzer / die Gruppe, der / die der Eigentümer meiner Web-App-Dateien ist, die Sie sehen können. Und das können Sie mit dem einfachen 'ls -l' überprüfen. Befehl)

Quecksilber
quelle