Ist es in nginx möglich, unterschiedliche Benutzer pro virtuellem Host zu konfigurieren?
So etwas wie
server {
user myprojectuser myprojectgroup;
...
}
Nein, da alle Server-Zeilengruppen in einer Nginx-Konfiguration von derselben Gruppe von Arbeitsprozessen bedient werden. Unter Sicherheitsaspekten ist es außerdem besser , wenn Sie es so ausführen, da es bedeutet, dass der Inhalt vom Webserver automatisch nicht beschreibbar ist (ohne Dummheiten wie a chmod -R 0777
), sodass bei einer Sicherheitslücke in nginx keiner der Inhalte vorhanden ist ist gefährdet.
www-data
und Berechtigungen zu,0710
wenn Sie den vhost einrichten (da dies root zur Konfiguration von nginx benötigt, ist es kein Problem, wenn Ihre Automatisierung auch die erforderlichen Berechtigungen einstellt). Dann muss der Inhalt des Dokuments nuro+x
für Verzeichnisse undo+r
für Dateien sein.www-data
, kann jeder Benutzer, der ein PHP-Skript oder einen CGI-Bin-Prozess ausführen kann, auf jede Datei zugreifen, auf die derwww-data
Benutzer zugreifen kann . Dies scheint für jeden, der Datenbankkennwörterconfig.php.inc
auf einem gemeinsam genutzten Computer speichert, nicht offensichtlich zu sein .peter
undjohn
. Sie hosten ihre Webseiten in~/public_html
. Ohne einen anderen Ansatz, den keiner der oben genannten Personen erwähnt, verfügt ein .php-Skript über die gleichen Berechtigungen wie der Webserver, unter dem es auch ausgeführt wirdwww-data
. Dies bedeutet, dass es genau wie der Webserver und der PHP-Interpreter jedes andere .php-Skript lesen kann.Ja. Dies ist möglich und wird aus Sicherheitsgründen empfohlen (siehe unten).
In Anbetracht der Tatsache, dass Sie PHP-FPM verwenden (wahrscheinlich, wie es am häufigsten vorkommt), können Sie für jede Domain einen Spool erstellen, der einem anderen Benutzer gehört.
1. Spools erstellen:
Fügen Sie die Spools zu jeder neuen Spool hinzu
/etc/php/7.0/fpm/pool.d/www.conf
oder erstellen Sie eine neue.conf
Datei.Spule 1 (myuser1):
Spule 2 (myuser2):
PS: Behalten Sie Ihre listen.owner / listen.group für denselben nginx-Benutzer (normalerweise www-data ).
2. Ordnen Sie jede Spool ihrem Serverblock zu (virtueller Host für Apache-Benutzer):
Host 1:
Host 2:
Starten Sie die FPM- und NGINX-Dienste neu
Testen:
Erstellen Sie eine pinfo.php- Datei (oder einen beliebigen Namen), die den aktuellen Prozessbenutzer anzeigt :
Oder erstellen Sie die Datei pinfo.php über bash:
Dann öffne " http: //.../pinfo.php " in deinem Browser.
Gründe für die Verwendung mehrerer Benutzer (Sicherheitsgründe):
Wenn Sie alle Ihre Websites unter demselben Benutzer ( www-data ) betreiben , hat ein PHP-Aufruf von system () / passthru () / exec () Zugriff auf alle Websites! NGINX schützt Sie nicht davor. Das PHP ist nur ein Beispiel, aber alle gängigen Webserver-Sprachen haben ähnliche Aufrufe. Als Hacker können Sie mit " ls .. " durch alle Websites navigieren und mit " cp / echo / mv " Ihren eigenen Code in eine beliebige Datei (einschließlich anderer Website-Dateien) schreiben. Selbst wenn sich alle Websites auf dem Server im Eigentum derselben Person befinden (z. B. Sie), ist es ratsam, jede Website mit einem anderen Benutzer zu betreiben, da so verhindert wird, dass eventuelle Hacker / Viren (z. B. Wordpress-Viren) auf Ihre anderen Websites zugreifen.
quelle
Als Antwort auf den obigen Kommentar von Ivan, der auf das OP anwendbar zu sein scheint. Zwei Dinge:
Das Anwendungsdokument root wäre so etwas wie
/blah/peterWeb/html
und/blah/johnWeb/html
. Sowohl NGINX als auch Apache2 erlauben es keinem, das andere Verzeichnis zu durchsuchen oder in diesem zu arbeiten, selbst wenn beide www-data als Gruppe ausführen.Wenn Sie jedem Verzeichnisbaum eine eigene Benutzerberechtigung zuweisen, kann sich jeder Benutzer bei einem UNIX-System anmelden und die Verzeichnisse für jeden Benutzer privat halten. Fügen Sie einfach nicht jeden Benutzer in die Gruppe www-data ein. Wenn Sie einverstanden sind, dann Ihr Satz:
könnte genauer geschrieben werden als:
BEARBEITEN 1: Nachdem ich einige Probleme mit dem Server-Administrator angesprochen hatte, habe ich mich weiter mit diesem Thema befasst. Mir war nicht bewusst, wie genau die Informationen von Ivan waren! Wenn Sie Benutzern das Hochladen und Ausführen von Skripten in einer gemeinsam genutzten Hosting-Konfiguration ermöglichen möchten, beachten Sie dies. Hier ist ein Ansatz . Ich habe Ivan einen Tipp gegeben, um sicherzugehen, dass ich diese Sicherheitsanfälligkeit verstanden habe.
quelle
www-data
. Wenn Johnny ein Skript erstellen und ausführen kannwww-data
(was bei naiven Setups der Fall ist), kann Johnnys Skript Peters Skripte lesen und an Johnny zurücksenden. Dies hat nichts mit Gruppen zu tun. Die richtige Lösung besteht darin, suPHP (wenn es naiv eingerichtet ist, schlecht, da schlecht geschriebener Code alle Dateien dieses Benutzers gefährdet) oder ein Gefängnis oder einen dedizierten zusätzlichen Webbenutzer pro Benutzer zu haben.