Heim  >  Artikel  >  System-Tutorial  >  Grundprinzipien der Linux-Berechtigungskontrolle

Grundprinzipien der Linux-Berechtigungskontrolle

王林
王林nach vorne
2023-12-31 15:59:501253Durchsuche

In diesem Artikel werden hauptsächlich die Grundprinzipien der Berechtigungskontrolle in Linux-Systemen vorgestellt. Grundprinzipien der Linux-Berechtigungskontrolle

Sicherheitsmodell

In Linux-Systemen sind alle unsere Vorgänge im Wesentlichen Prozesse, die auf Dateien zugreifen. Um auf Dateien zugreifen zu können, müssen wir zunächst die entsprechenden Zugriffsberechtigungen einholen. Die Zugriffsberechtigungen werden über das Sicherheitsmodell im Linux-System abgerufen.

Für das Sicherheitsmodell in Linux-Systemen müssen wir die folgenden zwei Punkte kennen:

  1. Das ursprüngliche Sicherheitsmodell auf dem Linux-System heißt DAC, dessen vollständiger Name Discretionary Access Control ist, was übersetzt diskretionäre Zugriffskontrolle bedeutet.
  2. Später wurde ein neues Sicherheitsmodell namens MAC hinzugefügt und entworfen, dessen vollständiger Name Mandatory Access Control ist, was übersetzt „obligatorische Zugriffskontrolle“ bedeutet.

Beachten Sie, dass MAC und DAC sich nicht gegenseitig ausschließen. DAC ist das grundlegendste Sicherheitsmodell und normalerweise der am häufigsten verwendete Zugriffskontrollmechanismus, über den Linux verfügen muss. MAC ist ein erweiterter Sicherheitsmechanismus, der auf DAC basiert und zu den optionalen Modulen gehört. Vor dem Zugriff führen Linux-Systeme normalerweise zuerst eine DAC-Prüfung durch. Wenn dies fehlschlägt, schlägt der Vorgang direkt fehl. Wenn das System das MAC-Modul unterstützt, führt es anschließend eine MAC-Berechtigungsprüfung durch.

Um die beiden zu unterscheiden, nennen wir das Linux-System, das MAC unterstützt, SELinux, was bedeutet, dass es sich um ein System mit erhöhter Sicherheit für Linux handelt.

Hier werden wir über das DAC-Sicherheitsmodell in Linux-Systemen sprechen.

DAC-Sicherheitsmodell

Der Kerninhalt von DAC ist: Unter Linux hat ein Prozess theoretisch die gleichen Berechtigungen wie der Benutzer, der ihn ausführt. Alles, was dazu gehört, dreht sich um diesen Kern.

Benutzer- und Gruppen-ID-Informationskontrolle

Benutzer-, Gruppen-, Passwortinformationen

Speichern Sie Benutzer- und Gruppeninformationen über /etc/passwd und /etc/group und speichern Sie Passwörter und ihre Änderungsinformationen über /etc/shadow, mit einem Datensatz pro Zeile.

Benutzer und Gruppen werden durch UID bzw. GID dargestellt. Ein Benutzer kann gleichzeitig mehreren Gruppen angehören. Standardmäßig muss jeder Benutzer einer GID mit derselben UID und demselben Namen angehören.

Für /etc/passwd ist jedes Datensatzfeld Benutzername: Passwort (verschlüsselt und in /etc/shadow gespeichert): UID: GID (Standard-UID): Beschreibungskommentar: Home-Verzeichnis: Login-Shell (das erste laufende Programm)

Für /etc/group lauten die Felder jedes Datensatzes: Gruppenname: Passwort (im Allgemeinen gibt es kein Gruppenpasswort): GID: Benutzerliste der Gruppenmitglieder (durch Kommas getrennte Benutzer-UID-Liste)

Für /etc/shadow lauten die Felder jedes Datensatzes: Anmeldename: Verschlüsseltes Passwort: Zeitpunkt der letzten Änderung: Minimales Zeitintervall: Maximales Zeitintervall: Warnzeit: Inaktivitätszeit:

Beispiel

Im Folgenden finden Sie Beispiele für Benutzer- und Gruppeninformationen. Die Passwortinformationen in /etc/shadow werden verschlüsselt und gespeichert, es wird kein Beispiel bereitgestellt.

Grundprinzipien der Linux-Berechtigungskontrolle

Informationen zur Dateiberechtigungskontrolle

Dateityp

Dateitypen unter Linux sind wie folgt:

  • Gewöhnliche Dateien, einschließlich Textdateien und Binärdateien, können mit Touch erstellt werden
  • Socket-Datei, die für die Netzwerkkommunikation verwendet wird, wird im Allgemeinen indirekt von der Anwendung während der Ausführung erstellt
  • Die Pipe-Datei ist eine benannte Pipe, keine unbenannte Pipe, und kann mit mkfifo;
  • erstellt werden
  • Charakterdateien und Blockdateien sind beide Gerätedateien und können mit mknod;
  • erstellt werden
  • Die Linkdatei ist eine Softlinkdatei, keine Hardlinkdatei und kann mit ln erstellt werden.

Zugriffskontrollgruppe

Zur Kontrolle in drei Gruppen unterteilt:

  • Benutzer enthält Berechtigungen für den Dateieigentümer
  • Gruppe enthält die für die Gruppe der Datei festgelegten Berechtigungen
  • Andere umfasst Berechtigungen, die für andere festgelegt wurden

Konfigurierbare Berechtigungen

Allgemeine (aber nicht alle) Berechtigungswerte sind unten aufgeführt, einschließlich:

  • r bedeutet Leseberechtigung.
  • w bedeutet Schreiberlaubnis.
  • x steht im Allgemeinen für ausführbare Dateien/Verzeichnisse und zeigt an, dass es über Ausführungs-/Suchberechtigungen verfügt.
  • s gilt im Allgemeinen für ausführbare Dateien/Verzeichnisse und gibt an, dass es die Berechtigung hat, dem Dateieigentümer Berechtigungen zu erteilen. Nur die Benutzer- und Gruppengruppen können diese Berechtigung festlegen.
  • t Im Allgemeinen können Benutzer mit Berechtigungen nach dem Setzen des Sticky-Bits bei Verzeichnissen nur ihre eigenen Dateien schreiben und löschen, andernfalls können sie alle Dateien im Verzeichnis schreiben und löschen. Das alte System bedeutet außerdem, dass der Text nach der Ausführung der ausführbaren Datei in den Auslagerungsbereich kopiert wird, um die Geschwindigkeit zu verbessern.

Beispiel

Sie können den Dateityp und die Berechtigungen über ls -l überprüfen und die Berechtigungen über chmod ändern.

Zum Beispiel

Grundprinzipien der Linux-Berechtigungskontrolle

In der Ausgabe gibt das erste Zeichen den Dateityp an, einschließlich gewöhnlicher Datei (-), Verzeichnisdatei (d), Socket-Datei (s), Pipe-Datei (p), Zeichendatei (c) und Blockdatei (b). , Datei verknüpfen (l); Der Teil -rwxr-xr-x ab dem zweiten Zeichen stellt das Berechtigungsbit der Datei mit insgesamt 9 Bits dar.

Für die Datei /usr/bin/qemu-i386 hat diese Berechtigungskontrolle folgende Bedeutung:

  1. Der rwx in den Bits 2–4 gibt an, dass der Besitzer mit den Berechtigungen r, w oder x auf die Datei zugreifen kann.
  2. Das r-x an den Positionen 5 bis 7 zeigt an, dass Benutzer in derselben Gruppe wie die Datei mit r- oder x-Berechtigungen auf die Datei zugreifen können
  3. Das R-X in den Bits 8 bis 10 bedeutet, dass andere unbekannte Benutzer mit R- oder X-Berechtigungen auf die Datei zugreifen können.

Berechtigungen für test/, test2/, test3/:

festgelegt
  1. r,w,x-Berechtigungen für jede Berechtigungskontrollgruppe werden durch eine Oktalziffer dargestellt, zum Beispiel: 755 steht für rwxr-xr-x.
  2. s,t-Berechtigung wird anstelle der x-Position angezeigt; um die s,t-Berechtigung festzulegen, müssen Sie eine Zahl anhängen, bevor die entsprechende oktale Berechtigungskontrollgruppe zur Steuerung der r,w,x;s-Berechtigung für die Eigentümergruppe verwendet wird Steuerung, t wird für andere Steuerungen verwendet.
  3. Um die Eigentümer-s festzulegen, fügen Sie 4 hinzu, um die Gruppen-s festzulegen, fügen Sie 2 hinzu, und um die Berechtigungen anderer t festzulegen, fügen Sie 1 hinzu. Wenn Sie t beispielsweise für test/früher festlegen, verwenden Sie 1775, was rwxrwxr-t bedeutet .
Informationen zur Prozessberechtigungskontrolle

Prozessberechtigungen

Für Prozesse beziehen sich die folgenden Attribute auf Dateizugriffsberechtigungen:

  • effektive Benutzer-ID: UID im Zusammenhang mit Prozesszugriffsdateiberechtigungen (abgekürzt als EUID).
  • effektive Gruppen-ID: GID im Zusammenhang mit Prozesszugriffsdateiberechtigungen (abgekürzt als egid).
  • echte Benutzer-ID: Die UID (abgekürzt als ruid) des Benutzers, der den Prozess beim Anmelden am System erstellt hat.
  • echte Gruppen-ID: Die GID (abgekürzt als rgid) des Benutzers, der den Prozess beim Anmelden am System erstellt hat.
  • gespeicherte festgelegte Benutzer-ID: von EUID kopiert.
  • gespeicherte Gruppen-ID: von E-GID kopiert.

Beispiel

Wir können ps und top verwenden, um Prozesse mit euid und ruid auszuwählen und anzuzeigen. Oder verwenden Sie oben, um die EUID und RuID des Prozesses anzuzeigen

Beispiel oben angezeigt:

Geben Sie zuerst oben ein, um etwa Folgendes zu erhalten:

Grundprinzipien der Linux-Berechtigungskontrolle

Hier wird die Option -d verwendet, um die Aktualisierungsfrequenz von top zu verlängern und so die Bedienung zu vereinfachen. Wie hier zu sehen ist, repräsentiert nur das USER-Feld die effektive Benutzer-ID des entsprechenden Prozesses.

Öffnen Sie die Anzeigeoptionen für die gelesene Benutzer-ID:

a. Geben Sie während der Ausführung des oberen Befehls f ein, und Sie sehen eine Zeile ähnlich der folgenden:

b. Geben Sie c ein, um den Anzeigeschalter des echten Benutzernamens zu aktivieren.

c. Drücken Sie abschließend die Eingabetaste, um zum Anfang zurückzukehren, und Sie sehen die Option für die echte Benutzer-ID. Geben Sie zu diesem Zeitpunkt „o“ ein, um die Spaltenreihenfolge anzupassen. Schließlich können wir die Ausgabe einschließlich der „effektiven Benutzer-ID“ und der „echten Benutzer-ID“ wie folgt sehen:

Berechtigungskontrollstrategie für Prozesszugriffsdateien

Regeln

Grobe Berechtigungskontrollstrategie für Prozesszugriffsdateien

Für einen Prozess zum Zugriff auf Dateien ist die EUID das Wichtigste, daher konzentrieren sich alle Berechtigungsattribute auf die EUID.

  • Die EUID eines Prozesses ist im Allgemeinen standardmäßig auf ihren Ruid-Wert eingestellt
  • Wenn das ausführbare Berechtigungsbit der ausführbaren Datei s ist, wird ihre EUID, nachdem der Prozess exec darauf aufgerufen hat, auf die Benutzer-ID der ausführbaren Datei gesetzt
  • Die gespeicherte Benutzer-ID des Prozesses wird von euid kopiert.
  • Wenn die EUID des Prozesses mit der Benutzer-ID der Datei übereinstimmt, verfügt der Prozess nur über die Berechtigungen, die durch das Benutzerberechtigungsbit der Datei festgelegt werden
  • Die Kontrollregeln für Gruppenberechtigungen (egid) sind ähnlich.

Berechtigungsattribute durch Ausführung der Exec-Datei ändern

Beim Aufrufen einer ausführbaren Datei über exec:

  • Der Prozessruidwert bleibt immer unverändert
  • gespeicherte Set-Benutzer-ID kommt immer von euid ;
  • Der
  • euid-Wert hängt davon ab, ob das Set-User-ID-Bit der Datei gesetzt ist.

Wie folgt:

Ändern Sie Berechtigungsattribute durch den Systemaufruf setuid(uid)

Beim Ändern von Berechtigungsattributen über setuid(uid):

  • Superuser kann Ruid, Euid und gespeicherte Benutzer-IDs problemlos ändern;
  • Unprivilegierte Benutzer können die EUID nur ändern, wenn UID und RuID gleich sind, andernfalls kann sie nicht geändert werden.

Beispiel

Noch ein paar besondere Beispiele:

Benutzer-ID festlegen

Grundprinzipien der Linux-Berechtigungskontrolle

Wie bereits erwähnt, bedeutet diese Ausgabe für die Datei /usr/bin/sudo

  • Die Zeilen in den Bits 1 bis 3 bedeuten, dass der Eigentümer mit den Berechtigungen r, w oder s auf die Datei zugreifen kann
  • Das r-x in den Bits 4 bis 6 zeigt an, dass Benutzer in derselben Gruppe wie die Datei mit r- oder x-Berechtigungen auf die Datei zugreifen können.
  • Das r-x in den Bits 7–9 zeigt an, dass andere unbekannte Benutzer mit r- oder x-Berechtigungen auf die Datei zugreifen können.
Nach dieser Einstellung verfügt der Eigentümer über Lese-, Schreib- und Ausführungsberechtigungen, was nicht anders ist. Bei gewöhnlichen Benutzerprozessen, die nicht zur Stammgruppe gehören, ist das jedoch ganz anders.

Wenn ein normaler Benutzerprozess den Sudo-Befehl ausführt, erhält er Ausführungsberechtigungen über das x in anderen und verwendet dann das s im Benutzer, um vorübergehend die Berechtigungen des Eigentümers (Root) der ausführbaren Sudo-Datei zu erhalten, dh Superberechtigungen .

Das ist auch der Grund, warum normale Benutzer über den sudo-Befehl viele Befehle mit Administratorrechten ausführen können.

Stick-Bit einrichten

Grundprinzipien der Linux-Berechtigungskontrolle

Nach dieser Einstellung hat jeder Lese-, Schreib- und Ausführungsberechtigungen für das Verzeichnis /tmp, was nicht anders ist. Allerdings ist das Sticky-Bit t im anderen Teil gesetzt und seine Funktion ist ganz anders.

Wenn das Sticky-Bit im Verzeichnis nicht gesetzt ist, kann jeder mit Schreibrechten für das Verzeichnis alle darin enthaltenen Dateien und Unterverzeichnisse löschen, auch wenn er nicht der Eigentümer der entsprechenden Datei ist und danach keine Lese- oder Schreibberechtigung hat; Wenn das Sticky-Bit gesetzt ist, kann der Benutzer nur Dateien und Unterverzeichnisse, die ihm gehören, schreiben oder löschen.

Aus diesem Grund kann jeder Dateien und Verzeichnisse in das Verzeichnis /tmp schreiben, aber nur Dateien oder Verzeichnisse schreiben und löschen, die ihm gehören.

Zitieren Sie ein Anwendungsfragment des man-Programms, um die Verwendung von „set-user-id“ und „saved set-user-id“ zu beschreiben

Das Man-Programm kann zum Anzeigen von Online-Hilfehandbüchern verwendet werden. Das Man-Programm kann installiert werden, um Set-User-ID oder Set-Group-ID für einen bestimmten Benutzer oder eine bestimmte Gruppe anzugeben.

Das man-Programm kann Dateien an bestimmten Speicherorten lesen oder überschreiben, was normalerweise durch eine Konfigurationsdatei (normalerweise /etc/man.config oder /etc/manpath.config) oder Befehlszeilenoptionen konfiguriert wird.

Das Man-Programm führt möglicherweise einige andere Befehle aus, um die Datei zu verarbeiten, die die angezeigte Manpage enthält.

Um Verarbeitungsfehler zu vermeiden, wechselt man zwischen zwei Privilegien: den Privilegien des Benutzers, der den man-Befehl ausführt, und den Privilegien des Besitzers des man-Programms.

Der Hauptthread, der verstanden werden muss: Wenn nur man ausgeführt wird, sind die Prozessprivilegien die Privilegien des man-Benutzers. Wenn ein untergeordneter Prozess über man ausgeführt wird (z. B. ein Shell-Befehl über !bash), wechselt der Benutzer zu der aktuelle Benutzer und wechselt nach der Ausführung zurück.

Der Ablauf ist wie folgt:

    Angenommen, die man-Programmdatei gehört dem Benutzer man und das Set-User-ID-Bit ist gesetzt. Wenn wir sie ausführen, haben wir die folgende Situation:
  1. – echte Benutzer-ID = unsere Benutzer-UID
    – effektive Benutzer-ID = Man-User-UID
    – gespeicherte Set-Benutzer-ID = Man-Benutzer-UID
  2. Das Man-Programm greift auf die erforderlichen Konfigurationsdateien und Manpages zu. Diese Dateien gehören dem Benutzer „man“, aber da die effektive Benutzer-ID „man“ lautet, ist der Zugriff auf die Dateien zulässig.
  3. Wenn man einen Befehl für uns ausführt, ruft er setuid(getuid())) auf (getuid() gibt die echte Benutzer-ID zurück).
  4. Da wir kein Superuser-Prozess sind, kann diese Änderung nur die effektive Benutzer-ID ändern. Wir werden die folgende Situation haben:
    Wenn der Man-Prozess nun ausgeführt wird, verwendet er unsere UID als effektive Benutzer-ID. Das bedeutet, dass wir nur auf Dateien zugreifen können, für die wir über eigene Berechtigungen verfügen. Das heißt, es kann jeden Filter in unserem Namen sicher ausführen.
    – echte Benutzer-ID = unsere Benutzer-UID (wird nicht geändert)
    – effektive Benutzer-ID = unsere Benutzer-UID
    – gespeicherte set-user-ID = Benutzer-UID von man (wird nicht geändert)
  5. Wenn der Filter fertig ist, ruft man setuid(euid) auf.
  6. Hier ist euid die UID des man-Benutzers (Diese ID wird durch den Aufruf von geteuid gespeichert.) Dieser Aufruf ist in Ordnung, da der setuid-Parameter mit der gespeicherten set-user-ID übereinstimmt. (Deshalb benötigen wir eine gespeicherte Set-Benutzer-ID). – echte Benutzer-ID = unsere Benutzer-UID (wird nicht geändert)
    – effektive Benutzer-ID = UID des Mannes
    – gespeicherte set-user-ID = Benutzer-UID von man (wird nicht geändert)

    Da die effektive Benutzer-ID man ist, kann das man-Programm jetzt seine eigenen Dateien verwalten.
  7. Indem wir die gespeicherte Set-User-ID auf diese Weise verwenden, können wir zusätzliche Berechtigungen über die Set-User-ID der Programmdatei nutzen, wenn der Prozess startet und endet. Während dieser Zeit waren wir jedoch in eigener Verantwortung tätig. Wenn es uns am Ende nicht gelingt, zur gespeicherten Set-Benutzer-ID zurückzukehren, behalten wir während der Ausführung möglicherweise zusätzliche Berechtigungen.

  8. Lassen Sie uns einen Blick darauf werfen, was passieren wird, wenn der Mensch eine Granate startet:
  • Die Shell hier wird vom Menschen mit Fork und Exec gestartet.
  • Da zu diesem Zeitpunkt die tatsächliche Benutzer-ID und die effektive Benutzer-ID beide unsere gewöhnlichen Benutzer-UIDs sind (siehe Schritt 3), verfügt die Shell über keine weiteren zusätzlichen Berechtigungen.
  • Die gestartete Shell kann nicht auf die gespeicherte Set-Benutzer-ID (man) von man zugreifen, da die gespeicherte Set-Benutzer-ID der Shell von exec von der effektiven Benutzer-ID kopiert wird.
  • Im untergeordneten Prozess (Shell), der exec ausführt, sind alle Benutzer-IDs unsere normalen Benutzer-IDs.

Tatsächlich ist die Art und Weise, wie wir die Setuid-Funktion verwenden, nicht besonders korrekt, da das Programm möglicherweise die Benutzer-ID auf root setzt. Zu diesem Zeitpunkt ändert setuid alle drei UIDs in die von Ihnen festgelegte ID, aber wir benötigen nur Legen Sie eine effektive Benutzer-ID fest.

Das obige ist der detaillierte Inhalt vonGrundprinzipien der Linux-Berechtigungskontrolle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:linuxprobe.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen