7.4 KiB
Dateiberechtigungen - chmod und chown
Verwaltung von Zugriffsrechten, Eigentümern und Gruppen in Linux.
Rechte-System in Linux
Jede Datei hat:
- Eigentümer (Owner) - der Benutzer, dem die Datei gehört
- Gruppe (Group) - eine Benutzergruppe
- Zugriffsrechte für drei Bereiche:
- u (user) = Eigentümer
- g (group) = Gruppe
- o (others) = Andere
Jeder Bereich hat drei Rechte:
- r (read) = Lesen (4)
- w (write) = Schreiben (2)
- x (execute) = Ausführen (1)
Rechte anzeigen
ls -l datei.txt
Ausgabe:
-rw-r--r-- 1 alice developers 1234 Nov 7 10:00 datei.txt
- Position 1: Dateityp (
-= Datei,d= Verzeichnis,l= Link) - Position 2-4: User-Rechte (
rw-) - Position 5-7: Group-Rechte (
r--) - Position 8-10: Other-Rechte (
r--) alice= Eigentümerdevelopers= Gruppe
chmod - Zugriffsrechte ändern
Symbolische Notation
chmod [ugoa][+-=][rwx] datei
Rechte hinzufügen:
chmod u+x script.sh # Eigentümer: ausführbar
chmod g+w datei.txt # Gruppe: schreibbar
chmod o+r datei.txt # Andere: lesbar
chmod a+x script.sh # Alle: ausführbar
Rechte entfernen:
chmod u-x script.sh # Eigentümer: nicht ausführbar
chmod g-w datei.txt # Gruppe: nicht schreibbar
chmod o-r datei.txt # Andere: nicht lesbar
Rechte setzen (überschreiben):
chmod u=rw,g=r,o= datei.txt # User: rw, Group: r, Others: keine
chmod a=r datei.txt # Alle: nur lesen
Numerische Notation (Oktal)
Rechte als dreistellige Oktalzahl:
| Wert | Rechte | Bedeutung |
|---|---|---|
| 0 | --- |
Keine Rechte |
| 1 | --x |
Ausführen |
| 2 | -w- |
Schreiben |
| 3 | -wx |
Schreiben + Ausführen |
| 4 | r-- |
Lesen |
| 5 | r-x |
Lesen + Ausführen |
| 6 | rw- |
Lesen + Schreiben |
| 7 | rwx |
Alle Rechte |
Häufige Kombinationen:
chmod 644 datei.txt # rw-r--r-- (Standard für Dateien)
chmod 755 script.sh # rwxr-xr-x (Standard für Scripts)
chmod 700 privat.key # rwx------ (Nur Eigentümer)
chmod 600 ~/.ssh/id_rsa # rw------- (SSH-Schlüssel)
chmod 777 verzeichnis # rwxrwxrwx (Alle Rechte - UNSICHER!)
Beispiel: chmod 755 bedeutet:
- User: 7 (rwx)
- Group: 5 (r-x)
- Others: 5 (r-x)
Rekursiv
chmod -R 755 /pfad/zum/verzeichnis
Nur Verzeichnisse oder nur Dateien:
find . -type d -exec chmod 755 {} + # Alle Verzeichnisse
find . -type f -exec chmod 644 {} + # Alle Dateien
Spezielle Rechte
Sticky Bit (nur Eigentümer kann löschen):
chmod +t /tmp # Symbolic
chmod 1777 verzeichnis # Numeric (rwxrwxrwt)
SUID (läuft mit Rechten des Eigentümers):
chmod u+s /usr/bin/passwd # Symbolic
chmod 4755 datei # Numeric (rwsr-xr-x)
SGID (neue Dateien erben Gruppe):
chmod g+s verzeichnis # Symbolic
chmod 2755 verzeichnis # Numeric (rwxr-sr-x)
Praktische Beispiele
Script ausführbar machen:
chmod +x meinscript.sh
./meinscript.sh
SSH-Verzeichnis absichern:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys
Web-Verzeichnis:
chmod -R 755 /var/www/html
find /var/www/html -type f -exec chmod 644 {} +
find /var/www/html -type d -exec chmod 755 {} +
Projekt-Verzeichnis:
chmod -R u+rwX,g+rX,o-rwx projektordner
(X = ausführbar nur für Verzeichnisse)
chown - Eigentümer und Gruppe ändern
Grundsyntax
chown [OPTIONEN] EIGENTÜMER[:GRUPPE] DATEI
Eigentümer ändern
chown alice datei.txt
Eigentümer und Gruppe ändern
chown alice:developers datei.txt
Nur Gruppe ändern
chown :developers datei.txt
Oder mit chgrp:
chgrp developers datei.txt
Rekursiv
chown -R alice:developers /pfad/zum/verzeichnis
Von anderem Benutzer übernehmen
chown --reference=referenzdatei zieldatei
Praktische Beispiele
Web-Server Verzeichnis:
sudo chown -R www-data:www-data /var/www/html
Home-Verzeichnis korrigieren:
sudo chown -R alice:alice /home/alice
Nach Copy von Root:
sudo cp /root/datei.txt /home/alice/
sudo chown alice:alice /home/alice/datei.txt
Nur Dateien, nicht Verzeichnisse:
find /pfad -type f -exec chown alice:developers {} +
Nur bei Bedarf ändern:
find /pfad ! -user alice -exec chown alice {} +
find /pfad ! -group developers -exec chgrp developers {} +
Symbolische Links
Standardmäßig ändert chown das Ziel des Links:
chown alice symlink # ändert Ziel
chown -h alice symlink # ändert nur den Link selbst
Kombinierte Anwendung
Berechtigungen komplett setzen
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -exec chmod 755 {} +
sudo find /var/www/html -type f -exec chmod 644 {} +
Projekt-Setup
sudo chown -R alice:developers /opt/projekt
chmod -R u+rwX,g+rwX,o-rwx /opt/projekt
Backup wiederherstellen
sudo tar -xpf backup.tar.gz # -p bewahrt Rechte
sudo chown -R alice:alice /home/alice/restored/
Berechtigungen prüfen
ls -l datei.txt # Einfache Ansicht
stat datei.txt # Detaillierte Info
getfacl datei.txt # ACLs anzeigen (falls gesetzt)
Eigentümer-ID statt Name
chown 1000:1000 datei.txt # Verwendet UID und GID direkt
UIDs anzeigen:
id alice # UID und GIDs von alice
Fehler vermeiden
Rekursive Änderungen testen
# Erst anzeigen
find /pfad -ls
# Dann ändern
sudo chown -R alice:developers /pfad
NIEMALS auf Root-Verzeichnis
# GEFÄHRLICH - bricht System
sudo chown -R user:user / # NIEMALS!
sudo chmod -R 777 / # NIEMALS!
# Nur eigene Verzeichnisse
sudo chown -R user:user /home/user
Zu permissive Rechte
# FALSCH - macht alles ausführbar
chmod -R 777 verzeichnis # NICHT verwenden!
# RICHTIG - differenziert
find verzeichnis -type d -exec chmod 755 {} +
find verzeichnis -type f -exec chmod 644 {} +
Systemdateien
# Wichtige Systemdateien sollten root gehören
ls -l /etc/passwd /etc/shadow
# -rw-r--r-- 1 root root ... /etc/passwd
# -rw-r----- 1 root shadow ... /etc/shadow
Mit sudo
chown erfordert meist Root-Rechte:
sudo chown root:root /etc/wichtig.conf
sudo chmod 644 /etc/wichtig.conf
Ohne sudo:
# Nur eigene Dateien
chmod 644 meine_datei.txt
# chown nur als root
chown alice datei.txt # Permission denied (außer eigene Datei)
Zusammenfassung
| Befehl | Zweck | Beispiel |
|---|---|---|
chmod |
Rechte ändern | chmod 755 script.sh |
chown |
Eigentümer ändern | chown alice:developers file |
chgrp |
Nur Gruppe ändern | chgrp developers file |
ls -l |
Rechte anzeigen | ls -l file |
stat |
Details anzeigen | stat file |
Standard-Rechte:
- Dateien:
644(rw-r--r--) - Scripts:
755(rwxr-xr-x) - Verzeichnisse:
755(rwxr-xr-x) - Private Dateien:
600(rw-------)