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 = Name

Berechtigungstypen

| 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 = 4

chmod - 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.txt

Spezielle 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.txt

Standardberechtigungen

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 - umask

Permanent setzen

# In ~/.bashrc oder /etc/profile
umask 022

ACLs (Access Control Lists)

Installation

apt install acl

ACL 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.txt

Praktische 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.php

Shared 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ören

Home-Verzeichnisse

# Nur Besitzer hat Zugriff
chmod 700 /home/user

# Oder mit Gruppe lesbar
chmod 750 /home/user

SSH-Keys

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

Datenbank-Backups

# Nur Root lesbar
chmod 600 /backup/*.sql
chown root:root /backup/*.sql

Probleme 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/null

Massenhaft ä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 Bit

Zusammenfassung

| 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.