So verwenden Sie spezielle Berechtigungen: die Bits setuid, setgid und sticky
Objektiv
Kennenlernen, wie spezielle Berechtigungen funktionieren, wie man sie identifiziert und setzt.
Anforderungen
- Kenntnisse des Standard-Unix/Linux-Berechtigungssystems
Schwierigkeit
LEICHT
Konventionen
- # – erfordert, dass bestimmte Linux-Befehle mit Root-Rechten ausgeführt werden, entweder
direkt als Root-Benutzer oder mit dem Befehlsudo - $ – erfordert, dass bestimmte Linux-Befehle als normaler, nicht privilegierter Benutzer ausgeführt werden
Einleitung
Normalerweise basiert der Besitz von Dateien und Verzeichnissen auf einem Unix-ähnlichen Betriebssystem auf der Standard-UID (Benutzer-ID) und Gid (Gruppen-ID) des Benutzers, der sie erstellt hat. Das Gleiche passiert, wenn ein Prozess gestartet wird: Er läuft mit der effektiven Benutzer-ID und Gruppen-ID des Benutzers, der ihn gestartet hat, und mit den entsprechenden Berechtigungen. Dieses Verhalten kann mithilfe spezieller Berechtigungen geändert werden.
Das setuid-Bit
Wenn das setuid-Bit verwendet wird, wird das oben beschriebene Verhalten so geändert, dass eine ausführbare Datei beim Start nicht mit den Rechten des Benutzers ausgeführt wird, der sie gestartet hat, sondern mit denen des Dateibesitzers. Wenn also zum Beispiel auf eine ausführbare Datei das setuid-Bit gesetzt ist und sie root gehört, wird sie, wenn sie von einem normalen Benutzer gestartet wird, mit Root-Rechten ausgeführt. Es sollte klar sein, warum dies ein potenzielles Sicherheitsrisiko darstellt, wenn es nicht richtig verwendet wird.
Ein Beispiel für eine ausführbare Datei mit dem gesetzten setuid-Berechtigungssatz ist passwd, das Dienstprogramm, mit dem wir unser Login-Passwort ändern können. Wir können dies mit dem Befehl ls überprüfen:
ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27768 Feb 11 2017 /bin/passwd
Wie identifiziere ich das setuid-Bit? Wie Sie sicherlich bemerkt haben, wird das setuid-Bit durch ein s anstelle des x des ausführbaren Bits dargestellt. Das s impliziert, dass das ausführbare Bit gesetzt ist, sonst würden Sie ein großes S sehen. Dies geschieht, wenn die setuid- oder setgid-Bits gesetzt sind, das ausführbare Bit jedoch nicht, was dem Benutzer eine Inkonsistenz zeigt: Die setuid- und setgit-Bits haben keine Wirkung, wenn das ausführbare Bit nicht gesetzt ist. Das setuid-Bit hat keine Auswirkungen auf Verzeichnisse.
Das Setgid-Bit
Im Gegensatz zum setuid-Bit wirkt sich das setgid-Bit sowohl auf Dateien als auch auf Verzeichnisse aus. Im ersten Fall läuft die Datei, für die das setgid-Bit gesetzt ist, bei der Ausführung nicht mit den Rechten der Gruppe des Benutzers, der sie gestartet hat, sondern mit denen der Gruppe, der die Datei gehört: Mit anderen Worten, die Gruppen-ID des Prozesses ist die gleiche wie die der Datei.
Wenn es stattdessen in einem Verzeichnis verwendet wird, ändert das setgid-Bit das Standardverhalten dahingehend, dass die Gruppe der Dateien, die in diesem Verzeichnis erstellt werden, nicht die des Benutzers ist, der sie erstellt hat, sondern die des übergeordneten Verzeichnisses selbst. Dies wird oft verwendet, um die gemeinsame Nutzung von Dateien zu erleichtern (Dateien können von allen Benutzern geändert werden, die Teil dieser Gruppe sind). Genau wie die setuid kann auch das setgid-Bit leicht entdeckt werden (in diesem Fall in einem Testverzeichnis):
ls -ld test
drwxrwsr-x. 2 egdoc egdoc 4096 Nov 1 17:25 test
Diesmal ist das s anstelle des ausführbaren Bits auf dem Gruppensektor vorhanden.
Der klebrige Teil
Das Sticky Bit funktioniert auf eine andere Weise: Während es keine Auswirkungen auf Dateien hat, können alle Dateien in diesem Verzeichnis, wenn es in einem Verzeichnis verwendet wird, nur von ihren Besitzern geändert werden. Ein typischer Fall, in dem es verwendet wird, betrifft das Verzeichnis /tmp. Typischerweise ist dieses Verzeichnis für alle Benutzer auf dem System beschreibbar, so dass um es einem Benutzer unmöglich zu machen, die Dateien eines anderen Benutzers zu löschen, das Sticky-Bit gesetzt wird:
ls -ld /tmp
drwxrwxrwt. 14 root root 300 Nov 1 16:48 /tmp
In diesem Fall verfügen der Besitzer, die Gruppe und alle anderen Benutzer über vollständige Berechtigungen für das Verzeichnis (Lesen, Schreiben und Ausführen). Das Sticky-Bit ist an einem t zu erkennen, das dort angegeben wird, wo normalerweise das ausführbare x-Bit angezeigt wird, im Abschnitt "Andere". Auch hier impliziert ein kleines t, dass das ausführbare Bit ebenfalls vorhanden ist, andernfalls würden Sie ein großes T sehen.
So setzen Sie spezielle Bits
Wie normale Berechtigungen können die speziellen Bits mit dem Befehl chmod im numerischen oder im ugo/rwx-Format zugewiesen werden. Im ersten Fall werden die Bits setuid, setgid und sticky jeweils durch einen Wert von 4, 2 und 1 dargestellt. Wenn wir also zum Beispiel das setgid-Bit auf ein Verzeichnis setzen wollen, würden wir Folgendes ausführen:
chmod 2775 testMit diesem Befehl setzen wir das setgid-Bit auf das Verzeichnis (gekennzeichnet durch die erste der vier Zahlen) und geben dem Besitzer und dem Benutzer, die Mitglieder der Gruppe sind, zu der das Verzeichnis gehört, volle Privilegien sowie Lese- und Ausführungsberechtigungen für alle anderen Benutzer (denken Sie daran, dass das Execute-Bit in einem Verzeichnis bedeutet, dass ein Benutzer in der Lage ist, mit cd in das Verzeichnis zu gelangen oder ls zu verwenden, um listen Sie ihren Inhalt auf).
Die andere Möglichkeit, die speziellen Berechtigungsbits zu setzen, besteht darin, die ugo/rwx-Syntax zu verwenden:
chmod g+s testUm das setuid-Bit auf eine Datei anzuwenden, hätten wir Folgendes ausgeführt:
chmod u+s file
Beim Auftragen des klebrigen Stücks:
chmod o+t testDie Verwendung spezieller Berechtigungen kann in einigen Situationen sehr nützlich sein, aber wenn sie nicht richtig verwendet werden, können sie zu schwerwiegenden Schwachstellen führen, also überlegen Sie es sich zweimal, bevor Sie sie verwenden.