Dateiberechtigungen (chmod/chown)
Dateiberechtigungen unter Linux
Linux verwendet ein ausgeklügeltes Berechtigungssystem, das kontrolliert, wer Dateien und Verzeichnisse lesen, schreiben und ausführen darf.
Grundkonzept
Jede Datei/Verzeichnis hat: - Eigentümer (Owner) - Ein Benutzer - Gruppe (Group) - Eine Gruppe - Berechtigungen - Was Owner, Group und Others dürfen
Die drei Berechtigungstypen
| Symbol | Oktal | Bedeutung für Dateien | Bedeutung für Verzeichnisse |
|---|---|---|---|
r |
4 | Lesen (read) | Inhalt auflisten |
w |
2 | Schreiben (write) | Erstellen/Löschen darin |
x |
1 | Ausführen (execute) | Betreten (cd) |
Berechtigungen lesen
ls -la
Ausgabe:
-rwxr-xr-- 1 max developers 4096 Jan 15 10:30 script.sh
drwxrwxr-x 2 max developers 4096 Jan 15 10:30 projekte
Aufschlüsselung:
-rwxr-xr--
│├─┤├─┤├─┤
│ │ │ └── Others: r-- (nur lesen)
│ │ └───── Group: r-x (lesen + ausführen)
│ └──────── Owner: rwx (alles)
└────────── Typ: - = Datei, d = Verzeichnis, l = Link
chmod – Berechtigungen ändern
Symbolische Notation
Syntax: chmod [wer][operator][berechtigung] datei
Wer:
- u = User (Owner)
- g = Group
- o = Others
- a = All (alle drei)
Operator:
- + = Hinzufügen
- - = Entfernen
- = = Exakt setzen
Beispiele:
# Owner darf ausführen
chmod u+x script.sh
# Group darf schreiben
chmod g+w datei.txt
# Others dürfen nichts
chmod o-rwx geheim.txt
# Alle dürfen lesen
chmod a+r public.txt
# Owner alles, Rest nur lesen
chmod u=rwx,go=r datei.txt
# Ausführbar für alle
chmod +x script.sh
# Mehrere Änderungen
chmod u+x,g-w,o-rwx datei.txt
Oktale Notation
Berechne die Summe für Owner, Group, Others:
- r = 4
- w = 2
- x = 1
| Oktal | Binär | Berechtigung |
|---|---|---|
| 7 | 111 | rwx |
| 6 | 110 | rw- |
| 5 | 101 | r-x |
| 4 | 100 | r-- |
| 3 | 011 | -wx |
| 2 | 010 | -w- |
| 1 | 001 | --x |
| 0 | 000 | --- |
Beispiele:
# rwxr-xr-x (755) - Standard für Skripte
chmod 755 script.sh
# rw-r--r-- (644) - Standard für Dateien
chmod 644 datei.txt
# rwx------ (700) - Nur Owner
chmod 700 privat.sh
# rw------- (600) - Sensible Dateien
chmod 600 .ssh/id_rsa
# rwxrwxr-x (775) - Gemeinsame Verzeichnisse
chmod 775 shared/
Häufige Kombinationen
| Oktal | Symbolisch | Verwendung |
|---|---|---|
| 755 | rwxr-xr-x | Ausführbare Skripte, Verzeichnisse |
| 644 | rw-r--r-- | Normale Dateien |
| 700 | rwx------ | Private Verzeichnisse |
| 600 | rw------- | SSH-Keys, sensible Configs |
| 777 | rwxrwxrwx | ⚠️ Unsicher! Vermeiden! |
| 775 | rwxrwxr-x | Gruppenverzeichnisse |
| 664 | rw-rw-r-- | Gemeinsame Dateien |
Rekursiv ändern
# Alle Dateien im Verzeichnis
chmod -R 755 /var/www/html/
# Nur Verzeichnisse
find /path -type d -exec chmod 755 {} \;
# Nur Dateien
find /path -type f -exec chmod 644 {} \;
chown – Eigentümer ändern
Syntax
chown [optionen] benutzer[:gruppe] datei
Beispiele
# Nur Owner ändern
sudo chown max datei.txt
# Owner und Gruppe ändern
sudo chown max:developers datei.txt
# Nur Gruppe ändern
sudo chown :developers datei.txt
# oder
sudo chgrp developers datei.txt
# Rekursiv
sudo chown -R max:max /home/max/
# Wie eine andere Datei
sudo chown --reference=vorlage.txt ziel.txt
chgrp – Gruppe ändern
# Gruppe ändern
sudo chgrp developers datei.txt
# Rekursiv
sudo chgrp -R www-data /var/www/
Spezielle Berechtigungen
SUID (Set User ID)
Datei wird mit Rechten des Owners ausgeführt (nicht des aufrufenden Users).
# SUID setzen
chmod u+s programm
chmod 4755 programm
# Erkennung: s statt x beim Owner
-rwsr-xr-x
Beispiel: /usr/bin/passwd hat SUID, damit normale User ihr Passwort ändern können.
SGID (Set Group ID)
- Bei Dateien: Ausführung mit Gruppenrechten
- Bei Verzeichnissen: Neue Dateien erben die Gruppe
# SGID setzen
chmod g+s verzeichnis/
chmod 2775 verzeichnis/
# Erkennung: s statt x bei Group
drwxrwsr-x
Praktisch für gemeinsame Projektordner:
sudo mkdir /shared
sudo chown :developers /shared
sudo chmod 2775 /shared
# Alle neuen Dateien gehören automatisch zur Gruppe "developers"
Sticky Bit
Nur Owner können ihre eigenen Dateien löschen (auch wenn andere Schreibrechte haben).
# Sticky Bit setzen
chmod +t verzeichnis/
chmod 1777 verzeichnis/
# Erkennung: t am Ende
drwxrwxrwt
Beispiel: /tmp hat Sticky Bit – jeder kann schreiben, aber nur eigene Dateien löschen.
Spezielle Bits kombiniert
| Oktal | Bedeutung |
|---|---|
| 4xxx | SUID |
| 2xxx | SGID |
| 1xxx | Sticky Bit |
| 6xxx | SUID + SGID |
| 7xxx | Alle drei |
# SGID + normale Berechtigungen
chmod 2775 shared/
# Sticky Bit + normale Berechtigungen
chmod 1777 /tmp/
umask – Standard-Berechtigungen
umask definiert, welche Berechtigungen bei neuen Dateien/Verzeichnissen entfernt werden.
# Aktuelle umask anzeigen
umask
# Symbolisch anzeigen
umask -S
Berechnung
Basis: - Dateien: 666 (kein x) - Verzeichnisse: 777
Mit umask 022: - Dateien: 666 - 022 = 644 (rw-r--r--) - Verzeichnisse: 777 - 022 = 755 (rwxr-xr-x)
umask setzen
# Temporär
umask 027
# Dauerhaft in ~/.bashrc
echo "umask 027" >> ~/.bashrc
Empfohlene Werte: | umask | Dateien | Verzeichnisse | Verwendung | |-------|---------|---------------|------------| | 022 | 644 | 755 | Standard | | 027 | 640 | 750 | Restriktiver | | 077 | 600 | 700 | Sehr privat |
Access Control Lists (ACL)
Für feinere Kontrolle jenseits von Owner/Group/Others.
ACL anzeigen
getfacl datei.txt
ACL setzen
# Bestimmtem User Rechte geben
setfacl -m u:anna:rwx datei.txt
# Bestimmter Gruppe Rechte geben
setfacl -m g:developers:rx datei.txt
# Standard-ACL für neue Dateien in Verzeichnis
setfacl -d -m g:developers:rwx projekt/
# ACL entfernen
setfacl -x u:anna datei.txt
# Alle ACLs entfernen
setfacl -b datei.txt
Erkennung: + am Ende der Berechtigungen
-rw-rw-r--+ 1 max developers 0 Jan 15 10:30 datei.txt
Praktische Beispiele
Webserver-Verzeichnis einrichten
# Verzeichnis erstellen
sudo mkdir -p /var/www/meineseite
# www-data als Owner
sudo chown -R www-data:www-data /var/www/meineseite
# Sichere Berechtigungen
sudo find /var/www/meineseite -type d -exec chmod 755 {} \;
sudo find /var/www/meineseite -type f -exec chmod 644 {} \;
Entwickler-Teamverzeichnis
# Verzeichnis mit SGID
sudo mkdir /projects/team
sudo chown :developers /projects/team
sudo chmod 2775 /projects/team
# Alle Entwickler können nun Dateien erstellen
# die automatisch der Gruppe "developers" gehören
SSH-Verzeichnis absichern
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts
Skript ausführbar machen
chmod +x mein_script.sh
# oder
chmod 755 mein_script.sh
Troubleshooting
"Permission denied"
# Berechtigungen prüfen
ls -la datei.txt
# Verzeichnis-Berechtigungen prüfen (x nötig zum Betreten!)
ls -la /pfad/zum/
# Owner prüfen
stat datei.txt
Berechtigungen rekursiv reparieren
# Typische Web-Berechtigungen
sudo find /var/www -type d -exec chmod 755 {} \;
sudo find /var/www -type f -exec chmod 644 {} \;
Immutable-Flag prüfen
# Datei kann nicht geändert werden?
lsattr datei.txt
# Flag entfernen (falls "i" gesetzt)
sudo chattr -i datei.txt