Wie kann man HTTPD als bestimmte Benutzer und nicht von niemandem ausführen?

7

Derzeit topzeigt mir, dass fast alle httpdProzesse von ausgeführt werden nobody. "Fast", weil 2 von ihnen von geführt werden root.

Wie kann ich es in einer Weise , dass ich Benutzer zu sagen haben gegeben: dartagnan, porthos, aramis, athoslaufen httpd jeweils getrennt wie die Benutzer?

Ich hoffe, so etwas zu sehen, wenn ich renne top:

PID USER Befehl
1234 dartagnan / usr / local / apache / bin / httpd -k start -DSSL
12 porthos / usr / local / apache / bin / httpd -k start -DSSL
342 aramis / usr / local / apache / bin / httpd -k start -DSSL
214 athos / usr / local / apache / bin / httpd -k start -DSSL 

============> Dies ist, was ich derzeit habe und was ich NICHT gerne sehe:

PID USER Befehl
1234 niemand / usr / local / apache / bin / httpd -k start -DSSL
12 niemand / usr / local / apache / bin / httpd -k start -DSSL
342 Nobody / usr / local / apache / bin / httpd -k start -DSSL
214 Nobody / usr / local / apache / bin / httpd -k start -DSSL 
244 root / usr / local / apache / bin / httpd -k start -DSSL 
334 root / usr / local / apache / bin / httpd -k start -DSSL 
Jiego Cordoviz
quelle

Antworten:

7

Die Möglichkeit, httpd als eine andere Benutzergruppe auszuführen, besteht darin, die Benutzer- oder Gruppenanweisung in der Datei httpd.conf zu ändern .

User apache
Group apache

Dies würde jedoch nur die nobodyin Ihrer Ausgabe ändern, auf apachedie ich denke, nicht das ist, was Sie wollen.

Damit httpd als bestimmter Benutzer ausgeführt werden kann, müssen Sie für jeden Benutzer eine Konfigurationsdatei erstellen und verwalten. In der Konfigurationsdatei sollten der Benutzer und die Gruppe sowie der Port angegeben werden, an den der httpd-Prozess über eine Listen- Direktive gebunden werden soll . Denken Sie daran, dass nur privilegierte Benutzer an Ports <1024 binden können. Sie können es dann so starten

apachectl -f /path/to/aramis.conf -k start -DSSL

Beachten Sie, dass andere httpd-Anweisungen, z. B. VirtualHost, wahrscheinlich auch pro Benutzer geändert werden müssen.

Zusätzlich sind EL-Varianten (RHEL, CentOS Scientific Linux usw.) SELinux beteiligt. Sie müssen den Port, an den jede Instanz gebunden wird, zur http_port_tGruppe hinzufügen, z

semanage port -a -t http_port_t -p tcp 8888

Dies würde es einer httpd-Instanz ermöglichen, an Port 8888 zu binden.

Wenn die Benutzer ihre Home-Verzeichnisse zum Bereitstellen von Dateien verwenden, müssen Sie dies mit dem Booleschen Wert httpd_enable_homedires SELinux zulassen

 setsebool -P httpd_enable_homedirs on

Das oben Gesagte sollte es Ihnen ermöglichen, Instanzen von httpd pro Benutzer zu konfigurieren. Jeder Benutzer muss sich jedoch merken, welchen Port er zum Hinzufügen zu seinen URLs verwenden soll, z. B. für Aramis oben

http://example.com:8888

Das ist alles sehr chaotisch. Um Ihren Benutzern zu helfen, sollten Sie Ihr Haupt-httpd so konfigurieren, dass es wie gewohnt Port 80 überwacht und als Reverse-Proxy für die Instanzen pro Benutzer fungiert. Wenn sich dann Aramis mit z

http://aramis.example.com 

Die Instanz des Hauptservers ist die Aramis-Instanz.

Sie müssen das DNS und möglicherweise auch andere Dinge entsprechend konfigurieren.

user9517
quelle
Vielen Dank! Ich werde versuchen, diese Vorschläge zu testen und morgen ein Feedback geben.
Jiego Cordoviz
1
@JiegoCordoviz Dies ist nur ein Framework, das einige Ideen dazu enthält. Es wird wahrscheinlich viele Details zu beachten geben. Es gibt wahrscheinlich viele Dokumentationen, die Sie lesen und recherchieren müssen.
user9517
Hallo, Laufen apachectltut mir nicht gut. Ich kann es nur einmal ausführen, da es sagen würde, dass httpd bereits ausgeführt wird. Außerdem musste ich es so ausführen, sh -x apachectl -f /home/aramis/public_html/httpd-aramis.conf -k stop -DSSLweil ich es nicht so ausführen kann, wie Sie es beschrieben haben. Außerdem verwende ich RHEL 6 und weiß nicht, wofür es gedacht ist, aber SELinux ist deaktiviert, was mir auch nicht geholfen hat. Irgendwelche anderen Möglichkeiten, dies zu tun? Vielen Dank!
Jiego Cordoviz
Meine nächste Hilfe besteht darin, zu lernen, wie man Dokumentation, Protokolldateien und Fehlermeldungen liest, damit Sie es selbst herausfinden können. Bitte lesen Sie auch den zweiten Kommentar oben noch einmal.
user9517