Best Practices zur Sicherung von Linux-Dateisystemen mit Sonderrechten
Linux-Dateiberechtigungen bilden die Grundlage der Systemsicherheit und steuern, wer Dateien lesen, schreiben und ausführen darf. Während Standard-Lese-/Schreib-/Ausführungsberechtigungen (rwx) grundlegend sind, führt Linux spezielle Berechtigungs-Bits – SUID, SGID und das Sticky Bit – ein, um den Ausführungskontext und die Integrität gemeinsamer Ressourcen zu verwalten. Die Beherrschung dieser Berechtigungen ermöglicht es Administratoren, gezielt erweiterte Funktionen sicher zu gewähren, um die notwendige Funktionalität zu gewährleisten und gleichzeitig Sicherheitsrisiken zu minimieren.
Dieser Leitfaden befasst sich eingehend mit der praktischen Anwendung und den Sicherheitsimplikationen der Set User ID (SUID), der Set Group ID (SGID) und des Sticky Bit. Zu verstehen, wann und wie diese Funktionen eingesetzt werden sollten, ist entscheidend, um die Betriebseffizienz aufrechtzuerhalten, ohne die allgemeine Sicherheitslage Ihrer Linux-Umgebung zu gefährden.
Rückblick: Verständnis der Standardberechtigungen
Bevor wir die Sonderberechtigungen untersuchen, ist es wichtig, sich an die Standard-Triplett-Notation (rwx für Eigentümer, Gruppe und andere) zu erinnern. Diese Berechtigungen werden numerisch mithilfe von Oktalwerten dargestellt (z. B. 755 oder 644).
r(Lesen) = 4w(Schreiben) = 2x(Ausführen) = 1
Spezielle Berechtigungen ändern dieses Basisverhalten und werden durch eine vierte, führende Oktalziffer (4, 2 oder 1) dargestellt.
Die Sonderberechtigungen: SUID, SGID und das Sticky Bit
Sonderberechtigungen erweitern die Funktionalität über die standardmäßige Zugriffskontrolle hinaus. Sie werden in der Langdarstellung (ls -l) normalerweise durch ein s oder t anstelle des Standard-x-Flags gekennzeichnet.
| Berechtigung | Oktalwert | Effekt |
|---|---|---|
| SUID (Set User ID) | 4 | Die Datei wird mit den Berechtigungen des Dateieigentümers (nicht des ausführenden Benutzers) ausgeführt. |
| SGID (Set Group ID) | 2 | Die Datei wird mit den Berechtigungen der Dateigruppe ausgeführt, oder neue Dateien erben die Gruppen-ID des übergeordneten Verzeichnisses. |
| Sticky Bit | 1 | Verhindert, dass Benutzer Dateien, die anderen Benutzern gehören, in einem freigegebenen Verzeichnis löschen oder umbenennen, selbst wenn sie Schreibberechtigung für das Verzeichnis besitzen. |
1. Set User ID (SUID)
Das SUID-Bit ist mächtig und bei Missbrauch potenziell gefährlich. Wenn es für eine ausführbare Datei gesetzt ist, führt jeder Benutzer, der diese Datei ausführt, den Prozess mit den Berechtigungen des Eigentümers aus.
Praktischer Anwendungsfall: Dienstprogramme, die Root-Rechte benötigen, um eine bestimmte Aufgabe auszuführen, aber dem Benutzer keinen allgemeinen Root-Zugriff gewähren sollen.
Beispiel: SUID auf /usr/bin/passwd
Der Befehl /usr/bin/passwd erfordert typischerweise Root-Zugriff, um die sichere Datei /etc/shadow zu ändern. Er hat das SUID-Bit gesetzt, wodurch ein Standardbenutzer vorübergehend die Rechte des Eigentümers (root) erlangt, nur für die Dauer der Ausführung von passwd, um sein eigenes Passwort zu ändern.
SUID anzeigen: Beachten Sie das s im Ausführungsslot des Eigentümers:
ls -l /usr/bin/passwd
# Ausgabebeispiel: -rwsr-xr-x 1 root root ... /usr/bin/passwd
SUID setzen: Verwenden Sie den Oktalwert 4 kombiniert mit den Standardberechtigungen (z. B. wird 755 zu 4755):
# Angenommen, 'my_script' gehört 'appuser'
chmod 4755 /path/to/my_script
Sicherheitswarnung für SUID: Setzen Sie das SUID-Bit niemals für allgemeine Shells (wie
/bin/bash) oder Skripte, die externe Eingaben interpretieren, da dies jedem, der die Datei ausführt, uneingeschränkten Root-Zugriff gewährt.
2. Set Group ID (SGID)
Das SGID-Bit hat zwei Hauptfunktionen, je nachdem, ob es auf eine Datei oder ein Verzeichnis angewendet wird.
A. SGID auf ausführbaren Dateien
Wenn es für eine ausführbare Datei gesetzt ist, wird der Prozess mit den Berechtigungen ausgeführt, die der Gruppenzugehörigkeit der Datei zugeordnet sind, nicht mit der primären Gruppe des Benutzers.
B. SGID auf Verzeichnissen (Entscheidend für freigegebene Umgebungen)
Wenn es für ein Verzeichnis gesetzt ist, erbt jede darin erstellte neue Datei oder jedes Unterverzeichnis automatisch die Gruppenzugehörigkeit des übergeordneten Verzeichnisses, anstatt der primären Gruppe des Benutzers, der die neue Datei erstellt hat.
Praktischer Anwendungsfall: Freigegebene Projektordner, in denen alle Mitwirkenden für die Zusammenarbeit einen einheitlichen Gruppenzugriff benötigen.
SGID für ein Verzeichnis setzen: Verwenden Sie den Oktalwert 2 kombiniert mit Standardberechtigungen (z. B. wird 775 zu 2775):
# Gruppenzugehörigkeit auf 'developers' setzen und SGID aktivieren
chgrp developers /srv/shared_project
chmod 2775 /srv/shared_project
3. Das Sticky Bit
Das Sticky Bit (oder Save Text Attribute) wird fast ausschließlich für freigegebene Verzeichnisse verwendet, um das Löschen von Dateien zu steuern.
Wenn das Sticky Bit für ein Verzeichnis gesetzt ist, können nur der Eigentümer einer Datei innerhalb dieses Verzeichnisses oder der Root-Benutzer diese Datei löschen oder umbenennen, selbst wenn das Verzeichnis selbst Schreibzugriff für 'andere' (o+w) erlaubt.
Praktischer Anwendungsfall: Öffentliche freigegebene Verzeichnisse wie /tmp oder Abteilungs-Upload-Ordner, in denen Benutzer nur die von ihnen erstellten Dateien verwalten können sollen.
Beispiel: Das Verzeichnis /tmp
Das Verzeichnis /tmp hat oft Berechtigungen wie 1777. Die 1 zeigt an, dass das Sticky Bit aktiv ist.
ls -ld /tmp
# Ausgabebeispiel: drwxrwxrwt 15 root root 4096 Mar 10 11:30 /tmp
Das t am Ende bestätigt, dass das Sticky Bit gesetzt ist. Ohne es könnte jeder Benutzer Dateien löschen, die von anderen Benutzern in /tmp erstellt wurden.
Das Sticky Bit setzen: Verwenden Sie den Oktalwert 1 kombiniert mit Standardberechtigungen (z. B. wird 777 zu 1777):
chmod 1777 /var/public_uploads
Umfassende Verwaltung: Kombination von Sonderrechten
Sonderrechte werden oft kombiniert. Die vierte führende Ziffer ist die Summe der gewünschten Spezial-Bits (4+2+1 = 7).
| Gewünschte Berechtigungen | Oktalwert |
|---|---|
Standard rwxr-xr-x (755) |
755 |
SUID + rwxr-xr-x |
4755 |
SGID + rwxr-xr-x |
2755 |
Sticky Bit + rwxrwxrwx |
1777 |
SUID + SGID + Sticky Bit + rwx (Selten notwendig) |
7777 |
Beispiel für die Kombination von SGID und Sticky Bit für freigegebene Ordner:
Um ein sicheres, freigegebenes Kollaborationsverzeichnis zu erstellen, in dem alle Benutzer Teil der Gruppe 'team' sind, neue Dateien die Gruppe 'team' erben und Benutzer die Dateien anderer Benutzer nicht löschen können:
- Gruppenzugehörigkeit setzen:
chgrp team /data/projectX - SGID (2) + Standard
rwx(7) + Sticky Bit (1) anwenden $\rightarrow 2+1 = 3$ für die Spezial-Bits.- Unter Verwendung der expliziten Summe: SGID (2) + Sticky Bit (1) = 3. Standardberechtigungen
775. - Gesamtbefehl:
chmod 3775 /data/projectX
- Unter Verwendung der expliziten Summe: SGID (2) + Sticky Bit (1) = 3. Standardberechtigungen
Bei der Anzeige: drwxrwxrw t (oder drwxrwsrw t, wenn das Gruppen-Bit auch für die Ausführung verwendet wurde).
Best Practices für die Sicherheit von Sonderrechten
Aufgrund der erweiterten Privilegien, die SUID und SGID gewähren, müssen sie mit äußerster Vorsicht verwaltet werden.
- SUID-Umfang begrenzen: Setzen Sie SUID nur für kompilierte binäre ausführbare Dateien, die für den Standardbetrieb notwendig sind (wie
passwd,ping). Wenden Sie SUID niemals auf interpretierte Skripte (Shell, Python, Perl) an, es sei denn, sie sind in ein sicheres Wrapper-Executable verpackt, das die Eingabe validiert. - Regelmäßiges Auditing: Scannen Sie das Dateisystem regelmäßig mit dem
find-Befehl nach ungewöhnlichen SUID/SGID-Dateien:
bash # Alle Dateien mit gesetztem SUID finden find / -perm /4000 2>/dev/null # Alle Dateien mit gesetztem SGID finden find / -perm /2000 2>/dev/null - SGID für Gruppenkonsistenz verwenden: Bevorzugen Sie SGID gegenüber der manuellen Verwaltung der Gruppenzugehörigkeit von Dateien in freigegebenen Datenstrukturen; es automatisiert die Gruppenvererbung.
- Sticky Bit für öffentlich beschreibbare Bereiche: Das Sticky Bit ist unerlässlich für jedes Verzeichnis, das für die allgemeine Benutzung vorgesehen ist und in dem das Löschen durch Nicht-Eigentümer eingeschränkt werden muss (z. B.
/tmp,/var/tmp).
Durch den vorsichtigen Einsatz von SUID für erforderliche erweiterte Aufgaben, SGID für konsistentes Gruppenmanagement und das Sticky Bit für die Integrität freigegebener Verzeichnisse können Administratoren eine hochfunktionale und dennoch robust gesicherte Linux-Dateisystemumgebung aufbauen.