Prozess im Benutzermodus Wechseln Sie in den Kernelmodus. Dann hat der Prozess Root-Rechte?

7

Laut http://www.linfo.org/kernel_mode.html in Absatz 7:

Wenn ein Benutzerprozess einen Teil des Kernel-Codes über einen Systemaufruf ausführt, wird der Prozess vorübergehend zu einem Kernel-Prozess und befindet sich im Kernel-Modus. Im Kernelmodus verfügt der Prozess über Root-Berechtigungen (dh Administratorrechte) und Zugriff auf wichtige Systemressourcen. Der gesamte Kernel, der kein Prozess, sondern eine Steuerung von Prozessen ist, wird nur im Kernelmodus ausgeführt. Wenn der Kernel die Anforderung durch einen Prozess erfüllt hat, kehrt der Prozess in den Benutzermodus zurück.

Es ist mir ziemlich unklar über die Linie,

Im Kernelmodus verfügt der Prozess über Root-Berechtigungen (dh Administratorrechte) und Zugriff auf wichtige Systemressourcen.

Wie kommt es, dass ein Userspace-Prozess, der nicht als Root ausgeführt wird, über Root-Rechte verfügt? Wie unterscheidet es sich vom Userspace-Prozess, der als Root ausgeführt wird?

Ron Vince
quelle
Es stellt sich heraus, dass nicht alles, was Sie im Internet lesen, korrekt ist. Im Kernel-Modus werden Sie nicht zum Root. Der Kernel-Modus ist sehr leistungsfähig. In diesem Modus kann es sich selbst fragen, welcher Benutzer aktiv ist, soll ich tun, was von mir verlangt wurde. Wenn Sie root werden würden, wäre der Kernel alles, was Sie von ihm verlangt haben. Dies ist eindeutig nicht der Fall.
Strg-Alt-Delor

Antworten:

4

(Ich werde versuchen, mich kurz zu fassen.)

Theoretisch gibt es zwei Dimensionen von Privilegien:

  • Die Befehlssatzarchitektur (ISA) des Computers , die bestimmte Informationen und / oder Funktionen der Maschine schützt.

  • Das Betriebssystem (OS) erstellt ein Ökosystem für Anwendungen und Kommunikation. Im Kern ist der Kernel ein Programm, das auf dem ISA ohne jegliche Abhängigkeiten ausgeführt werden kann.

Die heutigen Betriebssysteme führen viele sehr unterschiedliche Aufgaben aus, so dass wir Computer wie heute verwenden können. In einer sehr (, sehr, sehr) vereinfachten Ansicht können Sie sich den Kernel als das einzige Programm vorstellen, das vom Computer ausgeführt wird. Anwendungen, Prozesse und Benutzer sind Artefakte des vom Betriebssystem und insbesondere vom Kernel erstellten Ökosystems.

Wenn wir über Benutzer- (Speicherplatz-) Berechtigungen in Bezug auf das Betriebssystem sprechen, sprechen wir über Berechtigungen, die vom Betriebssystem verwaltet, gewährt und erzwungen werden. Beispielsweise erzwingt der Kernel Dateiberechtigungen, die das Abrufen von Daten aus einem bestimmten Verzeichnis einschränken. Es untersucht einige der IDs, die der Datei zugeordnet sind, interpretiert einige Bits, die Berechtigungen darstellen, und ruft dann entweder die Daten ab oder lehnt dies ab.

Die Berechtigungshierarchie innerhalb der ISA stellt die Tools bereit, die der Kernel für seine Zwecke verwendet. Die spezifischen Details variieren stark, aber im Allgemeinen gibt es den Kernel-Modus, in dem von der CPU ausgeführte Programme sehr frei sind, E / A auszuführen und die von der ISA angebotenen Anweisungen und den Benutzermodus zu verwenden, in dem sich E / A und Anweisungen befinden eingeschränkt.

Wenn beispielsweise die Anweisung zum Schreiben von Daten in eine bestimmte Speicheradresse gelesen wird, kann eine CPU im Kernelmodus einfach Daten in eine bestimmte Speicheradresse schreiben, während sie im Benutzermodus zunächst einige Überprüfungen durchführt, um festzustellen, ob sich die Speicheradresse in a befindet Bereich der zulässigen Adresse, in die Daten geschrieben werden dürfen. Wenn festgestellt wird, dass die Adresse möglicherweise nicht beschrieben wird, wechselt der ISA normalerweise in den Kernelmodus und beginnt mit der Ausführung eines anderen Befehlsstroms, der Teil des Kernels ist, und führt das Richtige aus (TM).

Dies ist ein Beispiel für eine Durchsetzungsstrategie, mit der sichergestellt werden soll, dass ein Programm kein anderes Programm stört. Das Javascript auf der Webseite, die Sie gerade besuchen, kann Ihre Online-Banking-Anwendung also nicht dazu bringen, zweifelhafte Transaktionen durchzuführen.

Beachten Sie, dass im Kernel-Modus nichts anderes ausgelöst wird, um das Richtige durchzusetzen. Es wird davon ausgegangen, dass das im Kernel-Modus ausgeführte Programm das Richtige tut. Deshalb kann im Kernel-Modus ein Programm nicht gezwungen werden, die abstrakten Regeln und Konzepte des Ökosystems des Betriebssystems einzuhalten. Aus diesem Grund sind Programme, die im Kernelmodus ausgeführt werden, als Root-Benutzer vergleichsweise leistungsfähig.

Technisch gesehen ist der Kernel-Modus viel leistungsfähiger als nur der Root-Benutzer auf Ihrem Betriebssystem zu sein.

Bananguin
quelle
Wurden CPUs in Bezug auf die Berechtigungsstufe in ISA unter Berücksichtigung der Berechtigungen von Benutzer und Kernel entwickelt?
Ron Vince
@RonVince Ja, Kernel- / Benutzerrechte (oder ähnliches, z. B. auf x86 werden sie als "Ringe" bezeichnet) sind in allen CPUs vorhanden, die Betriebssysteme mit Aufgabentrennung ermöglichen (z. B. alle modernen Desktop- oder Server-Betriebssysteme: Unix, VMS, Windows) , OS / 2, Plan9, BeOS, QNX,…) ausgeführt werden.
Gilles 'SO - hör auf böse zu sein'
Dies ist meistens eine gute Antwort, aber der Absatz, der mit „Zum Beispiel beim Lesen der Anweisung zum Schreiben von Daten“ beginnt, ist völlig falsch. Entweder wird die Ladeadresse für den aktuellen CPU-Modus zugeordnet, und der Schreibvorgang wird durchlaufen, oder dies ist nicht der Fall, und es wird eine Ausnahme ausgelöst. Das Umschalten in den Kernel-Modus bei einem Berechtigungsfehler geschieht nicht (es wäre sowieso völlig sinnlos, da dadurch Berechtigungen irrelevant würden).
Gilles 'SO - hör auf böse zu sein'
@ Gilles: Es ist eine sehr einfache und abstrakte ISA, die ich mir für diese Antwort vorgestellt habe, und das Beispiel bedeutet Seitenfehler, die existieren und zu einem Kernel führen, IIRC
Bananguin
Ihr Beispiel beschreibt nicht, wie Seitenfehler überhaupt funktionieren.
Gilles 'SO - hör auf böse zu sein'
6

Root- und Nicht-Root-Berechtigungen beziehen sich alle auf den Benutzerbereich. Beispielsweise kann ein Root-Benutzer eine Anwendung installieren und ein normaler Benutzer nicht.

Selbst der Root-Benutzer hat jedoch einige Einschränkungen. Diese Einschränkungen werden durch das Design des Betriebssystems auferlegt. Sie unterscheiden zwischen Benutzerbereich und Kernelbereich. Selbst wenn Sie ein Root-Benutzer sind, können Sie die Geschwindigkeit, mit der sich die Festplatte dreht, nicht ändern, wenn Ihnen diese Option nicht über den Treiber zur Verfügung gestellt wird (Sie können einen Treiber schreiben, der die Funktion zulässt, aber sogar dann greifen Sie nicht direkt auf die Hardware zu, sondern über den Treiber.

Der Grund dafür ist, dass die eigentliche Steuerung der Hardware ausschließlich im Kernelbereich erfolgt und die Art und Weise, wie der Benutzerbereich darauf zugreift, über Systemaufrufe erfolgt. Ein Kernel Space ist kein Ort für einen Benutzer :)

Um Ihre Frage zu beantworten, ist es nicht der Prozess, der die Root-Berechtigungen erhält, sondern der Wechsel in den Kernel-Modus, der uneingeschränkten Zugriff auf jede Systemressource ermöglicht. Dieser unbegrenzte Zugriff ist jedoch nur für den Code verfügbar, der im Kernelmodus ausgeführt wird, sodass Ihr Prozess ihn nicht hat. Es werden nur die Aufrufe des Kernel-Codes verwendet.

Der im Kernelmodus ausgeführte Code hat einen völlig uneingeschränkten Zugriff auf das System.

TheMeaningfulEngineer
quelle
Bedeutet das, dass die Linie falsch ist? Da dies das erste Mal ist, dass ich das Wort 'root' lese, wird es zur Erörterung des Kernel-Modus verwendet.
Ron Vince
Theoretisch kann jeder Userspace-Prozess über einen Systemaufruf uneingeschränkten Zugriff auf jede Systemressource haben, aber Nicht-Root-Benutzer sind im Vergleich zu Root-Benutzern auf eine Liste von Systemaufrufen beschränkt.
Ron Vince
@ RonVince Ja, der zweite Satz, den Sie zitiert haben, ist falsch. Es ist eine Annäherung, aber es ist so grob, dass es hier grob irreführend ist.
Gilles 'SO - hör auf böse zu sein'