Zugriffsrechte für Webserver

Veröffentlicht in: ,

Damit unter Linux auf das Verzeichnis /var/www/html zugreifen können, sind Änderungen bei den Zugriffsrechten erforderlich.

Ein bewährter Ansatz besteht darin, eine eigene Gruppe für den Web‑Content anzulegen und die Zugriffsrechte gezielt zu setzen .

Eine Gruppe erstellen:

sudo groupadd www-data-edit

Den Namen für die Gruppe, hier www-data-edit können Sie frei wählen.

Den Benutzer zur Gruppe hinzufügen:

sudo usermod -aG www-data-edit <benutzername>

Der Benutzer muss sich nach dem Hinzufügen neu anmelden, damit die neue Gruppenzugehörigkeit wirksam wird.

Das Verzeichnis der neuen Gruppe zuweisen:

sudo chown -R root:www-data-edit /var/www/html

Der Eigentümer bleibt root, die neue Gruppe bekommt Schreib‑/Lese‑Rechte.

# Verzeichnis: rwx für Besitzer, rwx für Gruppe, r‑x für andere
sudo chmod 2775 /var/www/html

# Alle Unterverzeichnisse ebenfalls
sudo find /var/www/html -type d -exec chmod 2775 {} +

# Dateien: rw‑ für Besitzer, rw‑ für Gruppe, r‑‑ für andere
sudo find /var/www/html -type f -exec chmod 664 {} +
BuchstabeBedeutung
rlesen
wschreiben
xausführen

Wichtig: Der Webserver (Apache) muss das Verzeichnis weiterhin lesen können. Dies erreicht man dadurch, das für „Andere“, die nicht der neuen Gruppe angehören, die Rechte für Lesen und Ausführen eingeräumt werden.

Optional: Feinkörnige ACLs (Access Control Lists)

Falls Sie nur bestimmten Unterordnern oder einzelnen Dateien differenzierte Rechte geben wollen:

# Beispiel: Nur Benutzer „alice“ darf in /var/www/html/uploads schreiben:

sudo setfacl -R -m u:alice:rwx /var/www/html/uploads

# Standard‑ACL für neue Dateien/Ordner im Upload‑Verzeichnis:

sudo setfacl -d -m u:alice:rwx /var/www/html/uploads

Anschließend Apache neu starten:

sudo systemctl restart apache2

Erläuterungen: Befehl für Verzeichnisse (Directories)

sudo find /var/www/html -type d -exec chmod 2775 {} +
TeilBedeutung
sudoFührt den gesamten Befehl mit administrativen Rechten aus, weil das Durchsuchen und Ändern von Berechtigungen unter /var/www/html häufig nur dem root‑Benutzer erlaubt ist.
find /var/www/htmlStartet die Suche im Verzeichnis /var/www/html (inklusive aller Unterverzeichnisse).
-type dBeschränkt die Trefferliste auf Verzeichnisse (d = directory). Dateien werden dabei ignoriert.
-exec chmod 2775 {} +Für jede gefundene Datei/Verzeichnis wird ein externer Befehl ausgeführt: • chmod 2775 ändert die Zugriffs‑ und Sonderrechte (siehe unten). • {} ist ein Platzhalter, den find durch den jeweiligen Pfad ersetzt. • Das abschließende + bedeutet: Statt für jedes einzelne Ergebnis einen eigenen chmod‑Aufruf zu starten, sammelt find mehrere Pfade und ruft chmod einmal mit einer Liste von Argumenten auf (effizienter).
2775Oktale Darstellung der Berechtigungen:* 2 – Set‑GID‑Bit: neu erstellte Dateien/Unterverzeichnisse übernehmen automatisch die Gruppe des übergeordneten Verzeichnisses.* 7 – Besitzer (root): Lese (r), Schreib‑ (w) und Ausführungs‑ (x) Recht.* 7 – Gruppe (www-data‑edit in unserem Beispiel): ebenfalls rwx.* 5 – Andere (Welt): Lese‑ und Ausführungsrecht (r-x).Damit haben alle Nutzer, die zur Gruppe gehören, vollen Zugriff, während Außenstehende nur lesen können.
ErgebnisJedes Verzeichnis unter /var/www/html bekommt die Rechte rwxrwxr-x und das Set‑GID‑Bit, sodass neue Inhalte automatisch die korrekte Gruppe erhalten.

Erläuterungen: Befehl für Dateien (Regular Files)

sudo find /var/www/html -type f -exec chmod 664 {} +
TeilBedeutung
sudoWie oben – benötigt, weil die Zielpfade meist nur vom Administrator beschreibbar sind.
find /var/www/htmlDurchsucht wieder das komplette Web‑Root.
-type fBeschränkt die Trefferliste auf normale Dateien (f = file).
-exec chmod 664 {} +Führt chmod 664 für alle gefundenen Dateien aus, wieder gesammelt in einem Aufruf.
664Oktale Berechtigung für reguläre Dateien:* 6 – Besitzer (root): Lese‑ + Schreib‑Recht (rw-).* 6 – Gruppe (www-data‑edit): ebenfalls rw-.* 4 – Andere: nur Leserecht (r--).Damit können sowohl root als auch alle Mitglieder der Gruppe die Datei bearbeiten, während die Öffentlichkeit nur lesen darf.
ErgebnisJede Datei unter /var/www/html erhält rw-rw-r--. Da das Set‑GID‑Bit bereits auf den übergeordneten Ordnern gesetzt ist, behalten neue Dateien automatisch die gewünschte Gruppenzugehörigkeit.

Warum das + am Ende?

Performance: Ohne das + würde find für jedes einzelne Ergebnis einen eigenen chmod‑Prozess starten. Mit + werden alle Pfade zu einem einzigen Aufruf zusammengefasst, was deutlich schneller ist, besonders bei vielen Dateien oder Ordnern.

Was passiert, wenn man das Set‑GID‑Bit weglässt?

Ohne das Set‑GID‑Bit (2 in 2775) würden neu erstellte Dateien die primäre Gruppe des Benutzers erhalten, nicht die Gruppe des übergeordneten Verzeichnisses. Das würde bedeuten, dass Team‑Mitglieder eventuell keinen Schreibzugriff mehr auf neue Dateien hätten – genau das wollen wir vermeiden.

Kurz zusammengefasst

ZielBefehlResultierende Rechte
Alle Verzeichnissesudo find /var/www/html -type d -exec chmod 2775 {} +rwxrwxr-x + Set‑GID
Alle Dateiensudo find /var/www/html -type f -exec chmod 664 {} +rw-rw-r--
  • x für „Andere“ ist nötig, damit der Web‑Server (der nicht Besitzer und nicht in deiner Arbeitsgruppe ist) das Verzeichnis betreten und die darin liegenden Dateien ausliefern kann.
  • Ohne dieses Ausführ‑Recht würde die Website nicht funktionieren (403‑Fehler).
  • Die Kombination 775 (bzw. 2775) liefert schreibfähige Gruppe + nur Lese‑/Ausführ‑Rechte für die Allgemeinheit, was das gängige Sicherheits‑/Funktions‑Kompliment darstellt

Ausblick

Damit haben Sie ein gruppenbasiertes Berechtigungsschema erstellt, das sowohl Sicherheit (weniger Rechte für „Andere“) als auch Zusammenarbeit (volle Rechte für die Projektgruppe) gewährleistet.

Grafik: Website-Icon