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 -l

Ausgabe:

-rw-r--r-- 1 marcel users  1234 Jan 26 10:00 datei.txt
drwxr-xr-x 2 marcel users  4096 Jan 26 10:00 ordner

Aufschlüsselung

-rw-r--r--
│└┬┘└┬┘└┬┘
│ │  │  └── Others: r-- (nur lesen)
│ │  └───── Group:  r-- (nur lesen)
│ └──────── Owner:  rw- (lesen + schreiben)
└────────── Dateityp: - = Datei, d = Verzeichnis

chmod - Berechtigungen ändern

Symbolische Notation

chmod [wer][+-=][rechte] datei

Wer:

  • u = User (Owner)
  • g = Group
  • o = Others
  • a = 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.txt

Numerische 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.txt

Rekursiv ändern

# Alle Dateien im Verzeichnis
chmod -R 755 /var/www/html

chown - Besitzer ändern

chown benutzer:gruppe datei

Beispiele:

# 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/html

Typische 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/html

WordPress-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/uploads

Skript ausführbar machen

chmod +x /home/benutzer/backup.sh
# oder
chmod 755 /home/benutzer/backup.sh

Spezielle Berechtigungen

SUID (Set User ID)

Datei wird mit den Rechten des Besitzers ausgeführt.

chmod u+s datei
chmod 4755 datei

Beispiel: /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 verzeichnis

Sticky Bit

Nur der Besitzer kann Dateien löschen (wichtig für /tmp).

chmod +t verzeichnis
chmod 1777 verzeichnis

Hä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.txt

Webserver kann nicht schreiben

# Besitzer auf Webserver-Benutzer
chown www-data:www-data /var/www/uploads

# Oder Schreibrecht für Gruppe
chmod 775 /var/www/uploads

Skript lässt sich nicht ausführen

chmod +x script.sh

Best 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).