Ich möchte anderen keinen Lesezugriff gewähren, also habe ich meinen Benutzer und den apache
hinzugefügt Benutzer zu einer Gruppe namens apachme
und setze dann diese Gruppe auf alle Dateien und Ordner, die ich haben möchte apache
Zugriff haben, einschließlich des Stammverzeichnisses der Webseite. Ich habe dann Gruppe und Besitzer alle Berechtigungen gegeben. Danach kann Apache immer noch nicht auf die Dateien zugreifen, ohne die Leseberechtigung auf all (rwxrwxr--(0774)
zu setzen ).
Der Ordner, der die Indexdatei enthält, gehört apache
mit der Gruppe apachme
und die Berechtigungen rwxrwxr-x(0775)
Damit erhalte ich einen 500-Fehler und ändere ihn in 0774
wird es gut laufen lassen
Diese dienten nur dazu, zu bestätigen, unter welchem Benutzer Apache lief und dass er zur Gruppe hinzugefügt wurde.
Akzeptierte Antwort:
Aus Sicherheitsgründen ist es nicht wirklich eine gute Idee, Webseiten mit demselben Benutzer von Apache 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 geschrieben werden muss, normalerweise für den Apache-Benutzer beschreibbar sind, was ein Sicherheitsalptraum ist.
Eine der Strategien, um dies zu vermeiden, ist die Installation/Verwendung von mod_ruid2. https://github.com/mind04/mod-ruid2
Was Debian betrifft, reicht es aus:
apt-get install libapache2-mod-ruid2
Bitte beachten Sie, dass der Apache-Standardbenutzer je nach Distribution unterschiedlich ist. Bei Debian ist es www-data, bei RH/CentOS Apache und bei SuSE wwwrun. Ich werde es von nun an als Apache-Standardbenutzer bezeichnen.
Wenn Sie in einem vhost keine Direktiven definieren, verhält er sich auf herkömmliche Weise; andernfalls wird das Verhalten geändert.
Die Idee dahinter ist, dass ein Prozess im vhost mit dem Benutzer läuft, der Rechte für den vhost hat, und als solches haben die Dateien diesen Besitz, und wie Sie möchten, können andere Benutzer sie nicht lesen. Normalerweise definieren Sie einen Benutzer pro vhost.
In den Virtualhost- oder Directory-Direktiven in einem vhost definieren Sie den Benutzer und die Gruppe, die für dieses Verzeichnis aktiv sein werden. Die user:usergroup sind die effektiven Berechtigungen, die Apache beim Zugriff auf den virtuellen Host/das virtuelle Verzeichnis verwenden wird, und daher kann jeder Benutzer, der zu dieser Gruppe gehört, die Verzeichnisse schreiben/sehen.
<Directory "/vhostdir/">
RMode config
RUidGid user usergroup
....
Daher können die Dateien beim Schreiben der Verzeichnisse jetzt als 660 mit dem Besitz von user:usergroup erstellt werden, wenn sie von einer Gruppe von Benutzern verwaltet werden. Ebenso können die Dateien auch von einem anderen Benutzer mit Leserechten für die Welt erstellt werden; zum Schreiben ist es jedoch nicht der Apache-Standardbenutzer, sondern dieser andere Benutzer.
Die Vorteile von mod_ruid2 sind dann:
- in einer Umgebung mit virtuellem Hosting können Benutzer die Dateien anderer Benutzer nicht lesen;
- in einem einzelnen Benutzer können Sie immer noch Dateien als ein anderer Benutzer erstellen, und weder der Apache-Standardbenutzer noch der ruid2-Benutzer können sie überschreiben
- was noch wichtiger ist, die geschriebenen Dateien werden jetzt mit dem ruid2-Benutzer erstellt und nicht mehr global mit dem Apache-Standardbenutzer.
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, weil nur der Linux-Kernel die erforderlichen Prozessfähigkeiten implementiert hat.
- Es hat eine bessere Leistung als mod_suid2, weil es keine httpd-Kinder nach einer Anfrage töten muss. es nutzt Kernel-Fähigkeiten
und nach Erhalt einer neuen Anfrage suids wieder.
-es gibt einige Sicherheitsprobleme, zum Beispiel wenn ein Angreifer erfolgreich den httpd-Prozess ausnutzt, kann er effektive Fähigkeiten einstellen und
setuid zu root. Ich empfehle, einen Sicherheitspatch im Kernel
(grsec) oder so etwas zu verwenden.
-es gibt zwei Hauptbetriebsmodi:stat und config
1. config ist default, du musst uid und gid definieren. Wenn keine [ug]id definiert ist, werden der Standardbenutzer und die Standardgruppe verwendet.
- stat httpd setuid und setgid zu 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 libcap von 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. Apache neu starten
KONFIGURATIONSOPTIONEN:RMode config|stat (Standard ist config) RUidGid
user|#uid group|#gid – wenn RMode config ist, auf diese uid und gid setzen
RMinUidGid user|#uid group|#gid – wenn uid/gid
RGroups group1 group2 – zusätzliche Gruppen, die über setgroups gesetzt wurden @none –
alle zuvor definierten Gruppen löschen.
RDocumentChrRoot – Setzt das Chroot-Verzeichnis und das Dokumenten-Stammverzeichnis darin
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>