Dateiberechtigungen sind ein Grundpfeiler der Linux-Sicherheit. Wer darf lesen, schreiben, ausführen? In diesem Artikel erklären wir das Berechtigungssystem und die Befehle chmod und chown.
Das Linux-Berechtigungssystem
Jede Datei und jedes Verzeichnis hat drei Berechtigungsebenen:
- Owner (u): Der Besitzer der Datei
- Group (g): Die Gruppe der Datei
- Others (o): Alle anderen Benutzer
Und drei Berechtigungsarten:
- Read (r): Lesen erlaubt
- Write (w): Schreiben/Ändern erlaubt
- Execute (x): Ausführen erlaubt
Berechtigungen anzeigen
ls -lAusgabe:
-rw-r--r-- 1 marcel users 1234 Jan 26 10:00 datei.txt
drwxr-xr-x 2 marcel users 4096 Jan 26 10:00 ordnerAufschlüsselung
-rw-r--r--
│└┬┘└┬┘└┬┘
│ │ │ └── Others: r-- (nur lesen)
│ │ └───── Group: r-- (nur lesen)
│ └──────── Owner: rw- (lesen + schreiben)
└────────── Dateityp: - = Datei, d = Verzeichnischmod - Berechtigungen ändern
Symbolische Notation
chmod [wer][+-=][rechte] dateiWer:
u= User (Owner)g= Groupo= Othersa= All (alle drei)
Operatoren:
+= Recht hinzufügen-= Recht entfernen== Rechte exakt setzen
Beispiele:
# Ausführbar für Owner
chmod u+x script.sh
# Schreibrecht für Gruppe hinzufügen
chmod g+w datei.txt
# Alle Rechte für Others entfernen
chmod o-rwx datei.txt
# Lesbar für alle
chmod a+r datei.txt
# Exakt setzen: Owner alles, Gruppe lesen, Others nichts
chmod u=rwx,g=r,o= datei.txtNumerische Notation (Oktal)
Jedes Recht hat einen Zahlenwert:
- Read (r) = 4
- Write (w) = 2
- Execute (x) = 1
Die Summe ergibt die Berechtigung für jede Ebene:
| Rechte | Wert | Bedeutung | |--------|------|-----------| | --- | 0 | Keine Rechte | | --x | 1 | Nur ausführen | | -w- | 2 | Nur schreiben | | -wx | 3 | Schreiben + ausführen | | r-- | 4 | Nur lesen | | r-x | 5 | Lesen + ausführen | | rw- | 6 | Lesen + schreiben | | rwx | 7 | Alle Rechte |
Beispiele:
# rwxr-xr-x (Owner alles, Rest lesen+ausführen)
chmod 755 script.sh
# rw-r--r-- (Owner lesen+schreiben, Rest nur lesen)
chmod 644 datei.txt
# rwx------ (Nur Owner hat alle Rechte)
chmod 700 geheim.sh
# rw------- (Nur Owner lesen+schreiben)
chmod 600 passwort.txtRekursiv ändern
# Alle Dateien im Verzeichnis
chmod -R 755 /var/www/htmlchown - Besitzer ändern
chown benutzer:gruppe dateiBeispiele:
# Nur Besitzer ändern
chown marcel datei.txt
# Besitzer und Gruppe
chown marcel:users datei.txt
# Nur Gruppe ändern
chown :www-data datei.txt
# Rekursiv
chown -R www-data:www-data /var/www/htmlTypische Webserver-Berechtigungen
Standardkonfiguration
# Verzeichnisse: 755 (Owner alles, Rest lesen+betreten)
find /var/www/html -type d -exec chmod 755 {} \;
# Dateien: 644 (Owner lesen+schreiben, Rest nur lesen)
find /var/www/html -type f -exec chmod 644 {} \;
# Besitzer: www-data (Webserver-Benutzer)
chown -R www-data:www-data /var/www/htmlWordPress-Berechtigungen
# Standardrechte
find /var/www/wordpress -type d -exec chmod 755 {} \;
find /var/www/wordpress -type f -exec chmod 644 {} \;
# wp-config.php (sensibel)
chmod 600 /var/www/wordpress/wp-config.php
# Upload-Verzeichnis (beschreibbar für Webserver)
chmod 775 /var/www/wordpress/wp-content/uploadsSkript ausführbar machen
chmod +x /home/benutzer/backup.sh
# oder
chmod 755 /home/benutzer/backup.shSpezielle Berechtigungen
SUID (Set User ID)
Datei wird mit den Rechten des Besitzers ausgeführt.
chmod u+s datei
chmod 4755 dateiBeispiel: /usr/bin/passwd - normale Benutzer können ihr Passwort ändern.
SGID (Set Group ID)
Bei Dateien: Ausführung mit Gruppenrechten. Bei Verzeichnissen: Neue Dateien erben die Gruppe.
chmod g+s verzeichnis
chmod 2755 verzeichnisSticky Bit
Nur der Besitzer kann Dateien löschen (wichtig für /tmp).
chmod +t verzeichnis
chmod 1777 verzeichnisHäufige Berechtigungssets
| Oktal | Symbolisch | Verwendung | |-------|------------|------------| | 644 | rw-r--r-- | Normale Dateien | | 755 | rwxr-xr-x | Verzeichnisse, Skripte | | 600 | rw------- | Sensible Dateien (Passwörter) | | 700 | rwx------ | Private Verzeichnisse | | 775 | rwxrwxr-x | Gruppen-Schreibzugriff | | 777 | rwxrwxrwx | NICHT empfohlen (unsicher!) |
Berechtigungen bei Verzeichnissen
Bei Verzeichnissen bedeuten die Rechte:
- Read (r): Inhalt auflisten (ls)
- Write (w): Dateien erstellen/löschen
- Execute (x): Verzeichnis betreten (cd)
Wichtig: Ohne x können Sie ein Verzeichnis nicht betreten, auch wenn r gesetzt ist!
Troubleshooting
"Permission denied"
# Berechtigungen prüfen
ls -la datei.txt
# Besitzer prüfen
stat datei.txtWebserver kann nicht schreiben
# Besitzer auf Webserver-Benutzer
chown www-data:www-data /var/www/uploads
# Oder Schreibrecht für Gruppe
chmod 775 /var/www/uploadsSkript lässt sich nicht ausführen
chmod +x script.shBest Practices
1. Prinzip der minimalen Rechte: Nur so viel wie nötig 2. Nie 777 verwenden: Sicherheitsrisiko 3. Sensible Dateien: 600 oder 640 4. Webserver-Dateien: www-data als Besitzer 5. Regelmäßig prüfen: find / -perm 777 -type f 2>/dev/null
Fazit
Linux-Berechtigungen schützen Ihr System. Die Grundlagen: 644 für Dateien, 755 für Verzeichnisse, www-data für Webserver-Inhalte. Sensible Dateien wie Konfigurationen oder Passwörter sollten nur für den Besitzer lesbar sein (600).