Ich möchte anderen keinen Lesezugriff gewähren, also habe ich meinen Benutzer und den apache
Benutzer zu einer Gruppe namens hinzugefügt apachme
und diese Gruppe dann auf alle Dateien und Ordner eingestellt, apache
auf die ich Zugriff haben möchte, einschließlich des Stammverzeichnisses der Webseite. Anschließend habe ich der Gruppe und dem Eigentümer alle Berechtigungen erteilt. Danach kann Apache immer noch nicht auf die Dateien zugreifen, ohne die Leseberechtigung auf „alle zulassen“ ( rwxrwxr--(0774)
) einzustellen.
Der Ordner, der die Indexdatei enthält, ihr Eigentümer apache
mit der Gruppe apachme
und den Berechtigungenrwxrwxr-x(0775)
damit bekomme ich einen 500-Fehler, wenn ich ihn ändere, 0774
läuft es einwandfrei
Diese dienten lediglich zur Bestätigung, unter welchem Benutzer Apache ausgeführt wurde und dass er zur Gruppe hinzugefügt wurde.
Antwort1
Aus Sicherheitsgründen ist es keine gute Idee, Webseiten mit demselben Apache-Benutzer einzurichten. Der Apache-Benutzer sollte die Webseiten lesen, aber nicht darauf schreiben können.
Daher ist es in der Standardkonfiguration normal, dass die Webstrukturen für alle lesbar sind und wenn Schreibzugriff erforderlich ist, normalerweise vom Apache-Benutzer beschreibbar sind, was ein Albtraum für die Sicherheit ist.
Eine der Strategien, dies zu vermeiden, ist die Installation/Verwendung von mod_ruid2.https://github.com/mind04/mod-ruid2
Für Debian genügt es, Folgendes zu tun:
apt-get install libapache2-mod-ruid2
Bitte beachten Sie, dass der Apache-Standardbenutzer je nach Distribution unterschiedlich ist. In Debian ist es www-data, in RH/CentOS ist es apache und in SuSE wwwrun. Ich werde es von nun an als Apache-Standardbenutzer bezeichnen.
Wenn Sie in einem virtuellen Host keine Anweisungen definieren, verhält er sich wie gewohnt. Andernfalls wird das Verhalten geändert.
Die Idee dahinter ist, dass ein Prozess im virtuellen Host mit dem Benutzer ausgeführt wird, der über Rechte für den virtuellen Host verfügt. Somit sind die Dateien Eigentümer dieser Dateien und können, wie Sie möchten, von anderen Benutzern nicht gelesen werden. Normalerweise definieren Sie einen Benutzer pro virtuellem Host.
In den Virtualhost- oder Directory-Direktiven in einem virtuellen Host definieren Sie den Benutzer und die Gruppe, die für dieses Verzeichnis aktiv sein werden. Die Benutzer:Benutzergruppe sind die effektiven Berechtigungen, die Apache beim Zugriff auf den virtuellen Host/das virtuelle Verzeichnis verwendet, und daher kann jeder Benutzer, der zu dieser Gruppe gehört, in die Verzeichnisse schreiben/sie anzeigen.
<Directory "/vhostdir/">
RMode config
RUidGid user usergroup
....
So können beim Schreiben der Verzeichnisse nun die Dateien als 660 mit dem Eigentumsrecht user:usergroup erstellt werden, wenn sie von einer Gruppe von Benutzern verwaltet werden. Ebenso können die Dateien auch von einem anderen Benutzer mit Leseberechtigung für die Welt erstellt werden; beim Schreiben ist dies jedoch nicht der Apache-Standardbenutzer, sondern dieser andere Benutzer.
Die Vorteile von mod_ruid2 sind dann:
- in einer virtuellen Hosting-Umgebung können Benutzer die Dateien anderer Benutzer nicht lesen;
- Als Einzelbenutzer können Sie weiterhin Dateien als anderer Benutzer erstellen, und weder der Apache-Standardbenutzer noch der Benutzer ruid2 können diese überschreiben.
- noch wichtiger ist, dass die geschriebenen Dateien jetzt mit dem Benutzer ruid2 und nicht mehr global mit dem Apache-Standardbenutzer erstellt werden.
Von der GitHub-Seite:
ÜBER mod_ruid2 ist ein Suexec-Modul für Apache 2.0, 2.2 und 2.4, basierend auf mod_ruid und mod_suid2
– es läuft nur unter Linux, da nur der Linux-Kernel die erforderlichen Prozessfunktionen implementiert hat. – es hat eine bessere Leistung als mod_suid2, da es HTTPD-Kinder nicht nach einer Anfrage beenden muss. es nutzt Kernelfunktionen und führt nach Erhalt einer neuen Anfrage erneut SUIDs aus. – es gibt einige Sicherheitsprobleme, zum Beispiel kann ein Angreifer, wenn er den HTTPD-Prozess erfolgreich ausnutzt, wirksame Funktionen festlegen und die UID auf Root setzen. ich empfehle, einen Sicherheitspatch im Kernel (grsec) oder so etwas zu verwenden.
-es gibt zwei Hauptbetriebsarten: stat und config 1. config ist Standard, Sie müssen uid und gid definieren. Wenn keine [ug]id definiert ist, werden der Standardbenutzer und die Standardgruppe verwendet.
- stat httpd setuid und setgid auf uid und gid des angeforderten Dateinamens (Skripts)/Verzeichnisses. Dies ist gut, wenn Sie mod_vhost_alias für virtuelles Hosting verwenden.
INSTALLIEREN 1. Laden Sie die neueste Version von libcap hier herunter und installieren Sie sie. 2. Führen Sie /apachedir/bin/apxs -a -i -l cap -c mod_ruid2.c aus. 3. Konfigurieren Sie httpd.conf. 4. Starten Sie Apache neu.
KONFIGURATIONSOPTIONEN: RMode config|stat (Standard ist config) RUidGid user|#uid group|#gid - wenn RMode config ist, auf diese uid und gid setzen
RMinUidGid-Benutzer|#UID-Gruppe|#Gid – wenn UID/GID kleiner als die Mindest-UID/GID ist, wird sie auf die Standard-UID/GID gesetzt. RDefaultUidGid-Benutzer|#UID-Gruppe|#Gid
RGroups group1 group2 – zusätzliche Gruppen, die über setgroups festgelegt wurden @none – alle zuvor definierten Gruppen löschen.
RDocumentChrRoot - Chroot-Verzeichnis und das darin enthaltene Dokumentenstammverzeichnis festlegen
BEISPIEL:
<VirtualHost example.com> ServerAdmin [email protected] RDocumentChRoot /home /example.com/public_html ServerName example.com ServerAlias www.example.com RMode config # unnecessary since config is the default RUidGid user1 group1 RGroups apachetmp <Directory /home/example.com/public_html/dir> RMode stat </Directory> <Directory /home/example.com/public_html/dir/test> RMode config RUidGid user2 group2 RGroups groups1 </Directory> <Directory /home/example.com/public_html/dir/test/123> RUidGid user3 group3 </Directory> <Location /yustadir> RMode config RUidGid user4 user4 RGroups groups4 </Location>