close

Setuid

Zur Navigation gehen Zur Suche gehen

Setuid und Setgid sind Unix -Begriffe , Abkürzungen für „Set User ID“ bzw. „Set Group ID“. Setuid, manchmal auch „suid“ genannt , und „setgid“ sind Zugriffsberechtigungen, die Dateien oder Verzeichnissen in einem Unix - basierten Betriebssystem zugewiesen werden können . Sie werden hauptsächlich verwendet, um Systembenutzern das vorübergehende Ausführen von Binärdateien mit erhöhten Rechten zu ermöglichen, um eine bestimmte Aufgabe auszuführen.

Wenn bei einer Datei das „Setuid“-Bit aktiviert ist, wird sie wie folgt mit einem „s“ in einer Liste gekennzeichnet:

-rwsr-xr–x 1 root shadow 27920 ago 15 22:45 /usr/bin/passwd

Diese Eigenschaft ist erforderlich, damit normale Benutzer Aufgaben ausführen können, für die höhere Berechtigungen erforderlich sind, als sie einem normalen Benutzer zur Verfügung stehen. Einige Aufgaben, die erhöhte Berechtigungen erfordern, sind möglicherweise nicht offensichtlich (z. B. der Befehl ping , der Steuerpakete über eine Netzwerkschnittstelle senden und darauf warten muss ).

Setuid in ausführbaren Dateien

Normalerweise ist dieses Bit bei ausführbaren Dateien gesetzt. Wenn einer ausführbaren Binärdatei das Attribut setuid zugewiesen wird, können normale Systembenutzer diese Datei ausführen und vom Benutzer, dem diese Datei gehört (normalerweise root ), Berechtigungen für den erstellten Prozess erhalten . Wenn der Prozess Administratorrechte erhält, kann die Anwendung Aufgaben auf dem System ausführen, zu denen normale Benutzer normalerweise nicht in der Lage wären. Das System hindert den Benutzer, der die ausführbare Datei aufgerufen hat, daran, den neuen Prozess in irgendeiner Weise zu ändern, wie z. B. ptrace, LD_LIBRARY_PATH zu verwenden oder Signale an ihn zu senden (Signale vom Terminal selbst werden akzeptiert).

Beispielsweise wird das setuid-Bit in der Datei /usr/bin/passwd verwendet, damit jeder sein Passwort kontrolliert ändern kann. In der Lage zu sein, dieses Programm auszuführen, ermöglicht es einem Benutzer, in die Passwortdatei (/etc/shadow, nicht zu verwechseln mit /etc/passwd) zu schreiben, ohne jedoch Schreibrechte für die Datei erteilen zu müssen, was eine große Sicherheitslücke darstellen würde.

Obwohl die setuid-Funktion in vielen Fällen sehr nützlich ist, kann sie ein Sicherheitsrisiko darstellen, wenn das setuid-Attribut ausführbaren Programmen zugewiesen wird , die nicht sorgfältig entworfen wurden. Benutzer können Schwachstellen in fehlerhaften Programmen ausnutzen , um dauerhaft erhöhte Berechtigungen zu erlangen, oder unbeabsichtigt einen Trojaner ausführen .

Das setgid-Attribut erlaubt es, gruppenbasierte Berechtigungen für einen Prozess zu ändern, genauso wie setuid es für benutzerbasierte Berechtigungen tut.

Setuid in Verzeichnissen

Das setgid-Flag auf einem Verzeichnis hat eine völlig andere Bedeutung als seine Anwendung auf Dateien. Verzeichnisse mit setgid-Berechtigung erzwingen, dass alle darin erstellten Dateien und Unterverzeichnisse zur Gruppe des Eigentümers des Verzeichnisses gehören und nicht zur Gruppe des Benutzers, der die Datei oder das Unterverzeichnis erstellt.

Das Setuid-Flag hingegen hat keine Auswirkung, wenn es auf ein Verzeichnis angewendet wird. Der Grund dafür ist, dass, wenn Sie den Eigentümer des Verzeichnisses an Objekte weitergeben würden, die in diesem Verzeichnis erstellt wurden, der Benutzer, der dort eine Datei erstellt, sofort seine Eigentümerberechtigungen für die Datei verlieren würde, wodurch er möglicherweise daran gehindert würde, sie jemals wieder zu verwenden oder zu ändern .

Beispiele

Hinzufügen von SUID-Berechtigungen zu einer Beispielbinärdatei (Benutzer)

# chmod u+s /home/user/executable

SUID-Berechtigungen für eine Binärdatei (Benutzer) entfernen

# chmod us /bin/ping

Hinzufügen von GUID-Berechtigungen zu einer Beispielbinärdatei (Gruppe)

# chmod g+s /home/user/executable

GUID-Berechtigungen für eine Beispielbinärdatei (Gruppe) entfernen

# chmod gs /home/user/executable

Anzeigen der Berechtigungen einer Binärdatei mit SUID-Attributen

# ls -al /bin/ping -rwsr 
-xr-x 1 root root 35712  2011-05-03 12 :43 /bin/ping

Finden Sie alle Dateien mit SUID- oder SGID-Berechtigungen

# find / -path /proc -prune -o -type f -perm +6000 -ls

Finden Sie alle Dateien mit Berechtigungen nur SUID

# find / -path /proc -prune -o -type f -perm +4000 -ls

Finden Sie alle Dateien mit Berechtigungen nur SGID

# find / -path /proc -prune -o -type f -perm +2000 -ls

Anwendungsbeispiele

SUID

4711 - Berechtigungen für eine ausführbare Datei, die root gehört .

Ein Benutzer namens so-und-so versucht, die Datei auszuführen. Berechtigungen für die ausführbare Datei werden allen Benutzern mit Ausführungsberechtigung (471 1 ) zugewiesen, sodass Soundso die Datei ausführen kann. Der Eigentümer der Datei ist root und die SUID-Berechtigung ist gesetzt ( 4 711), sodass die Datei als root ausgeführt wird .

Auf diese Weise wird die Datei als root ausgeführt , was bedeutet, dass Soundso andere Dateien ändern kann, was normalerweise nicht möglich ist, ohne Soundso volle Rechte zu gewähren. Dies wird in der Binärdatei verwendet /usr/bin/passwd. Sie müssen die y passwd-Datei ändern, die Benutzerkontoinformationen bzw. Passwort-Hashes speichert, aber diese Dateien können nur von root geändert werden . /etc/passwd/etc/shadow

[ so-und-so @ host ~ ] $   stat -c "%a %U:%G %n" /usr/bin/passwd 
 4701 root:root /usr/bin/passwd

[ so-und-so @ host ~ ] $   passwd
 Passwort für so-und-so ändern.

LEITFADEN

2071 ein Verzeichnis namens „plants“, das „sultan“ als Eigentümergruppe und „root“ als Eigentümerbenutzer hat.

Ein Benutzer namens „so-und-so“ gehört primär zur Gruppe „so-und-so“ und sekundär zur Gruppe „sultan“. „so-und-so“ erstellt ein neues Verzeichnis namens „mango“ innerhalb des Verzeichnisses „plants“. Die Gruppe, der das neue Verzeichnis mit dem Namen „mango“ gehört, erbt „sultano“.

Ohne GUID wäre die Eigentümergruppe "so-und-so" gewesen.

[ so-und-so @ host ~ ] $   gruppiert so
 -und-so so-und -so : so-und-so Sultan

[ so-und-so @ host ~ ] $   stat -c "%a %U:%G %n" ~/pflanzen/
 2770 so-und-so:sultan /home/so-und-so/pflanzen/

[ so-und-so @ host ~ ] $   mkdir ~/plants/mango

[ so-und-so @ host ~ ] $   touch ~/plants/.mango

[ so-und-so @ host ~ ] $   stat -c "%U:%G %n" ~/pflanzen/mango/
 so-und- so:sultan /home/so-und-so/pflanzen/mango/

[ so-und-so @ host ~ ] $   stat -c "%U:%G %n" ~/pflanzen/.mango
 so-und- so:sultan /home/so-und-so/pflanzen/.mango

[ so-und - so @ host ~ ] $   Berührungstest

[ so-und-so @ host ~ ] $   stat -c "%U:%G %n" ~/test
 so-und-so:so-und-so /home/so-und-so/test

Siehe auch