Ausführliche Erklärung der Sonderberechtigungen SUID, SGID und SBIT in Linux

Ausführliche Erklärung der Sonderberechtigungen SUID, SGID und SBIT in Linux

Vorwort

Für die Berechtigungen von Dateien oder Verzeichnissen in Linux sollten Sie alle die normalen RWX-Berechtigungen kennen (weitere Informationen zu RWX-Berechtigungen in Linux finden Sie in meinem Blog-Beitrag http://www.cnblogs.com/javaee6/p/3994750.html). Schauen wir uns zunächst an, was die folgenden beiden Berechtigungen sind

Es ist sehr seltsam, dass die Berechtigungen des Verzeichnisses /tmp und der Datei passwd so seltsam sind. Warum gibt es s- und t-Berechtigungen? Sie werden es verstehen, nachdem Sie den folgenden Inhalt gelesen haben.

setuid und setgid sind Abkürzungen für „Setzen der UID-ID bei Ausführung“ bzw. „Setzen der Gruppen-ID bei Ausführung“. Wir werden sie oft noch einmal als suid und sgid abkürzen. Es handelt sich dabei um Berechtigungsflags, die den Dateizugriff steuern und es Benutzern ermöglichen, ausführbare Dateien mit den Berechtigungen des Besitzers bzw. der Besitzergruppe der ausführbaren Datei auszuführen.

Hinweis: Die Demonstrationsumgebung dieses Artikels ist Ubuntu 16.04.

SUID

Unter Linux werden die Passwörter aller Konten in der Datei /etc/shadow aufgezeichnet und nur root kann diese Datei lesen und schreiben:

Wenn ein anderer allgemeiner Kontotester sein Passwort ändern muss, muss er auf die Datei /etc/shadow zugreifen. Auf die Datei /etc/shadow kann jedoch nur root zugreifen. Wie funktioniert das? Tatsächlich kann der Testerbenutzer das Kennwort in der Datei /etc/shadow über die SUID-Funktion ändern. Schauen wir uns die Berechtigungsinformationen der Programmdatei passwd an:

Die Berechtigungsinformationen im roten Feld im obigen Bild sind etwas seltsam. Die Eigentümerinformationen lauten rws statt rwx. Wenn s in der x-Berechtigung des Dateieigentümers erscheint, wird es SETUID BITS oder SETUID genannt und hat folgende Eigenschaften:

  • SUID-Berechtigungen gelten nur für binäre ausführbare Dateien
  • Wenn der Executor über die Berechtigung x für die ausführbare Binärdatei verfügt, besitzt der Executor die Berechtigungen des Eigentümers der Datei.
  • Diese Berechtigung ist nur während der Ausführung der binären ausführbaren Datei gültig

Als Nächstes sehen wir uns an, wie der Testbenutzer die SUID-Berechtigung zum Ändern des Kennworts verwendet:

  • Der Benutzer tester hat Ausführungsberechtigung für das Programm /usr/bin/passwd, sodass er Folgendes ausführen kann:
  • passwd-Programm Der Besitzer des passwd-Programms ist root
  • Der Tester-Benutzer erhält vorübergehend Root-Rechte, wenn er das Programm „passwd“ ausführt.
  • Daher kann der Testerbenutzer die Datei /etc/shadow während der Ausführung des Passwd-Programms ändern.

Wenn der Testerbenutzer jedoch den Befehl cat ausführt, um die Datei /etc/shadow zu lesen, funktioniert dies nicht:

Der Grund ist klar. Der Tester-Benutzer hat keine Berechtigung, die Datei /etc/shadow zu lesen, und das Cat-Programm ist nicht auf SUID eingestellt. Wir können diese beiden Situationen anhand der folgenden Abbildung verstehen:

Wenn Sie möchten, dass jeder Benutzer den Inhalt der Datei /etc/shadow über den Befehl cat lesen kann, ist das auch ganz einfach. Legen Sie einfach die SUID-Berechtigung dafür fest:

$ sudo chmod 4755 /bin/cat 

Jetzt hat cat SUID-Berechtigungen. Mal sehen, ob wir den Inhalt von /etc/shadow caten können. Da dies sehr unsicher ist, entfernen Sie schnell die SUID-Berechtigung von cat mit dem folgenden Befehl:

$ sudo chmod 755 /bin/cat

SGID

Wenn das S-Flag in der X-Berechtigung für eine Gruppe erscheint, wird es als SGID bezeichnet. Die Eigenschaften von SGID sind die gleichen wie die von SUID. Wir demonstrieren seine Verwendung anhand des Programms /usr/bin/mlocate. Das Programm mlocate führt schnelle Dateisuchen durch, indem es die Datenbankdatei /var/lib/mlocate/mlocate.db abfragt. Die Berechtigungen des mlocate-Programms werden in der folgenden Abbildung dargestellt:

Offensichtlich ist der SGID-Berechtigungssatz vorhanden. Nachfolgend finden Sie die Berechtigungsinformationen der Datenbankdatei /var/lib/mlocate/mlocate.db: Offensichtlich ist sie mit SGID-Berechtigung festgelegt. Nachfolgend finden Sie die Berechtigungsinformationen der Datenbankdatei /var/lib/mlocate/mlocate.db:

Wenn der normale Benutzer Tester den Befehl mlocate ausführt, erhält der Tester die Ausführungsberechtigung der Benutzergruppe mlocate. Da die Benutzergruppe mlocate die Leseberechtigung für mlocate.db hat, kann der Tester mlocate.db lesen. Der Ausführungsprozess des Programms ist in der folgenden Abbildung dargestellt:

Zusätzlich zu Binärprogrammen kann SGID auch auf Verzeichnisse angewendet werden. Wenn für ein Verzeichnis SGID-Berechtigungen festgelegt sind, verfügt es über die folgenden Funktionen:

  • Wenn ein Benutzer über die Berechtigungen r und x für dieses Verzeichnis verfügt, kann er das Verzeichnis
  • Die effektive Benutzergruppe des Benutzers in diesem Verzeichnis wird zur Benutzergruppe dieses Verzeichnisses
  • Wenn der Benutzer in diesem Verzeichnis über die Berechtigung „w“ verfügt, ist die Benutzergruppe der vom Benutzer erstellten neuen Datei dieselbe wie die Benutzergruppe des Verzeichnisses.

Schauen wir uns ein Beispiel an. Wir erstellen ein Testdir-Verzeichnis und legen dessen Berechtigungen wie folgt fest:

Derzeit ist Nick der Besitzer des Verzeichnisses Testdir und seine Gruppe ist Tester.

Erstellen Sie zunächst eine Datei mit dem Namen „Nickfile“:

Die Berechtigungen für diese Datei scheinen nichts Besonderes zu sein. Legen Sie dann die SGID-Berechtigungen für das Testdir-Verzeichnis fest:

$ sudo chmod 2775 Testverzeichnis 

Erstellen Sie dann eine Datei nickfile2:

Die Gruppe, zu der die neu erstellte Datei gehört, ist Tester!

Zusammenfassend lässt sich sagen, dass, wenn SGID auf eine normale Datei einwirkt, ähnlich wie SUID, der Benutzer beim Ausführen der Datei die Berechtigungen der Gruppe erhält, zu der die Datei gehört. Wenn SGID auf Verzeichnisse angewendet wird, hat es eine sehr wichtige Bedeutung. Wenn ein Benutzer Schreib- und Ausführungsberechtigungen für ein Verzeichnis hat, kann er Dateien in dem Verzeichnis erstellen. Wenn das Verzeichnis mit SGID geändert wird, gehören die vom Benutzer im Verzeichnis erstellten Dateien zu der Gruppe, zu der das Verzeichnis gehört.

SBIT

Tatsächlich hat SBIT wenig mit SUID und SGID zu tun.

SBIT ist die Abkürzung für Restricted Deletion Flag oder Sticky Bit.

SBIT funktioniert derzeit nur in Verzeichnissen und wird verwendet, um zu verhindern, dass Nicht-Dateieigentümer Dateien löschen. Ein gängiges Beispiel ist das Verzeichnis /tmp:

Das letzte t in den Berechtigungsinformationen gibt an, dass das Verzeichnis mit SBIT-Berechtigung eingerichtet ist. Die Auswirkung von SBIT auf ein Verzeichnis ist: Wenn ein Benutzer eine neue Datei oder ein neues Verzeichnis im Verzeichnis erstellt, sind nur der Benutzer und der Root dazu berechtigt, diese zu löschen.

Hinweis: SBIT funktioniert nicht mit Dateien.

SUID-, SGID- und SBIT-Berechtigungen festlegen

Berechtigungen numerisch festlegen

Die den SUID-, SGID- und SBIT-Berechtigungen entsprechenden Nummern lauten wie folgt:

SUID->4
SGID->2
SBIT->1

Wenn Sie also SUID-Berechtigungen für eine Datei mit den Dateiberechtigungen „-rwxr-xr-x“ festlegen möchten, müssen Sie vor der ursprünglichen Zahl 755 eine 4 hinzufügen, also 4755:

$ chmod 4755 Dateiname

In ähnlicher Weise können Sie 2 und 1 verwenden, um die SGID- und SBIT-Berechtigungen festzulegen. Nachdem die Einstellung abgeschlossen ist, ersetzen s, s und t jeweils das x in den Dateiberechtigungen.

Tatsächlich können auch S- und T-Situationen auftreten. S und t sind Ersatz für die Berechtigung x. Wenn die Berechtigung x jedoch nicht vorhanden ist, wird sie nach dem Hinzufügen der Berechtigung SUID, SGID oder SBIT als großes S oder großes T angezeigt. Beispielsweise fügen wir einer Datei mit der Berechtigung 666 die Berechtigungen SUID, SGID und SBIT hinzu:

Führen Sie chmod 7666 nickfile aus. Da 666 "-rw-rw-rw" bedeutet, was keine x-Berechtigung hat, wird es schließlich zu "-rwSrwSrwT".

Ändern der Berechtigungen nach Symboltyp

Zusätzlich zur Verwendung von Zahlen zum Ändern von Berechtigungen können Sie auch Symbole verwenden:

$ chmod u+s testfile # SUID-Berechtigung zur Testdatei hinzufügen.
$ chmod g+s testdir # SGID-Berechtigung zum Testdir-Verzeichnis hinzufügen.
$ chmod o+t testdir # SBIT-Berechtigung zum Testdir-Verzeichnis hinzufügen.

Zusammenfassen

SUID-, SGID- und SBIT-Berechtigungen dienen der Implementierung spezieller Funktionen und sollen einige Nutzungsszenarien ausgleichen, die mit ugo-Berechtigungen nicht erreicht werden können.

siehe:

  • chmod man-Seite
  • setuid - Wikipedia
  • Die wunderbaren Verwendungsmöglichkeiten von SUID, SGID und SBIT in Linux
  • Linux-Sonderberechtigungen SUID, SGID, SBIT
Das könnte Sie auch interessieren:
  • Standardberechtigungen für Linux-Dateiverzeichnisse (ausführliche Erklärung)
  • Linux-Grundlagen-Tutorial: Sonderberechtigungen SUID, SGID und SBIT
  • Standardberechtigungen und spezielle Berechtigungen für Linux-Systemdateien

<<:  Natives JS zur Implementierung der Dropdown-Box-Auswahlkomponente

>>:  Vollständige Schritte zur Installation von mysql5.7 auf dem Mac (mit Bildern und Text)

Artikel empfehlen

Konfigurieren Sie die Java-Entwicklungsumgebung in Ubuntu 20.04 LTS

Laden Sie das Java Development Kit jdk herunter D...

Detailliertes Tutorial zur Installation von mysql-8.0.20 unter Linux

** Installieren Sie mysql-8.0.20 unter Linux ** U...

So stellen Sie Ihre erste Anwendung mit Docker bereit

Im vorherigen Artikel haben Sie Docker Desktop in...

JavaScript implementiert einen langen Bild-Scroll-Effekt

In diesem Artikel wird der spezifische Code für d...

So kapseln Sie die Tabellenkomponente von Vue Element

Beim Kapseln von Vue-Komponenten werde ich weiter...

So verwenden Sie & und nohup im Hintergrund von Linux

Wenn wir in einem Terminal oder einer Konsole arb...

So richten Sie domänenübergreifenden Zugriff in IIS web.config ein

Anforderung: Die Seite muss ein Bild anzeigen, ab...

HTML-Code zum Hinzufügen von Symbolen zum transparenten Eingabefeld

Ich habe vor Kurzem eine Website mit Anwaltsempfe...

So erstellen Sie manuell ein neues Image mit Docker

In diesem Artikel wird die Methode zum manuellen ...