• Dave McKay

    @TheGurkha

  • February 26, 2020, 8:00 Uhr EDT
Fatmawati Achmad Zaenuri/

SUID, SGID und Sticky Bits sind mächtige Spezialberechtigungen, die Sie für ausführbare Dateien und Verzeichnisse unter Linux festlegen können. Wir erläutern die Vorteile – und potenziellen Fallstricke – ihrer Verwendung.

Sie werden bereits verwendet

Die Integration von Sicherheit in ein Mehrbenutzer-Betriebssystem stellt uns vor einige Probleme. Nehmen Sie zum Beispiel das (scheinbar) einfache Konzept der Passwörter. Sie müssen alle gespeichert werden, damit das System bei jeder Anmeldung das eingegebene Kennwort 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 rootRechten kann auf die Datei zugreifen, die die Passwörter enthält. Das mag gut klingen, aber es stellt ein Dilemma dar: Wenn nur Personen mit root-Rechten auf gespeicherte Passwörter zugreifen können, wie können dann diejenigen, die diese Rechte nicht haben, ihre Passwörter ändern?

Erhöhen Sie Ihren Status

Normalerweise werden Linux-Befehle und -Programme mit denselben Berechtigungen ausgeführt wie die Person, die das Programm gestartet hat. Wenn root den Befehl passwd ausführt, um ein Passwort zu ändern, wird er mit den Berechtigungen von root ausgeführt. Das bedeutet, dass der Befehl passwd ungehindert auf die gespeicherten Kennwörter in der Datei /etc/shadow zugreifen kann.

Werbung

Ideal wäre ein Schema, bei dem jeder im System das Programm passwd starten könnte, das Programm passwd aber die erhöhten Rechte von root behalten würde. Damit wäre jeder in der Lage, sein eigenes Kennwort zu ändern.

Das oben beschriebene Szenario ist genau das, was das Bit „Benutzer-ID festlegen“ (SUID) bewirkt. Es führt Programme und Befehle mit den Rechten des Dateibesitzers aus und nicht mit den Rechten der Person, die das Programm startet.

Sie erhöhen den Status des Programms

Es gibt jedoch noch ein weiteres Dilemma. Die Person muss daran gehindert werden, sich in das Passwort eines anderen einzumischen. Linux enthält das SUID-Schema, das es ermöglicht, Anwendungen mit einer Reihe von vorübergehend ausgeliehenen Berechtigungen auszuführen – aber das ist nur die Hälfte der Sicherheitsgeschichte.

Werbung

Der Kontrollmechanismus, der verhindert, dass jemand mit dem Passwort einer anderen Person arbeitet, ist im passwd-Programm enthalten, nicht im Betriebssystem und dem SUID-Schema.

Programme, die mit erhöhten Berechtigungen laufen, können Sicherheitsrisiken darstellen, wenn sie nicht mit einer „Security by Design“-Mentalität erstellt werden. Das bedeutet, dass die Sicherheit das erste ist, woran man denkt, und dass man dann darauf aufbaut. Schreiben Sie Ihr Programm nicht und versuchen Sie dann, es nachträglich mit einem Sicherheitsmantel zu versehen.

Der größte Vorteil von Open-Source-Software ist, dass Sie sich den Quellcode selbst ansehen oder auf vertrauenswürdige Peer-Reviews zurückgreifen können. Im Quellcode des passwd Programms gibt es Überprüfungen, so dass man sehen kann, ob die Person, die das Programm ausführt, root ist. Wenn jemand root ist (oder jemand, der sudo benutzt), sind unterschiedliche Fähigkeiten erlaubt.

Das ist der Code, der erkennt, ob jemand root ist.

Das Folgende ist ein Beispiel, in dem das berücksichtigt wird. Da root jedes beliebige Kennwort ändern kann, muss sich das Programm nicht mit den Überprüfungen befassen, die es normalerweise durchführt, um festzustellen, welche Kennwörter die Person ändern darf. Für root überspringt es diese Prüfungen und verlässt die Prüffunktion.

Werbung

Bei den wichtigsten Linux-Befehlen und -Hilfsprogrammen kann man sich darauf verlassen, dass sie sicher sind und dass der Code mehrfach überprüft wurde. Natürlich besteht immer die Gefahr, dass noch unbekannte Sicherheitslücken auftreten. Patches oder Updates sind jedoch schnell verfügbar, um neu entdeckte Schwachstellen zu beheben.

Bei Software von Drittanbietern – insbesondere bei solchen, die nicht quelloffen sind – müssen Sie äußerst vorsichtig sein. Wir sagen nicht, dass Sie es nicht tun sollen, aber wenn Sie es tun, sollten Sie sicherstellen, dass Ihr System nicht gefährdet wird. Sie wollen nicht die Privilegien eines Programms erhöhen, das sich selbst und die Person, die es ausführt, nicht korrekt verwaltet.

Linux-Befehle, die SUID verwenden

Nachfolgend sind einige der Linux-Befehle aufgeführt, die das SUID-Bit verwenden, um dem Befehl erhöhte Rechte zu geben, 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 bedeutet, dass das SUID-Bit gesetzt ist.

Werbung

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 Buchstaben vorhanden sind, wurde diese Berechtigung erteilt. Wenn jedoch ein Bindestrich (-) anstelle eines Buchstabens vorhanden ist, wurde diese Berechtigung 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 das SUID-Bit in einer Datei gesetzt ist, steht ein „s“ für die Ausführungsberechtigung des Eigentümers.

Wenn das SUID-Bit in einer Datei gesetzt ist, die keine Ausführungsberechtigung hat, wird dies durch ein großes „S“ angezeigt.

Schauen wir uns ein Beispiel an. Der normale Benutzer dave gibt den Befehl passwd ein:

passwd

Advertisement

Der Befehl passwd fordert dave auf, sein neues Passwort einzugeben. Wir können den Befehl ps verwenden, um die Details der laufenden Prozesse anzuzeigen.

Wir verwenden ps mit grep in einem anderen Terminalfenster und suchen nach dem Prozess passwd. Wir verwenden auch die Optionen -e (jeder Prozess) und -f (Vollformat) mit ps.

Wir geben den folgenden Befehl ein:

ps -e -f | grep passwd

Zwei Zeilen werden gemeldet, von denen die zweite den Prozess grep darstellt, der nach Befehlen mit der Zeichenfolge „passwd“ sucht. Es ist jedoch die erste Zeile, die uns interessiert, denn es ist die des passwd Prozesses, den dave gestartet hat.

Wir können sehen, dass der passwd Prozess genauso läuft, wie er laufen würde, wenn root ihn gestartet hätte.

Setzen des SUID-Bits

Es ist einfach, das SUID Bit mit chmod zu ändern. Der symbolische Modus u+s setzt das SUID-Bit und der symbolische Modus u-s löscht das SUID-Bit.

Werbung

Um einige der Konzepte des SUID-Bits zu veranschaulichen, haben wir ein kleines Programm namens htg erstellt. Es befindet sich im Stammverzeichnis des Benutzers dave und hat das Bit SUID nicht gesetzt. Wenn es ausgeführt wird, zeigt es die echte und die effektive Benutzerkennung (UID) an.

Die echte UID gehört zu der Person, die das Programm gestartet hat.

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 dave gesetzt sind. Es verhält sich also so, wie es ein normales Programm tun sollte.

Werbung

Lassen Sie uns das Programm in das Verzeichnis /usr/local/bin kopieren, damit andere es benutzen können.

Wir geben Folgendes ein, wobei wir chmod verwenden, um das SUID-Bit zu setzen, und überprüfen 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 ist also kopiert, und das SUID-Bit ist gesetzt. Wir führen es noch einmal aus, aber diesmal führen wir die Kopie im Ordner /usr/local/bin aus:

htg

Obwohl dave das Programm gestartet hat, ist die effektive ID auf den Benutzer root gesetzt. Wenn also mary das Programm startet, passiert das Gleiche, wie unten gezeigt:

htg

Werbung

Die echte ID ist mary, und die effektive ID ist root. Das Programm läuft mit den Rechten des Root-Benutzers.

VERWEIST: Verwendung des chmod-Befehls unter Linux

Das SGID-Bit

Das Bit Set Group ID (SGID) ist dem SUID-Bit sehr ähnlich. Wenn das SGID-Bit bei einer ausführbaren Datei gesetzt ist, wird die effektive Gruppe auf die Gruppe der Datei gesetzt. Der Prozess wird mit den Rechten der Mitglieder der Dateigruppe ausgeführt und nicht mit den Rechten der Person, die ihn gestartet hat.

Wir haben unser htg-Programm so angepasst, dass es auch die effektive Gruppe anzeigt. Wir ändern die Gruppe des Programms htg in die Standardgruppe von Benutzer mary, mary. Außerdem verwenden wir die symbolischen Modi u-s und g+s mit chown, um das Bit SUID zu entfernen und das Bit SGID zu setzen.

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

Das Bit SGID wird durch das „s“ in den Gruppenberechtigungen gekennzeichnet. Beachten Sie auch, dass die Gruppe auf mary gesetzt ist und der Dateiname jetzt gelb hervorgehoben ist.

Werbung

Bevor wir das Programm ausführen, müssen wir feststellen, zu welchen Gruppen dave und mary gehören. Wir verwenden den Befehl id mit der Option -G (Gruppen), um alle Gruppen-IDs zu drucken. Dann führen wir das Programm htg als dave aus.

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 des Programms htg ist 1001. Obwohl es also von dave gestartet wurde, wird es mit den Rechten der Mitglieder der Gruppe mary ausgeführt. Es ist dasselbe, als ob dave der Gruppe mary beigetreten wäre.

Lassen Sie uns das SGID-Bit auf ein Verzeichnis anwenden. Zuerst erstellen wir ein Verzeichnis mit dem Namen „work“ und ändern seine Gruppe in „geek“. Dann setzen wir das SGID-Bit auf das Verzeichnis.

Wenn wir ls verwenden, um die Einstellungen des Verzeichnisses zu überprüfen, verwenden wir auch die Option -d (Verzeichnis), 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

Werbung

Das Bit SGID und die Gruppe „geek“ sind gesetzt. Diese wirken sich auf alle Elemente aus, die im Verzeichnis work erstellt werden.

Wir geben Folgendes ein, um das Verzeichnis work zu betreten, ein Verzeichnis mit dem Namen „demo“ zu erstellen und seine Eigenschaften zu überprüfen:

cd work
mkdir demo
ls -lh -d demo

Das Bit SGID und die Gruppe „geek“ werden automatisch auf das Verzeichnis „demo“ angewendet.

Lassen Sie uns Folgendes eingeben, um eine Datei mit dem Befehl touch zu erstellen und ihre Eigenschaften zu überprüfen:

touch useful.sh
ls -lh useful.sh

Werbung

Die Gruppe der neuen Datei wird automatisch auf „geek“ gesetzt.“

VERWEIST: How to Use the chown Command on Linux

The Sticky Bit

Das Sticky Bit hat seinen Namen von seinem historischen Zweck. Wenn es in einer ausführbaren Datei gesetzt ist, signalisiert es dem Betriebssystem, dass die Textteile der ausführbaren Datei im Swap gehalten werden sollen, damit sie schneller wiederverwendet werden können. Unter Linux wirkt sich das Sticky-Bit nur auf ein Verzeichnis aus – es auf eine Datei zu setzen, würde keinen Sinn machen.

Wenn man das Sticky-Bit auf ein Verzeichnis setzt, können Leute nur Dateien löschen, die ihnen innerhalb dieses Verzeichnisses gehören. Dateien, die jemand anderem gehören, können nicht gelöscht werden, unabhängig davon, welche Kombination von Dateiberechtigungen für die Dateien festgelegt ist.

So können Sie ein Verzeichnis erstellen, das jeder – und die von ihm gestarteten Prozesse – als gemeinsamen Dateispeicher verwenden kann. Die Dateien sind geschützt, denn auch hier kann niemand die Dateien eines anderen löschen.

Werbung

Lassen Sie uns ein Verzeichnis mit dem Namen „shared“ erstellen. Wir verwenden den symbolischen Modus o+t mit chmod, um das Sticky-Bit für dieses Verzeichnis zu setzen. Dann sehen wir uns die Berechtigungen für dieses Verzeichnis sowie für die Verzeichnisse /tmp und /var/tmp an.

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 Dateirechten auf „t“ gesetzt. Der Dateiname ist ebenfalls blau hervorgehoben.

Die Ordner /tmp und /var/tmp sind zwei Beispiele für Verzeichnisse, bei denen alle Dateiberechtigungen für den Eigentümer, die Gruppe und andere gesetzt sind (deshalb sind sie grün hervorgehoben). Sie werden als gemeinsame Speicherorte für temporäre Dateien verwendet.

Werbung

Mit diesen Berechtigungen sollte theoretisch jeder alles tun können. Das Sticky-Bit setzt sie jedoch außer Kraft, und niemand kann eine Datei löschen, die ihm nicht gehört.

Erinnerungen

Nachfolgend eine kurze Checkliste dessen, was wir oben behandelt haben, zum späteren Nachschlagen:

  • SUID funktioniert nur bei Dateien.
  • Sie können SGID auf Verzeichnisse und Dateien anwenden.
  • Das Sticky-Bit kann nur auf Verzeichnisse angewendet werden.
  • Wenn die Indikatoren „s„, „g“ oder „t“ in Großbuchstaben erscheinen, wurde das ausführbare Bit (x) nicht gesetzt.
Dave McKay
Dave McKay hat zum ersten Mal mit Computern gearbeitet, als Lochstreifen noch in Mode waren, und seitdem programmiert er ständig. Nach über 30 Jahren in der IT-Branche arbeitet er jetzt hauptberuflich als Technologiejournalist. Im Laufe seiner Karriere arbeitete er als freiberuflicher Programmierer, Manager eines internationalen Software-Entwicklungsteams, Projektmanager für IT-Dienstleistungen und zuletzt als Datenschutzbeauftragter. Dave ist ein Linux-Evangelist und Verfechter von Open Source. Vollständigen Lebenslauf lesen “

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.