Ich bin mit der vorhandenen Antwort (und hundert Antworten im Internet) nicht einverstanden.
Es ist möglich, Apache2 als etwas anderes als root auszuführen.
Das ist jedoch nicht standardmäßig so und es ist das Standardverhalten, das mit Ubuntu geliefert wird, das die Dinge für Sie wirklich schwierig macht. Alle Skripte und Konfigurationen werden voraussichtlich das Root-Then-Drop-Privilegs-Modell verwenden.
Ich werde nur die Dinge ansprechen, die allgemein als "definitiv Wurzel brauchen" (oben und anderswo) zitiert werden:
Port 80 . Vergessen Sie für eine Minute, dass Sie möglicherweise auf einem nicht privilegierten Port ausgeführt werden möchten (einige Leute haben Apache wie folgt hinter Nginx ausgeführt) ... Sie können weiterhin niedrige Ports als Nicht-Root mit dem Linux-Funktionsframework binden (seit 2.6.24
) ;; Geben Sie Apache die Rechte zum Binden an beliebige Ports, unabhängig vom Benutzer:
sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/apache2
Oder Sie können iptables verwenden, um Port 80 auf einen nicht privilegierten Port umzuleiten.
Konfigurationsdateien und Zertifikate lesen . Standardmäßig kann die Konfiguration von jedem Benutzer gelesen werden. Wenn Sie www-data
(oder einen anderen Benutzer, der Apache ausführt) daran hindern, Konfigurationen oder Zertifikate zu lesen - was Sie können -, wird der Server beschädigt.
Einige Leute sprechen über den anfänglichen Root-Prozess, als ob er verwendet werden könnte, um nach dem Start Berechtigungen zu erhalten . Das ist nicht der Fall. Das wäre schrecklich unsicher. Es führt nur nichtprivilegierte untergeordnete Prozesse durch.
Die Wahrheit ist, dass Sie Dinge zerbrechen können, damit dies funktioniert. Tu das nicht. Zumindest nicht, bis Sie den ganzen Beitrag gelesen haben.
sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/apache2
sudo /etc/init.d/apache2 stop
sudo chown -R www-data: /var/{log,run}/apache2/
sudo -u www-data apache2ctl start
Und da bist du ja. Laufen Apache wie ein Badass als www-data
.
Aber ich würde das nicht in der Produktion machen. Mein Code oben hat kein Init-Skript dafür, daher müssten Sie ihn ersetzen oder "reparieren" /etc/init.d/apache2
, um die Ausführung einer Root-Version zu stoppen und Ihre WWW-Datenversion zu starten. Das ist kein kleines Unterfangen; Schau dir das Skript an.
Vor allem das von Apache verwendete Modell der Deeskalation von Privilegien ist kampferprobt. Jahrelang. Andere Server machen das auch so. Es ist nicht böse .
Wenn Ihre Administratoren sich über das, was Sie ausführen, aufregen, haben Sie mehrere Möglichkeiten:
Tun Sie es in einer VM (wie ich es getan habe, um diese Antwort zu testen). lxc
, docker
Etc, etc, etc. Minimal - Setup, schönes Licht und sauber und können als „normalen“ Benutzer auf der Außenseite laufen , während wie blankes Metall auf der Innenseite suchen.
Verwenden Sie ein httpd, das kein root benötigt. Apache hat ein ganzes Ökosystem, das bestimmte Dinge erwartet, daher ist es keine gute Wahl. Aber was auch immer Sie auswählen, Sie müssen wahrscheinlich ihre Init-Skripte bekämpfen.
Wenn Sie nur super-grundlegende Dinge an einem nicht-privaten Port benötigen, können Sie Folgendes ausführen:
python -m SimpleHTTPServer 8000
apt
/dpkg
dasapache2
Paket aktualisiert wird, einige Dinge, die Sie getan haben, rückgängig gemacht werden, wodurch wahrscheinlich Ihr Setup beschädigt wird. Sie können Apache von der Quelle anstatt von den Repos installieren, müssen es dann jedoch jedes Mal manuell aktualisieren, wenn ein Update verfügbar ist, bei dem es sich um eine PITA handelt.python -m SimpleHTTPServer 8000
. Es hat mir geholfen, auf einem Server zu laufen, auf den ich keinen Root-Zugriff habe, um Apache zu installieren.Die kurze Antwort :
Sie können den ersten Master-Apache-Prozess nicht auf vernünftige Weise als Nicht-Root für den Master-Prozess starten lassen. Dies liegt daran, dass der Master-Prozess als Superuser ausgeführt werden muss, um eine Verbindung zu Port 80 (HTTP) und 443 (HTTPS) herzustellen und auf Konfigurationsdateien zuzugreifen (
/etc/apache2/
standardmäßig), damit die Mitarbeiter wissen, was sie tun sollen.Details dazu finden Sie weiter unten. Viele Webserver in den Repositorys verfügen über ähnliche Setup-Typen (NGINX arbeitet ebenfalls nach denselben Grundprinzipien).
Die Details
Der Apache-Master-Prozess - Hiermit wird auf Konfigurationsdateien zugegriffen und Mitarbeiter an Ports <= 1024 gebunden:
Der Master-Prozess von Apache muss als ausgeführt werden
root
.Dies liegt daran, dass alle Konfigurationsdateien in der
/etc/apache2/...
Regel im Besitz von root sind und für den Zugriff auf (einige) private SSL-Zertifikatdaten (/etc/ssl/private/...
normalerweise) Superuser-Strom benötigt werden.Administratorzugriff ist auch erforderlich, um an Ports unter 1024 zu binden, einschließlich Port 80 (HTTP) und 443 (HTTPS), damit ein Webserver, der mit typischen HTTP / HTTPS-Ports arbeitet, an diesen Ports ordnungsgemäß funktioniert.
Der Master-Prozess macht nicht viel mehr als das und verarbeitet weder tatsächliche Anforderungen von Clients noch interagiert er tatsächlich mit Webdokumenten usw.
Die Apache Worker-Prozesse - Sie verarbeiten Anfragen von und Antworten auf Webbrowser:
Die Mitarbeiter von Apache bearbeiten tatsächlich Anfragen, die an den Webserver gesendet werden, und kümmern sich um den Zugriff auf Daten im System und das Senden der Antwort an Clients. Ich glaube, hier geht es in Ihrer IT-Richtlinie wirklich darum, als Nicht-Root ausgeführt zu werden.
Dies wird als
www-data
kein Konto auf Administratorebene ausgeführt und verfügt nicht über erhöhte Berechtigungen. Hier können Standardzugriffskontrollen auf dem System verwendet werden, und genau das gilt für die Einschränkung "Kann nicht als Root ausgeführt werden" - insofern, als Sie nicht möchten, dass die Worker-Prozesse als Root / Superuser ausgeführt werden.Warum ich denke, dass es eine Fehlkommunikation zwischen Richtlinien und Ihnen gibt, oder warum ich denke, dass Ihre IT-Richtlinien überarbeitet werden müssen und Sie mit den IT-Mitarbeitern in Ihrer Umgebung sprechen sollten:
Wenn in Ihrem Unternehmen / Arbeitsplatz angegeben ist, dass Apache überhaupt nicht als Root ausgeführt werden darf, wenden Sie sich an die IT-Mitarbeiter des Unternehmens.
Der Grund dafür, dass dies eine "schlechte" oder "falsch interpretierte" Richtlinie ist, liegt darin, dass Sie
http://somewebaddress.tld
oderhttps://somewebaddress.tld
in Ihrer Domain nicht verwenden können, wenn Apache nicht an Port 80 bzw. 443 binden kann. Wenn der Master-Prozess nicht als Root ausgeführt werden soll, müssen Sie den Besitz eines/etc/apache2/*
Konfigurationsverzeichnisses manuell ändern oder ein separates Datenverzeichnis für Konfigurationen bereitstellen. Anschließend müssen alle von Apache bereitgestellten Sites Ports abhören, die höher als 1024 sind.quelle
iptables
). Um den Verkehr auf Port 80 zum Apache-Port zu bringen? Vielleicht ist das besser auf eine völlig separate Antwort beschränkt.Die Verwendung
sudo
mit nur für die Apache-Steuerungsskripten konfiguriertem Zugriff wird im Allgemeinen als bewährte Methode angesehen. Beseitigt den vorübergehenden "Root" -Zustand zu Beginn nicht vollständig, aber jeder Sicherheitsprüfer, der dies nicht versteht, ist das Geld, das er erhält, nicht wert.Es ist auch ziemlich einfach, eine benutzerdefinierte Version von Apache im Benutzerbereich zu installieren, um den gesamten Dateieigentum für einen weniger privilegierten Benutzer einzurichten, der nur über sudo über dieses kontrollierte erhöhte Privileg verfügt.
quelle