Das Linux-Berechtigungssystem kontrolliert den Zugriff auf Dateien und Verzeichnisse. Es unterscheidet zwischen Besitzer, Gruppe und anderen Benutzern mit Lese-, Schreib- und Ausführrechten.
Berechtigungen verstehen
ls -l Ausgabe
$ ls -l datei.txt
-rw-r--r-- 1 user group 1234 Jan 26 10:00 datei.txt
Aufschlüsselung:
- = Dateityp (- = Datei, d = Verzeichnis, l = Link)
rw- = Besitzer: read, write
r-- = Gruppe: read
r-- = Andere: read
1 = Hard Links
user = Besitzer
group = Gruppe
1234 = Größe in Bytes
Jan 26... = Änderungsdatum
datei.txt = NameBerechtigungstypen
| Symbol | Wert | Datei | Verzeichnis | |--------|------|-------|-------------| | r | 4 | Lesen | Inhalt auflisten | | w | 2 | Schreiben | Dateien erstellen/löschen | | x | 1 | Ausführen | Betreten (cd) | | - | 0 | Keine | Keine |
Numerische Notation
rwxr-xr-x = 755
rw-r--r-- = 644
rwx------ = 700
rw-rw-r-- = 664
Berechnung:
rwx = 4+2+1 = 7
r-x = 4+0+1 = 5
r-- = 4+0+0 = 4chmod - Berechtigungen ändern
Numerisch
# Datei: Besitzer rwx, Gruppe r-x, Andere r-x
chmod 755 script.sh
# Datei: Besitzer rw-, Gruppe r--, Andere r--
chmod 644 datei.txt
# Verzeichnis: Nur Besitzer
chmod 700 privat/
# Rekursiv
chmod -R 755 /var/www/html/Symbolisch
# + hinzufügen, - entfernen, = setzen
# u = user, g = group, o = others, a = all
# Ausführbar für Besitzer
chmod u+x script.sh
# Schreibbar für Gruppe
chmod g+w datei.txt
# Lesbar für alle entfernen
chmod o-r geheim.txt
# Exakt setzen
chmod u=rwx,g=rx,o=rx script.sh
# Alles für alle
chmod a+r datei.txtSpezielle Berechtigungen
| Bit | Numerisch | Symbol | Wirkung | |-----|-----------|--------|---------| | SUID | 4000 | s (u+s) | Ausführung als Besitzer | | SGID | 2000 | s (g+s) | Ausführung als Gruppe | | Sticky | 1000 | t (+t) | Nur Besitzer kann löschen |
# SUID setzen
chmod u+s /usr/bin/program
chmod 4755 /usr/bin/program
# SGID auf Verzeichnis
chmod g+s /var/shared/
chmod 2775 /var/shared/
# Sticky Bit (wie /tmp)
chmod +t /tmp/shared/
chmod 1777 /tmp/shared/chown - Besitzer ändern
# Besitzer ändern
chown user datei.txt
# Besitzer und Gruppe
chown user:group datei.txt
# Nur Gruppe
chown :group datei.txt
chgrp group datei.txt
# Rekursiv
chown -R www-data:www-data /var/www/
# Wie andere Datei
chown --reference=referenz.txt ziel.txtStandardberechtigungen
umask
# Aktuelle umask anzeigen
umask
# umask setzen
umask 022 # Dateien: 644, Verzeichnisse: 755
umask 027 # Dateien: 640, Verzeichnisse: 750
umask 077 # Dateien: 600, Verzeichnisse: 700
# Berechnung
# Dateien: 666 - umask
# Verzeichnisse: 777 - umaskPermanent setzen
# In ~/.bashrc oder /etc/profile
umask 022ACLs (Access Control Lists)
Installation
apt install aclACL anzeigen
getfacl datei.txt
# file: datei.txt
# owner: user
# group: group
user::rw-
group::r--
other::r--ACL setzen
# Benutzer hinzufügen
setfacl -m u:anna:rw datei.txt
# Gruppe hinzufügen
setfacl -m g:developers:rx /var/www/
# Standard-ACL für neue Dateien
setfacl -d -m u:anna:rw /var/shared/
setfacl -d -m g:developers:rx /var/shared/
# Rekursiv
setfacl -R -m u:anna:rx /var/www/ACL entfernen
# Einzelnen Eintrag
setfacl -x u:anna datei.txt
# Alle ACLs
setfacl -b datei.txt
# Standard-ACL entfernen
setfacl -k /var/shared/ACL kopieren
# ACL von einer Datei auf andere
getfacl datei1.txt | setfacl --set-file=- datei2.txtPraktische Beispiele
Webserver
# Webroot
chown -R www-data:www-data /var/www/html/
chmod -R 755 /var/www/html/
# Upload-Verzeichnis
chmod 775 /var/www/html/uploads/
# Konfig-Dateien schützen
chmod 640 /var/www/html/.env
chmod 600 /var/www/html/config/database.phpShared Verzeichnis
# Verzeichnis für Gruppe
mkdir /srv/shared
chown root:developers /srv/shared
chmod 2775 /srv/shared
# SGID sorgt dafür, dass neue Dateien
# automatisch der Gruppe gehörenHome-Verzeichnisse
# Nur Besitzer hat Zugriff
chmod 700 /home/user
# Oder mit Gruppe lesbar
chmod 750 /home/userSSH-Keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
chmod 600 ~/.ssh/authorized_keysDatenbank-Backups
# Nur Root lesbar
chmod 600 /backup/*.sql
chown root:root /backup/*.sqlProbleme beheben
Berechtigungen finden
# Dateien mit bestimmten Berechtigungen
find /var/www -perm 777
find /var/www -perm -o+w # world-writable
# SUID-Programme finden
find / -perm -4000 -type f 2>/dev/null
# Dateien ohne Besitzer
find / -nouser -o -nogroup 2>/dev/nullMassenhaft ändern
# Alle Dateien auf 644
find /var/www -type f -exec chmod 644 {} \;
# Alle Verzeichnisse auf 755
find /var/www -type d -exec chmod 755 {} \;
# Kombiniert
find /var/www -type f -exec chmod 644 {} \; -o -type d -exec chmod 755 {} \;Berechtigungen reparieren
#!/bin/bash
# fix-permissions.sh
WEBROOT="/var/www/html"
USER="www-data"
GROUP="www-data"
# Besitzer setzen
chown -R $USER:$GROUP $WEBROOT
# Verzeichnisse: 755
find $WEBROOT -type d -exec chmod 755 {} \;
# Dateien: 644
find $WEBROOT -type f -exec chmod 644 {} \;
# Scripts ausführbar
find $WEBROOT -type f -name "*.sh" -exec chmod 755 {} \;Sonderzeichen
setuid/setgid erkennen
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root ... /usr/bin/passwd
# s = SUID gesetzt
ls -l /usr/bin/write
-rwxr-sr-x 1 root tty ... /usr/bin/write
# s = SGID gesetzt
ls -ld /tmp
drwxrwxrwt 10 root root ... /tmp
# t = Sticky BitZusammenfassung
| Berechtigung | Numerisch | Symbolisch | |--------------|-----------|------------| | rwxrwxrwx | 777 | a+rwx | | rwxr-xr-x | 755 | u=rwx,go=rx | | rw-r--r-- | 644 | u=rw,go=r | | rwx------ | 700 | u=rwx,go= | | rw------- | 600 | u=rw,go= |
| Befehl | Funktion | |--------|----------| | chmod | Berechtigungen ändern | | chown | Besitzer ändern | | chgrp | Gruppe ändern | | umask | Standard-Maske | | getfacl | ACL anzeigen | | setfacl | ACL setzen |
| Spezial | Wert | Wirkung | |---------|------|---------| | SUID | 4000 | Als Besitzer ausführen | | SGID | 2000 | Als Gruppe ausführen | | Sticky | 1000 | Nur Besitzer kann löschen |
Fazit
Das Linux-Berechtigungssystem ist fundamental für Sicherheit. Die numerische Notation ist kompakt aber erfordert Übung. ACLs erweitern die Möglichkeiten für komplexe Szenarien. SUID/SGID sollten mit Vorsicht verwendet werden. Regelmäßige Audits mit find helfen, Probleme zu erkennen. Für Webserver ist die richtige Konfiguration essentiell.