Zum Inhalt springen

Erweiterte Rechte

Neben den klassischen POSIX-Rechten (rwx für Owner, Group, Others) gibt es drei besondere Bits sowie ACLs für feinere Zugriffssteuerung.

Wenn das SetUID-Bit auf einer ausführbaren Datei gesetzt ist, läuft das Programm mit den Rechten des Datei-Eigentümers — nicht mit den Rechten des aufrufenden Benutzers.

Terminal-Fenster
ls -l /usr/bin/passwd
-rwsr-xr-x 1 root root 68208 /usr/bin/passwd
# ↑
# s statt x beim Owner = SUID gesetzt

passwd gehört root und hat SUID gesetzt — jeder Benutzer kann damit sein eigenes Passwort ändern, obwohl /etc/shadow nur für root schreibbar ist.

Terminal-Fenster
chmod u+s programm # SUID setzen (symbolisch)
chmod 4755 programm # SUID setzen (oktal — führende 4)
chmod u-s programm # SUID entfernen

Das SetGID-Bit wirkt unterschiedlich — je nachdem ob es auf einer Datei oder einem Verzeichnis gesetzt ist.

Auf ausführbaren Dateien: Das Programm läuft mit der Gruppe der Datei statt der primären Gruppe des aufrufenden Benutzers.

Terminal-Fenster
ls -l /usr/bin/write
-rwxr-sr-x 1 root tty 14736 /usr/bin/write
# ↑
# s statt x bei der Group = SGID gesetzt

Auf Verzeichnissen: Neue Dateien und Unterverzeichnisse erben automatisch die Gruppe des Verzeichnisses — nicht die primäre Gruppe des Erstellers. Praktisch für gemeinsam genutzte Verzeichnisse:

Terminal-Fenster
mkdir /srv/projekt
chown :entwicklung /srv/projekt
chmod g+s /srv/projekt # SGID auf Verzeichnis setzen
# Jetzt erhalten alle neuen Dateien in /srv/projekt automatisch die Gruppe "entwicklung"
Terminal-Fenster
chmod g+s verzeichnis # SGID setzen (symbolisch)
chmod 2755 verzeichnis # SGID setzen (oktal — führende 2)

Das Sticky-Bit auf einem Verzeichnis verhindert, dass Benutzer Dateien anderer Benutzer löschen — auch wenn sie Schreibrecht auf das Verzeichnis haben.

Terminal-Fenster
ls -ld /tmp
drwxrwxrwt 1 root root 4096 /tmp
# ↑
# t statt x bei Others = Sticky-Bit gesetzt

/tmp ist für alle schreibbar — ohne Sticky-Bit könnte jeder die Dateien anderer löschen. Mit Sticky-Bit darf nur der Eigentümer (oder root) eine Datei löschen.

Terminal-Fenster
chmod +t /srv/shared # Sticky-Bit setzen (symbolisch)
chmod 1777 /srv/shared # Sticky-Bit setzen (oktal — führende 1)
chmod -t /srv/shared # Sticky-Bit entfernen
BitOktalSymbolischWirkung
SetUID4xxxu+sDatei läuft als Eigentümer
SetGID2xxxg+sDatei läuft als Gruppe / Verzeichnis: Gruppe vererben
Sticky1xxx+tNur Eigentümer kann eigene Dateien löschen
Kombination6xxxug+sSetUID + SetGID

In ls -l erscheint ein großes S / T (statt s / t), wenn das zugehörige Execute-Bit nicht gesetzt ist — ein Hinweis auf eine wahrscheinlich fehlerhafte Konfiguration.

Die klassischen POSIX-Rechte kennen nur drei Klassen (Owner, Group, Others). ACLs ermöglichen feingranulare Berechtigungen für beliebige Benutzer und Gruppen.

Das Dateisystem muss mit ACL-Unterstützung eingehängt sein. Bei ext4 und xfs ist ACL-Unterstützung heute standardmäßig aktiv. Prüfen:

Terminal-Fenster
tune2fs -l /dev/sda1 | grep "Default mount options"
# Default mount options: acl
Terminal-Fenster
getfacl datei.txt

Beispielausgabe:

datei.txt
# owner: micha
# group: users
user::rw-
user:anna:r--
group::r--
group:entwicklung:rw-
mask::rw-
other::r--
Terminal-Fenster
# Einzelnen Benutzer berechtigen
setfacl -m u:anna:rw datei.txt
# Gruppe berechtigen
setfacl -m g:entwicklung:rw datei.txt
# Standard-ACL für ein Verzeichnis (vererbt sich auf neue Dateien)
setfacl -d -m g:entwicklung:rw /srv/projekt
# ACL-Eintrag entfernen
setfacl -x u:anna datei.txt
# Alle ACLs entfernen
setfacl -b datei.txt

Die mask definiert die maximalen Rechte für Benutzer (außer Owner) und Gruppen. getfacl zeigt die effektiven Rechte nach Anwendung der Maske:

Terminal-Fenster
setfacl -m m::r datei.txt # Maske auf read-only setzen
# Damit können anna und gruppe "entwicklung" nicht mehr schreiben,
# auch wenn ihre ACL-Einträge rw- enthalten

Viele Backup-Tools ignorieren ACLs standardmäßig. Mit tar ACLs erhalten:

Terminal-Fenster
tar --acls -czf backup.tar.gz /srv/projekt
tar --acls -xzf backup.tar.gz