Inhaltsverzeichnis
SUID, SGID und Sticky Bit
SUID (Set User ID), SGID (Set Group ID) und Sticky Bit sind spezielle Berechtigungen unter Linux, die das Ausführungsverhalten von Programmen und den Zugriff auf Verzeichnisse beeinflussen. Diese werden als spezielle Bits in den Dateirechten gesetzt.
SUID (Set User ID)
Wenn das SUID-Bit gesetzt ist, wird ein Programm beim Ausführen mit den Rechten des Dateibesitzers gestartet – nicht mit den Rechten des ausführenden Benutzers.
Beispiel:
-rwsr-xr-x 1 root root ... /usr/bin/passwd
Das „s“ im Besitzer-Bereich zeigt das SUID-Bit.
passwd
benötigt z.B. root-Rechte, um Passwörter zu ändern.
Setzen:
chmod u+s datei
SGID (Set Group ID)
Mit SGID ausgeführte Programme laufen mit den Rechten der Gruppenzugehörigkeit der Datei.
Beispiel:
-rwxr-sr-x 1 root mail ... /usr/bin/procmail
Das „s“ im Gruppen-Bereich zeigt das SGID-Bit.
Setzen:
chmod g+s datei
SGID auf Verzeichnissen
Wird SGID auf ein Verzeichnis gesetzt, werden neue Dateien darin automatisch der Gruppenzugehörigkeit des Verzeichnisses zugeordnet.
Setzen:
chmod g+s verzeichnis
Verhalten beim Erstellen neuer Dateien
SUID und SGID auf neuen Dateien
Aus Sicherheitsgründen werden SUID und SGID NICHT automatisch vererbt an neu erstellte Dateien:
# Verzeichnis mit SUID/SGID erstellen mkdir testdir chmod 6777 testdir # SUID + SGID + rwxrwxrwx # Neue Datei erstellen touch testdir/neuedatei ls -l testdir/neuedatei -rw-r--r-- 1 user group ... testdir/neuedatei # Keine SUID/SGID-Bits gesetzt!
Wichtig:
- SUID wird NIE automatisch auf neue Dateien gesetzt - muss explizit gesetzt werden
- SGID wird auf Dateien nur vererbt wenn vom System unterstützt (selten)
- SGID auf Verzeichnissen - neue Dateien erben die Gruppe des Verzeichnisses
SGID auf Verzeichnissen - Gruppenvererbung
Bei SGID-Verzeichnissen erben neue Dateien die Gruppe des Verzeichnisses (nicht die primäre Gruppe des Erstellers):
# Verzeichnis mit SGID erstellen mkdir projektdir chgrp projektteam projektdir chmod g+s projektdir chmod 2775 projektdir ls -ld projektdir drwxrwsr-x 2 user projektteam ... projektdir # Benutzer erstellt Datei (gehört zur Gruppe "benutzergruppe") touch projektdir/dokument.txt ls -l projektdir/dokument.txt -rw-r--r-- 1 user projektteam ... projektdir/dokument.txt # Gruppe ist "projektteam" (vom Verzeichnis), nicht "benutzergruppe"!
SGID-Vererbung auch auf Unterverzeichnisse
Neue Unterverzeichnisse in einem SGID-Verzeichnis erben sowohl die Gruppe als auch das SGID-Bit:
# In SGID-Verzeichnis ein Unterverzeichnis erstellen mkdir projektdir/unterordner ls -ld projektdir/unterordner drwxr-sr-x 2 user projektteam ... projektdir/unterordner # - Gruppe ist "projektteam" (vererbt) # - SGID-Bit ist gesetzt (vererbt)
Sticky Bit-Verhalten
Das Sticky Bit wird NICHT auf neue Dateien oder Unterverzeichnisse vererbt:
# Verzeichnis mit Sticky Bit mkdir stickydir chmod 1777 stickydir ls -ld stickydir drwxrwxrwt 2 user group ... stickydir # Neue Datei erstellen touch stickydir/datei.txt ls -l stickydir/datei.txt -rw-r--r-- 1 user group ... stickydir/datei.txt # Kein Sticky Bit! # Unterverzeichnis erstellen mkdir stickydir/unterdir ls -ld stickydir/unterdir drwxr-xr-x 2 user group ... stickydir/unterdir # Kein Sticky Bit!
Zusammenfassung: Vererbung bei Dateierstellung
| Bit | Auf Verzeichnis gesetzt | Neue Datei | Neues Unterverzeichnis | Bemerkung |
|---|---|---|---|---|
| SUID | Ja | Nein | Nein | Wird nie vererbt (Sicherheit) |
| SGID | Ja | Gruppe JA, Bit Nein | Gruppe JA, Bit JA | Unterverzeichnisse erben beides |
| Sticky | Ja | Nein | Nein | Wird nicht vererbt |
Merksatz: Nur SGID auf Verzeichnissen hat Auswirkungen beim Erstellen neuer Dateien/Verzeichnisse - es vererbt die Gruppenzugehörigkeit und bei Unterverzeichnissen auch das SGID-Bit selbst.
Sticky Bit
Das Sticky Bit (auch Restricted Deletion Flag) wird hauptsächlich auf Verzeichnissen verwendet. Wenn es gesetzt ist, können Dateien in diesem Verzeichnis nur vom Dateibesitzer, dem Verzeichnisbesitzer oder root gelöscht oder umbenannt werden – auch wenn andere Benutzer Schreibrechte im Verzeichnis haben.
Sticky Bit auf Verzeichnissen
Typisches Beispiel ist das /tmp-Verzeichnis:
drwxrwxrwt 1 root root ... /tmp
Das „t“ am Ende zeigt das Sticky Bit. Jeder kann dort Dateien erstellen, aber nur der Besitzer kann sie löschen.
Setzen:
chmod +t verzeichnis chmod 1777 verzeichnis # Mit numerischer Notation
Entfernen:
chmod -t verzeichnis
Sticky Bit auf Dateien
Auf modernen Linux-Systemen hat das Sticky Bit auf Dateien keine Funktion mehr. Historisch wurde es verwendet, um Programme im Speicher zu halten.
Numerische Notation
Spezielle Berechtigungen können auch numerisch gesetzt werden:
# Vierstellige Notation: [Spezial][User][Group][Other] chmod 4755 datei # SUID + rwxr-xr-x chmod 2755 datei # SGID + rwxr-xr-x chmod 1777 verzeichnis # Sticky Bit + rwxrwxrwx chmod 4750 datei # SUID + rwxr-x--- chmod 6755 datei # SUID + SGID + rwxr-xr-x chmod 7755 datei # SUID + SGID + Sticky + rwxr-xr-x
Werte für spezielle Bits:
- 4 = SUID
- 2 = SGID
- 1 = Sticky Bit
Diese können kombiniert werden (z.B. 4+2=6 für SUID+SGID).
Übersicht der Anzeige
| Bit | Auf Dateien | Auf Verzeichnissen | Anzeige (wenn ausführbar) | Anzeige (wenn nicht ausführbar) |
|---|---|---|---|---|
| SUID | Programm läuft als Besitzer | Keine Wirkung | s (user-Bereich) | S (user-Bereich) |
| SGID | Programm läuft als Gruppe | Neue Dateien erben Gruppe | s (group-Bereich) | S (group-Bereich) |
| Sticky | Keine Wirkung (historisch) | Nur Besitzer kann löschen | t (other-Bereich) | T (other-Bereich) |
Kleinbuchstaben (s, t) = Ausführungsrecht ist gesetzt Großbuchstaben (S, T) = Ausführungsrecht ist NICHT gesetzt
Beispiele
SUID-Beispiel
# passwd benötigt root-Rechte um /etc/shadow zu ändern ls -l /usr/bin/passwd -rwsr-xr-x 1 root root ... /usr/bin/passwd # Setzen sudo chmod u+s /pfad/zum/programm sudo chmod 4755 /pfad/zum/programm
SGID-Beispiel auf Verzeichnis
# Shared-Projektverzeichnis erstellen sudo mkdir /srv/projekt sudo chgrp projektteam /srv/projekt sudo chmod g+s /srv/projekt sudo chmod 2775 /srv/projekt ls -ld /srv/projekt drwxrwsr-x 2 root projektteam ... /srv/projekt # Alle neuen Dateien gehören automatisch zur Gruppe "projektteam"
Sticky Bit-Beispiel
# Shared-Upload-Verzeichnis mit Sticky Bit sudo mkdir /srv/upload sudo chmod 1777 /srv/upload ls -ld /srv/upload drwxrwxrwt 2 root root ... /srv/upload # Jeder kann Dateien erstellen, aber nur eigene Dateien löschen
Kombiniertes Beispiel: SGID + Sticky Bit
# Team-Verzeichnis mit Sticky Bit sudo mkdir /srv/team-share sudo chgrp team /srv/team-share sudo chmod 3770 /srv/team-share # SGID (2) + Sticky (1) + rwxrwx--- ls -ld /srv/team-share drwxrws--T 2 root team ... /srv/team-share # - Neue Dateien erben Gruppe "team" (SGID) # - Nur Dateibesitzer kann eigene Dateien löschen (Sticky Bit) # - Nur Team-Mitglieder haben Zugriff
Sicherheitsaspekte
SUID-Risiken
- Privilege Escalation - SUID-Programme können Sicherheitslücken darstellen
- Nur vertrauenswürdige Programme - SUID nur auf notwendige System-Tools setzen
- Regelmäßige Überprüfung - SUID-Dateien regelmäßig auditieren
Alle SUID-Dateien finden:
# SUID-Dateien suchen sudo find / -type f -perm -4000 -ls 2>/dev/null # SGID-Dateien suchen sudo find / -type f -perm -2000 -ls 2>/dev/null # Dateien mit SUID oder SGID sudo find / -type f \( -perm -4000 -o -perm -2000 \) -ls 2>/dev/null
Best Practices
- Minimalprinzip - SUID/SGID nur wenn unbedingt nötig
- NoSUID Mount-Option - Partitionen mit nosuid mounten wo möglich
- Audit-Tools nutzen - Tools wie rkhunter oder aide verwenden
- Dokumentation - Begründung für jede SUID/SGID-Datei dokumentieren
- Sticky Bit für Shared Directories - Bei mehreren Benutzern immer verwenden
Mount-Optionen
# In /etc/fstab - SUID/SGID auf Partition deaktivieren /dev/sdb1 /home ext4 defaults,nosuid,nodev 0 2 # Temporär mounten sudo mount -o remount,nosuid /partition
Entfernen von speziellen Berechtigungen
# Einzeln entfernen chmod u-s datei # SUID entfernen chmod g-s datei # SGID entfernen chmod -t verzeichnis # Sticky Bit entfernen # Alle speziellen Bits entfernen chmod 0755 datei # Setzt nur rwxr-xr-x (keine speziellen Bits) # Rekursiv für Verzeichnis chmod -R u-s,g-s verzeichnis
Überprüfung und Debugging
# Aktuelle Berechtigungen prüfen ls -l datei stat datei # Numerische Darstellung stat -c "%a %n" datei # Detaillierte Informationen stat -c "Permissions: %a (%A) %n" datei # Beispiel-Ausgabe: # Permissions: 4755 (-rwsr-xr-x) /usr/bin/sudo # Permissions: 1777 (drwxrwxrwt) /tmp
Häufige Probleme
"Permission denied" trotz Rechten
Prüfen Sie:
- Ist das Ausführungsrecht gesetzt? (s statt S, t statt T)
- Ist die Partition mit nosuid gemountet?
- Sind alle Verzeichnisse im Pfad zugänglich?
SGID funktioniert nicht auf Verzeichnis
# Prüfen ob ausführbar für Gruppe ls -ld verzeichnis # Sollte sein: drwxrws--- (nicht drwxrwS---) # Korrekt setzen chmod 2775 verzeichnis
Sticky Bit zeigt "T" statt "t"
Das große „T“ bedeutet, dass das Ausführungsrecht für „others“ fehlt:
# Aktuell: drwxrwxrwT (Sticky Bit ohne x) # Korrektur: chmod o+x verzeichnis # Ergebnis: drwxrwxrwt (Sticky Bit mit x)
Weitere Informationen
man chmod man 2 chmod man stat man find
