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

Mysql-String-Abfangen und Abrufen von Daten im angegebenen String

Vorwort: Ich bin auf die Anforderung gestoßen, be...

Docker-Container: benutzerdefinierter Host-Netzwerkzugriffsvorgang

Durch Hinzufügen des Schlüsselworts extra_hosts i...

Detaillierte Installationsschritte für MySQL 8.0.11

In diesem Artikel werden die Installationsschritt...

Einige Schlussfolgerungen zur Entwicklung mobiler Websites

Die mobile Version der Website sollte zumindest ü...

Verwendung regulärer Ausdrücke in CSS-Selektoren

Ja, CSS hat auch reguläre Ausdrücke (Amen) Zwei l...

Kurze Analyse von MySQL Union und Union All

In der Datenbank führen sowohl die Schlüsselwörte...

So installieren Sie MySQL 5.7 manuell auf CentOS 7.4

MySQL-Datenbanken werden häufig verwendet, insbes...

Detailliertes Tutorial zur Installation von MySQL 5.7 auf RedHat 6.5

RedHat6.5 Installation MySQL5.7 Tutorial teilen, ...

Analyse der zum Ausführen von Docker erforderlichen Berechtigungen

Zum Ausführen von Docker sind Root-Rechte erforde...

CSS3 realisiert eine springende Ballanimation

Normalerweise besuche ich gerne die Sonderseiten ...

Der Unterschied zwischen method=post/get in Form

Das Formular bietet zwei Möglichkeiten zur Datenüb...