Dateirechte sind fundamental für Linux-Sicherheit. Dieser Artikel erklärt, wie Sie Berechtigungen lesen, setzen und verwalten.

Grundlagen

Berechtigungsarten

r (read)    = 4 = Lesen
w (write)   = 2 = Schreiben
x (execute) = 1 = Ausführen

Für Verzeichnisse:
r = Inhalt auflisten
w = Dateien erstellen/löschen
x = In Verzeichnis wechseln

Berechtigungsgruppen

Owner (u)  = Besitzer
Group (g)  = Gruppe
Others (o) = Alle anderen
All (a)    = Alle drei

Berechtigungen lesen

ls -la

-rw-r--r-- 1 user group 1234 Jan 26 10:00 datei.txt
drwxr-xr-x 2 user group 4096 Jan 26 10:00 verzeichnis/

# Aufschlüsselung:
# -rw-r--r--
# │└┬┘└┬┘└┬┘
# │ │  │  └── Others: r-- (nur lesen)
# │ │  └───── Group:  r-- (nur lesen)
# │ └──────── Owner:  rw- (lesen + schreiben)
# └────────── Typ: - (Datei) oder d (Verzeichnis)

chmod - Berechtigungen ändern

Symbolische Notation

# Berechtigungen hinzufügen
chmod u+x datei.sh          # Ausführbar für Owner
chmod g+w datei.txt         # Schreibrecht für Gruppe
chmod o-r datei.txt         # Leserecht für Others entfernen
chmod a+r datei.txt         # Leserecht für alle

# Berechtigungen setzen
chmod u=rwx,g=rx,o=r datei  # Explizit setzen

# Kombinationen
chmod ug+rw datei.txt       # Owner und Gruppe: lesen+schreiben
chmod +x script.sh          # Ausführbar für alle

Oktale Notation

# Berechnung: r=4, w=2, x=1

chmod 755 datei     # rwxr-xr-x
chmod 644 datei     # rw-r--r--
chmod 700 datei     # rwx------
chmod 600 datei     # rw-------
chmod 777 datei     # rwxrwxrwx (unsicher!)

# Häufige Kombinationen:
# 755 = rwxr-xr-x (Verzeichnisse, ausführbare Dateien)
# 644 = rw-r--r-- (normale Dateien)
# 600 = rw------- (private Dateien)
# 700 = rwx------ (private Verzeichnisse)
# 775 = rwxrwxr-x (Gruppen-Schreibzugriff)

Rekursiv ändern

# Alle Dateien und Unterverzeichnisse
chmod -R 755 /var/www/html/

# Nur Verzeichnisse
find /var/www/html -type d -exec chmod 755 {} \;

# Nur Dateien
find /var/www/html -type f -exec chmod 644 {} \;

chown - Besitzer ändern

Besitzer ändern

# Nur Besitzer
chown user datei.txt

# Besitzer und Gruppe
chown user:group datei.txt

# Nur Gruppe
chown :group datei.txt
# Oder
chgrp group datei.txt

Rekursiv ändern

chown -R www-data:www-data /var/www/html/

Mit Referenz

# Berechtigungen von anderer Datei übernehmen
chown --reference=vorlage.txt ziel.txt

umask - Standard-Berechtigungen

umask verstehen

umask bestimmt, welche Rechte ENTFERNT werden:

Standard für Dateien:    666 (rw-rw-rw-)
Standard für Verzeichnisse: 777 (rwxrwxrwx)

Beispiel umask 022:
- Dateien: 666 - 022 = 644 (rw-r--r--)
- Verzeichnisse: 777 - 022 = 755 (rwxr-xr-x)

umask prüfen und setzen

# Aktuelle umask anzeigen
umask

# Oktal
umask
# 0022

# Symbolisch
umask -S
# u=rwx,g=rx,o=rx

# umask setzen (temporär)
umask 027

# Permanent (in ~/.bashrc)
echo "umask 027" >> ~/.bashrc

Empfohlene umask-Werte

| umask | Ergebnis Dateien | Ergebnis Verz. | Verwendung | |-------|------------------|----------------|------------| | 022 | 644 | 755 | Standard | | 027 | 640 | 750 | Sicherer | | 077 | 600 | 700 | Sehr privat |

Spezielle Berechtigungen

SUID (Set User ID)

# Programm läuft mit Rechten des Besitzers
chmod u+s /usr/bin/passwd
chmod 4755 datei

# Anzeige: s statt x
-rwsr-xr-x

SGID (Set Group ID)

# Programm läuft mit Rechten der Gruppe
# Bei Verzeichnis: Neue Dateien erben Gruppe
chmod g+s /var/shared/
chmod 2755 verzeichnis

# Anzeige: s statt x
drwxr-sr-x

Sticky Bit

# Nur Besitzer kann Dateien löschen
chmod +t /tmp/
chmod 1777 /tmp/

# Anzeige: t statt x
drwxrwxrwt

Oktale Notation mit Spezialrechten

# 4xxx = SUID
# 2xxx = SGID
# 1xxx = Sticky Bit

chmod 4755 datei    # SUID + rwxr-xr-x
chmod 2755 verz     # SGID + rwxr-xr-x
chmod 1777 verz     # Sticky + rwxrwxrwx
chmod 6755 datei    # SUID + SGID + rwxr-xr-x

Typische Anwendungsfälle

Webserver (Apache/Nginx)

# Webverzeichnis
chown -R www-data:www-data /var/www/html/
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;

# Upload-Verzeichnis
chmod 775 /var/www/html/uploads/

SSH-Schlüssel

chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keys

Skripte

chmod 755 /usr/local/bin/myscript.sh
# Oder
chmod +x script.sh

Konfigurationsdateien

# Systemkonfiguration
chmod 644 /etc/nginx/nginx.conf
chown root:root /etc/nginx/nginx.conf

# Sensible Dateien
chmod 600 /etc/mysql/debian.cnf

Shared Directory (Gruppe)

# Verzeichnis für Team
mkdir /var/shared
chown :developers /var/shared
chmod 2775 /var/shared
# SGID sorgt dafür, dass neue Dateien die Gruppe erben

ACLs (Access Control Lists)

ACLs prüfen

getfacl datei.txt

ACL setzen

# Benutzer hinzufügen
setfacl -m u:username:rwx datei.txt

# Gruppe hinzufügen
setfacl -m g:groupname:rx datei.txt

# Standard-ACL für Verzeichnis
setfacl -d -m u:username:rwx verzeichnis/

# ACL entfernen
setfacl -x u:username datei.txt

# Alle ACLs entfernen
setfacl -b datei.txt

ACL rekursiv

setfacl -R -m u:username:rx /var/www/

Sicherheit

Gefährliche Berechtigungen finden

# World-writable Dateien
find / -type f -perm -0002 -ls 2>/dev/null

# SUID-Dateien
find / -type f -perm -4000 -ls 2>/dev/null

# SGID-Dateien
find / -type f -perm -2000 -ls 2>/dev/null

# Dateien ohne Besitzer
find / -nouser -ls 2>/dev/null

Best Practices

1. Minimale Rechte vergeben (Principle of Least Privilege)
2. Keine 777 auf Produktivsystemen
3. Sensible Dateien: 600 oder 640
4. Verzeichnisse: 755 oder 750
5. SUID/SGID nur wo nötig
6. Regelmäßig prüfen

Troubleshooting

"Permission denied"

# Berechtigungen prüfen
ls -la datei.txt
ls -la $(dirname datei.txt)

# Besitzer prüfen
id
id username

Webserver kann nicht lesen

# Als www-data testen
sudo -u www-data cat /var/www/html/index.html

# Berechtigungen korrigieren
chown -R www-data:www-data /var/www/html/
find /var/www/html -type d -exec chmod 755 {} \;
find /var/www/html -type f -exec chmod 644 {} \;

SELinux-Kontexte (CentOS/RHEL)

# Kontext prüfen
ls -Z datei.txt

# Kontext wiederherstellen
restorecon -Rv /var/www/html/

Zusammenfassung

| Befehl | Funktion | |--------|----------| | chmod 755 datei | Rechte setzen (oktal) | | chmod u+x datei | Recht hinzufügen (symbolisch) | | chown user:group datei | Besitzer ändern | | chgrp group datei | Gruppe ändern | | umask 022 | Standard-Maske setzen | | setfacl -m u:user:rwx datei | ACL setzen |

Fazit

Dateirechte sind essenziell für Linux-Sicherheit. Verstehen Sie die Unterschiede zwischen Owner, Group und Others, und nutzen Sie chmod, chown und umask, um Ihre Dateien richtig abzusichern. Für komplexere Szenarien bieten ACLs mehr Flexibilität. Vergeben Sie immer nur die minimal notwendigen Rechte.