← Zurück

Dateiberechtigungen (chmod/chown)

linux permissions chmod chown security

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