Benutzer-Werkzeuge

Webseiten-Werkzeuge


sammlung:suid_sgid

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

Siehe auch

sammlung/suid_sgid.txt · Zuletzt geändert: von 127.0.0.1