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:

RechteWertBedeutung
---0Keine Rechte
--x1Nur ausführen
-w-2Nur schreiben
-wx3Schreiben + ausführen
r--4Nur lesen
r-x5Lesen + ausführen
rw-6Lesen + schreiben
rwx7Alle 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

OktalSymbolischVerwendung
644rw-r--r--Normale Dateien
755rwxr-xr-xVerzeichnisse, Skripte
600rw-------Sensible Dateien (Passwörter)
700rwx------Private Verzeichnisse
775rwxrwxr-xGruppen-Schreibzugriff
777rwxrwxrwxNICHT 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).