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 wechselnBerechtigungsgruppen
Owner (u) = Besitzer
Group (g) = Gruppe
Others (o) = Alle anderen
All (a) = Alle dreiBerechtigungen 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 alleOktale 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.txtRekursiv ändern
chown -R www-data:www-data /var/www/html/Mit Referenz
# Berechtigungen von anderer Datei übernehmen
chown --reference=vorlage.txt ziel.txtumask - 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" >> ~/.bashrcEmpfohlene 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-xSGID (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-xSticky Bit
# Nur Besitzer kann Dateien löschen
chmod +t /tmp/
chmod 1777 /tmp/
# Anzeige: t statt x
drwxrwxrwtOktale 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-xTypische 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_keysSkripte
chmod 755 /usr/local/bin/myscript.sh
# Oder
chmod +x script.shKonfigurationsdateien
# Systemkonfiguration
chmod 644 /etc/nginx/nginx.conf
chown root:root /etc/nginx/nginx.conf
# Sensible Dateien
chmod 600 /etc/mysql/debian.cnfShared 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 erbenACLs (Access Control Lists)
ACLs prüfen
getfacl datei.txtACL 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.txtACL 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/nullBest 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üfenTroubleshooting
"Permission denied"
# Berechtigungen prüfen
ls -la datei.txt
ls -la $(dirname datei.txt)
# Besitzer prüfen
id
id usernameWebserver 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.