Dateiberechtigungen auf Ihrem VPS auslesen und richtig setzen
Jede Datei und jedes Verzeichnis auf Ihrem VPS hat einen Eigentümer, eine Gruppe und Rechte. Sind sie zu großzügig gesetzt, kann eine gehackte Website oder ein kompromittierter Dienst überall schreiben. Sind sie zu streng, erhalten Sie Fehler wie "Permission denied" oder einen 403 auf Ihrer Website. Hier erfahren Sie, wie Sie Rechte lesen und richtig setzen. Haben Sie ein Hostingpaket mit DirectAdmin, lesen Sie bitte Verboten (403): Sie haben keine Berechtigung, auf / auf diesem Server zuzugreifen.
Rechte lesen mit ls -l
ls -l /var/www/example.com -rw-r--r-- 1 anna www-data 1520 index.html -rw-r----- 1 anna www-data 412 config.php drwxr-xr-x 2 anna www-data 4096 images drwxrwxr-x 2 www-data www-data 4096 uploads
Das erste Zeichen gibt den Typ an: - ist eine Datei, d ein Verzeichnis, l ein symbolischer Link. Danach folgen drei Gruppen mit je drei Zeichen: was der Eigentümer darf, was die Gruppe darf und was alle anderen dürfen. Anschließend stehen der Eigentümer (anna) und die Gruppe (www-data).
| Buchstabe | Bei einer Datei | Bei einem Verzeichnis |
|---|---|---|
r | Lesen | Die Namen im Verzeichnis auflisten |
w | Ändern | Dateien anlegen, umbenennen und löschen |
x | Als Programm ausführen | Das Verzeichnis betreten und Dateien darin öffnen |
Beachten Sie zwei Dinge. Ohne x auf einem Verzeichnis gelangen Sie nicht an die Dateien darin, auch wenn diese lesbar sind. Und wer w auf einem Verzeichnis hat, kann darin Dateien löschen, auch wenn sie jemand anderem gehören.
Rechte als Zahl
Häufig werden Rechte als drei Ziffern geschrieben: r zählt 4, w 2 und x 1, addiert pro Gruppe.
| Zahl | Rechte | Verwendung |
|---|---|---|
| 644 | rw-r--r-- | Normale Datei, zum Beispiel eine Webseite oder ein Bild |
| 755 | rwxr-xr-x | Verzeichnis oder ein Programm, das jeder verwenden darf |
| 640 | rw-r----- | Konfiguration mit einem Passwort, für den Webserver über die Gruppe lesbar |
| 600 | rw------- | Geheime Datei, etwa authorized_keys, ein privater Schlüssel oder eine .env-Datei |
| 700 | rwx------ | Privates Verzeichnis, etwa ~/.ssh |
Rechte und Eigentümer ändern
chmod 640 /var/www/example.com/config.php chmod g+w /var/www/example.com/uploads sudo chown anna:www-data /var/www/example.com/config.php
chmod ändert die Rechte, mit einer Zahl oder mit Buchstaben (u, g, o für Eigentümer, Gruppe und andere, mit + oder -). chown eigentümer:gruppe ändert Eigentümer und Gruppe; das darf nur root, also mit sudo.
Für ein ganzes Verzeichnis ist chmod -R 644 ein bekannter Fehler: Alle Unterverzeichnisse verlieren dann ihr x und werden unbrauchbar. Setzen Sie Verzeichnisse und Dateien getrennt mit find:
sudo find /var/www/example.com -type d -exec chmod 755 {} +
sudo find /var/www/example.com -type f -exec chmod 644 {} +
Der Webserver über die Gruppe
Unter Debian und Ubuntu laufen nginx und PHP-FPM standardmäßig unter dem Benutzer www-data. Eine saubere Aufteilung: Sie sind Eigentümer der Dateien, die Gruppe ist www-data. Der Webserver darf dann über die Gruppe lesen und nur in dem Verzeichnis schreiben, wo das wirklich nötig ist, etwa uploads (chmod g+w oder Eigentümer www-data nur für dieses Verzeichnis). Geben Sie dem Webserver keine Schreibrechte auf Ihre PHP-Dateien.
777. Dann darf jeder auf dem Server die Datei oder das Verzeichnis lesen, ändern und ausführen. Wird jemals eine Website oder ein Dienst kompromittiert, kann der Angreifer überall schreiben, wo 777 gesetzt ist. Das eigentliche Problem ist fast immer der Eigentümer oder die Gruppe: Beheben Sie das, statt alles freizugeben.Rechte für SSH
Der SSH-Server prüft die Rechte Ihrer Schlüssel. Dürfen andere in Ihr .ssh-Verzeichnis oder Ihr Home-Verzeichnis schreiben, ignoriert er Ihren Schlüssel und Sie werden wieder nach einem Passwort gefragt, ohne eindeutige Fehlermeldung. Setzen Sie es so:
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
Haben Sie das Verzeichnis als root für einen anderen Benutzer angelegt, setzen Sie auch den Eigentümer richtig, wie in Ein eigener Benutzer mit sudo beschrieben. Unter AlmaLinux und Rocky Linux kann auch SELinux eine Datei verweigern, die die richtigen Rechte hat; bei einem von Hand angelegten .ssh-Verzeichnis hilft restorecon -Rv ~/.ssh.
s statt eines x, etwa bei /usr/bin/passwd? Das ist das Setuid-Bit: Das Programm läuft dann mit den Rechten des Eigentümers. Einige Systemprogramme benötigen das, setzen Sie es aber niemals selbst auf ein Skript. Eine unerwartete Setuid-Datei kann auf einen Einbruch hindeuten, siehe Gehackt? Die ersten Schritte.Möchten Sie mehr erfahren? Besuchen Sie den kostenlosen Kurs VPS und Linux-Serververwaltung, Lektion 3.1 Benutzer, Gruppen und Dateirechte.
