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-editDen 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/htmlDer 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 {} +| Buchstabe | Bedeutung |
|---|---|
| r | lesen |
| w | schreiben |
| x | ausfü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/uploadsAnschließend Apache neu starten:
sudo systemctl restart apache2Erläuterungen: Befehl für Verzeichnisse (Directories)
sudo find /var/www/html -type d -exec chmod 2775 {} +| Teil | Bedeutung |
|---|---|
sudo | Fü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/html | Startet die Suche im Verzeichnis /var/www/html (inklusive aller Unterverzeichnisse). |
-type d | Beschrä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). |
2775 | Oktale 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. |
| Ergebnis | Jedes 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 {} +| Teil | Bedeutung |
|---|---|
sudo | Wie oben – benötigt, weil die Zielpfade meist nur vom Administrator beschreibbar sind. |
find /var/www/html | Durchsucht wieder das komplette Web‑Root. |
-type f | Beschrä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. |
664 | Oktale 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. |
| Ergebnis | Jede 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
| Ziel | Befehl | Resultierende Rechte |
|---|---|---|
| Alle Verzeichnisse | sudo find /var/www/html -type d -exec chmod 2775 {} + | rwxrwxr-x + Set‑GID |
| Alle Dateien | sudo find /var/www/html -type f -exec chmod 664 {} + | rw-rw-r-- |
xfü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.