Fatmawati Achmad Zaenuri/Shutterstock
SUID, SGID und Sticky Bits sind leistungsstarke Sonderberechtigungen, die Sie für ausführbare Dateien und Verzeichnisse unter Linux festlegen können. Wir werden die Vorteile – und potenzielle Fallstricke – ihrer Verwendung teilen.
Sie sind bereits im Einsatz
Die Integration von Sicherheit in ein Mehrbenutzer-Betriebssystem bringt mehrere Probleme mit sich. Nehmen Sie zum Beispiel das (scheinbar) grundlegende Konzept von Passwörtern. Sie müssen alle gespeichert werden, damit das System jedes Mal, wenn sich jemand anmeldet, das von ihm eingegebene Passwort mit der gespeicherten Kopie vergleichen kann. Da Passwörter die Schlüssel zum Königreich sind, müssen sie natürlich geschützt werden.
Unter Linux sind gespeicherte Passwörter auf zwei Arten geschützt: Sie sind verschlüsselt und nur jemand mit root
Berechtigungen können auf die Datei zugreifen, die die Kennwörter enthält. Das mag gut klingen, stellt aber eine Zwickmühle dar: Wenn nur Menschen mit root
Berechtigungen können auf gespeicherte Passwörter zugreifen. Wie können diejenigen, die diesen Zugriff nicht haben, ihre Passwörter ändern?
Erhöhen Ihres Status
Normalerweise werden Linux-Befehle und -Programme mit denselben Berechtigungen ausgeführt wie die Person, die das Programm startet. Wann root
läuft die passwd
Befehl ein Passwort ändern, es läuft mit root
‘s Berechtigungen. Das bedeutet die passwd
Befehl kann frei auf die gespeicherten Passwörter im /etc/shadow
Datei.
Ideal wäre ein Schema, bei dem jeder auf dem System die passwd
Programm, aber haben die passwd
Programm behalten root
‘s erhöhte Privilegien. Dies würde es jedem ermöglichen, sein eigenes Passwort zu ändern.
Das obige Szenario ist genau das, was das Set User ID-Bit (SUID
) tut. Es führt Programme und Befehle aus mit den Berechtigungen des Dateibesitzers und nicht mit den Berechtigungen der Person, die das Programm startet.
Sie erhöhen den Status des Programms
Es gibt jedoch noch eine andere Zwickmühle. Die Person muss daran gehindert werden, sich in das Passwort einer anderen Person einzumischen. Linux enthält die SUID
Schema, das es ermöglicht, Anwendungen mit einer Reihe von vorübergehend geliehenen Berechtigungen auszuführen – aber das ist nur die Hälfte der Sicherheitsgeschichte.
Der Kontrollmechanismus, der verhindert, dass jemand mit dem Passwort einer anderen Person arbeitet, ist in der passwd
Programm, nicht das Betriebssystem und das SUID-Schema.
Programme, die mit erhöhten Rechten ausgeführt werden, können Sicherheitsrisiken darstellen, wenn sie nicht mit einer „Sicherheit durch Design“-Mentalität erstellt werden. Das heißt, Sicherheit ist das erste, was Sie berücksichtigen, und dann bauen Sie darauf auf. Schreiben Sie Ihr Programm nicht und versuchen Sie es anschließend mit einem Sicherheitsmantel zu versehen.
Der größte Vorteil von Open-Source-Software ist Sie können sich den Quellcode selbst ansehen oder beziehen Sie sich auf vertrauenswürdige Peer-Reviews. Im Quellcode für die passwd
Programm gibt es Prüfungen, damit Sie sehen können, ob die Person, die das Programm ausführt, root
. Andere Fähigkeiten sind erlaubt, wenn jemand es ist root
(oder jemand benutzt sudo
).
Dies ist der Code, der erkennt, ob jemand ist root
.

Das Folgende ist ein Beispiel, in dem dies berücksichtigt wird. weil root
jedes Passwort ändern kann, muss sich das Programm nicht mit den Prüfungen herumschlagen, die es normalerweise durchführt, um zu sehen, welche Passwörter die Person ändern darf. So für root
, es überspringt diese Prüfungen und beendet die Prüffunktion.

Mit den grundlegenden Linux-Befehlen und -Dienstprogrammen können Sie sicher sein, dass sie mit Sicherheit ausgestattet sind und der Code viele Male überprüft wurde. Natürlich drohen immer noch unbekannte Exploits. Patches oder Updates erscheinen jedoch schnell, um neu identifizierten Schwachstellen zu begegnen.
Es handelt sich um Software von Drittanbietern – insbesondere solche, die nicht Open Source sind – bei der Verwendung müssen Sie äußerst vorsichtig sein SUID
mit. Wir sagen nicht, dass Sie es nicht tun sollten, aber wenn Sie dies tun, möchten Sie sicherstellen, dass Ihr System keinen Risiken ausgesetzt wird. Sie möchten nicht die Privilegien eines Programms erhöhen, das sich selbst und die Person, die es ausführt, nicht korrekt selbst verwaltet.
Linux-Befehle, die SUID verwenden
Im Folgenden sind einige der Linux-Befehle aufgeführt, die das SUID-Bit verwenden, um dem Befehl erhöhte Berechtigungen zu erteilen, wenn er von einem normalen Benutzer ausgeführt wird:
ls -l /bin/su
ls -l /bin/ping
ls -l /bin/mount
ls -l /bin/umount
ls -l /usr/bin/passwd

Beachten Sie, dass die Dateinamen rot hervorgehoben sind, was anzeigt, dass das SUID-Bit gesetzt ist.
Die Berechtigungen für eine Datei oder ein Verzeichnis werden normalerweise durch drei Gruppen von drei Zeichen dargestellt: rwx. Diese stehen für Lesen, Schreiben und Ausführen. Wenn die Briefe vorhanden sind, wurde diese Erlaubnis erteilt. Wenn ein Bindestrich (-
) anstelle eines Buchstabens vorhanden ist, wurde diese Erlaubnis jedoch nicht erteilt.
Es gibt drei Gruppen dieser Berechtigungen (von links nach rechts): die für den Eigentümer der Datei, für Mitglieder der Dateigruppe und für andere. Wenn der SUID
Bit für eine Datei gesetzt ist, steht ein „s“ für die Ausführungsberechtigung des Eigentümers.
Wenn die SUID
Bit auf einer Datei gesetzt ist, die keine ausführbaren Fähigkeiten hat, ein großes „S“ zeigt dies an.
Wir schauen uns ein Beispiel an. Normaler Benutzer dave
Typen die passwd
Befehl:
passwd

Das passwd
Eingabeaufforderungen dave
für sein neues Passwort. Wir können die nutzen ps
Befehl um die Details laufender Prozesse zu sehen.
Wir werden verwenden ps
mit grep
in einem anderen Terminalfenster und suche die passwd
Prozess. Wir werden auch die verwenden -e
(jeder Prozess) und -f
(Vollformat-)Optionen mit ps
.
Wir geben folgenden Befehl ein:
ps -e -f | grep passwd

Es werden zwei Zeilen gemeldet, die zweite davon ist die grep
Prozess nach Befehlen mit der Zeichenfolge „passwd“ suchen. Es ist jedoch die erste Zeile, die uns interessiert, denn die ist die für die passwd
Prozess dave
gestartet.
Wir können das sehen passwd
Der Prozess läuft genauso ab, wie wenn root
hatte es ins Leben gerufen.
Setzen des SUID-Bits
Es ist einfach, die zu ändern SUID
bisschen mit chmod
. Das u+s
symbolischer Modus setzt die SUID
bisschen und die u-s
symbolischer Modus löscht die SUID
bisschen.
Um einige der Konzepte des SUID-Bits zu veranschaulichen, haben wir ein kleines Programm namens . erstellt htg
. Es befindet sich im Stammverzeichnis des dave
Benutzer, und es hat nicht die SUID
Bit gesetzt. Wenn es ausgeführt wird, zeigt es die echten und effektiven Benutzer-IDs (UID).
Die reale UID gehört der Person, die das Programm gestartet hat. Die effektive ID ist das Konto, mit dem sich das Programm so verhält, als ob es gestartet wurde.
Wir geben folgendes ein:
ls -lh htg
./htg

Wenn wir die lokale Kopie des Programms ausführen, sehen wir, dass die echte und die effektive ID beide auf gesetzt sind dave
. Es verhält sich also so, wie es ein normales Programm sollte.
Kopieren wir es in die /usr/local/bin
Verzeichnis, damit andere es verwenden können.
Wir geben Folgendes ein und verwenden chmod
die einstellen SUID
bit, und überprüfen Sie dann, ob es gesetzt wurde:
sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

Das Programm wird also kopiert und das SUID-Bit wird gesetzt. Wir werden es noch einmal ausführen, aber diesmal führen wir die Kopie im /usr/local/bin
Mappe:
htg

Wenngleich dave
das Programm gestartet wurde, wird die effektive ID auf die root
Nutzer. Also, wenn mary
das Programm startet, passiert dasselbe, wie unten gezeigt:
htg

Die wahre ID ist mary
, und die effektive ID ist root
. Das Programm wird mit den Berechtigungen des Root-Benutzers ausgeführt.
Das SGID-Bit
Die eingestellte Gruppen-ID (SGID
) Bit ist dem sehr ähnlich SUID
bisschen. Wenn der SGID
Bit auf einer ausführbaren Datei gesetzt ist, wird die effektive Gruppe auf die Gruppe der Datei gesetzt. Der Prozess wird mit den Berechtigungen der Mitglieder der Dateigruppe ausgeführt und nicht mit den Berechtigungen der Person, die ihn gestartet hat.
Wir haben unsere optimiert htg
Programm, damit es auch die effektive Gruppe anzeigt. Wir ändern die Gruppe der htg
Programm zum Benutzer mary
‘s Standardgruppe, mary
. Wir werden auch die verwenden u-s
und g+s
symbolische Modi mit chown
um die zu entfernen SUID
Bit und setze die SGID
.
Dazu geben wir Folgendes ein:
sudo chown root:mary /usr/local/bin/htg
sudo chmod u-s,g+s /usr/local/bin/htg
ls -lh /usr/local/bin/htg

Du kannst das … sehen SGID
Bit gekennzeichnet durch das „s“ in den Gruppenberechtigungen. Beachten Sie außerdem, dass die Gruppe auf eingestellt ist mary
und der Dateiname ist jetzt gelb markiert.
Bevor wir das Programm ausführen, legen wir fest, welche Gruppen dave
und mary
gehören. Wir werden die verwenden id
Befehl mit dem -G
(Gruppen) Option, um alle Gruppen-IDs auszudrucken. Dann führen wir die htg
Programm als dave
.
Wir geben die folgenden Befehle ein:
id -G dave
id -G mary
htg

Die ID der Standardgruppe für mary
ist 1001, und die effektive Gruppe der htg
Programm ist 1001. Also, obwohl es gestartet wurde von dave
, es läuft mit den Berechtigungen der Mitglieder im mary
Gruppe. Es ist das gleiche wie wenn dave
hatte sich dem angeschlossen mary
Gruppe.
Wenden wir das an SGID
Bit in ein Verzeichnis. Zuerst erstellen wir ein Verzeichnis namens „work“ und ändern dann seine Gruppe in „geek“. Wir setzen dann die SGID
Bit im Verzeichnis.
Wenn wir verwenden ls
Um die Einstellungen des Verzeichnisses zu überprüfen, verwenden wir auch die -d
(Verzeichnis) Option, damit wir die Details des Verzeichnisses sehen, nicht seinen Inhalt.
Wir geben die folgenden Befehle ein:
sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work

Das SGID
Bit und „Geek“-Gruppe sind gesetzt. Diese wirken sich auf alle Elemente aus, die innerhalb der . erstellt wurden work
Verzeichnis.
Wir geben Folgendes ein, um die einzugeben work
Verzeichnis, erstellen Sie ein Verzeichnis namens „demo“ und überprüfen Sie seine Eigenschaften:
cd work
mkdir demo
ls -lh -d demo

Das SGID
bit und „geek“-Gruppe werden automatisch auf das „demo“-Verzeichnis angewendet.
Geben wir Folgendes ein, um eine Datei mit dem zu erstellen touch
Befehl und überprüfen Sie seine Eigenschaften:
touch useful.sh
ls -lh useful.sh

Die Gruppe der neuen Datei wird automatisch auf „Geek“ gesetzt.
Das klebrige Bit
Der Sticky Bit hat seinen Namen von seinem historischen Zweck. Wenn es für eine ausführbare Datei festgelegt ist, wird dem Betriebssystem angezeigt, dass die Textteile der ausführbaren Datei im Swap gehalten werden sollen, um ihre Wiederverwendung zu beschleunigen. Unter Linux wirkt sich das Sticky-Bit nur auf ein Verzeichnis aus – es wäre nicht sinnvoll, es auf eine Datei zu setzen.
Wenn Sie das Sticky-Bit für ein Verzeichnis festlegen, können Benutzer nur Dateien löschen, die ihnen innerhalb dieses Verzeichnisses gehören. Sie können keine Dateien löschen, die einer anderen Person gehören, unabhängig davon, welche Kombination von Dateiberechtigungen für die Dateien festgelegt ist.
Auf diese Weise können Sie ein Verzeichnis erstellen, das jeder – und die von ihm gestarteten Prozesse – als gemeinsam genutzten Dateispeicher verwenden kann. Die Dateien sind geschützt, da wiederum niemand die Dateien anderer Personen löschen kann.
Erstellen wir ein Verzeichnis namens „shared“. Wir werden die verwenden o+t
symbolischer Modus mit chmod
um das Sticky-Bit in diesem Verzeichnis zu setzen. Wir werden uns dann die Berechtigungen für dieses Verzeichnis sowie die /tmp
und /var/tmp
Verzeichnisse.
Wir geben die folgenden Befehle ein:
mkdir shared
sudo chmod o+t shared
ls -lh -d shared
ls -lh -d /tmp
ls -lh -d /var/tmp

Wenn das Sticky-Bit gesetzt ist, wird das ausführbare Bit des „anderen“ Satzes von Dateiberechtigungen auf „t“ gesetzt. Der Dateiname wird ebenfalls blau hervorgehoben.
Das /tmp
und /var/tmp
Ordner sind zwei Beispiele für Verzeichnisse, in denen alle Dateiberechtigungen für den Besitzer, die Gruppe und andere festgelegt sind (deshalb sind sie grün hervorgehoben). Sie werden als freigegebene Speicherorte für temporäre Dateien verwendet.
Mit diesen Berechtigungen sollte jeder theoretisch in der Lage sein, alles zu tun. Das Sticky-Bit überschreibt sie jedoch, und niemand kann eine Datei löschen, die ihm nicht gehört.
Erinnerungen
Im Folgenden finden Sie eine kurze Checkliste für das, was wir oben behandelt haben, um später darauf zurückgreifen zu können:
SUID
funktioniert nur bei Dateien.
- Ihr könnt euch bewerben
SGID
zu Verzeichnissen und Dateien.
- Sie können das Sticky-Bit nur auf Verzeichnisse anwenden.
- Wenn die „
s
“, “g
«, oder «t
”-Anzeigen erscheinen in Großbuchstaben, das ausführbare Bit (x
) ist nicht eingestellt.