![Der Prozess im Benutzermodus wechselt in den Kernelmodus. Hat der Prozess dann Root-Rechte?](https://rvso.com/image/52106/Der%20Prozess%20im%20Benutzermodus%20wechselt%20in%20den%20Kernelmodus.%20Hat%20der%20Prozess%20dann%20Root-Rechte%3F.png)
Entsprechendhttp://www.linfo.org/kernel_mode.htmlIn Absatz 7 heißt es:
Wenn ein Benutzerprozess einen Teil des Kernelcodes über einen Systemaufruf ausführt, wird der Prozess vorübergehend zu einem Kernelprozess und befindet sich im Kernelmodus. Im Kernelmodus verfügt der Prozess über Root-Berechtigungen (d. h. Administratorrechte) und Zugriff auf wichtige Systemressourcen. Der gesamte Kernel, der kein Prozess, sondern ein Controller von Prozessen ist, wird nur im Kernelmodus ausgeführt. Wenn der Kernel die Anforderung eines Prozesses erfüllt hat, kehrt er den Prozess in den Benutzermodus zurück.
Mir ist die Zeile völlig unklar,
Im Kernelmodus verfügt der Prozess über Root-Berechtigungen (also Administratorrechte) und Zugriff auf wichtige Systemressourcen.
Wie kommt es, dass ein Userspace-Prozess, der nicht als Root ausgeführt wird, Root-Berechtigungen hat? Worin besteht der Unterschied zu einem Userspace-Prozess, der als Root ausgeführt wird?
Antwort1
Root- und Nicht-Root-Berechtigungen beziehen sich alle auf den Benutzerbereich. Beispielsweise kann ein Root-Benutzer eine Anwendung installieren, ein normaler Benutzer jedoch nicht.
Allerdings hat auch der Root-Benutzer einige Einschränkungen. Diese Einschränkungen werden durch das Design des Betriebssystems auferlegt, das zwischen Benutzer- und Kernel-Speicherplatz unterscheidet. Beispielsweise können Sie, selbst wenn Sie Root-Benutzer sind, 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 diese Funktion ermöglicht, aber selbst dann greifen Sie nicht direkt auf die Hardware zu, sondern über den Treiber).
Der Grund dafür ist, dass die eigentliche Steuerung der Hardware vollständig im Kernel-Space erfolgt und der User-Space über Systemaufrufe darauf zugreift. Der Kernel-Space ist kein Ort für einen Benutzer :)
Um Ihre Frage zu beantworten: Es ist nicht der Prozess, der die Root-Rechte erhält, sondern der Wechsel in den Kernelmodus, der uneingeschränkten Zugriff auf alle Systemressourcen ermöglicht. Dieser uneingeschränkte Zugriff ist jedoch nur für den im Kernelmodus ausgeführten Code verfügbar, sodass Ihr Prozess ihn nicht hat. Es werden nur die Aufrufe des Kernelcodes verwendet.
Der im Kernelmodus ausgeführte Code hat völlig uneingeschränkten Zugriff auf das System.
Antwort2
(Ich werde versuchen, mich kurz zu fassen.)
Theoretisch gibt es zwei Dimensionen von Privilegien:
Die ComputerBefehlssatzarchitektur(ISA), das bestimmte Informationen und/oder Funktionen der Maschine schützt.
DerBetriebssystem(OS) schafft ein Ökosystem für Anwendungen und Kommunikation. Sein Kern ist der Kernel, ein Programm, das auf der ISA ohne jegliche Abhängigkeiten ausgeführt werden kann.
Heutige Betriebssysteme erfüllen viele verschiedene Aufgaben, damit wir Computer so nutzen können, wie wir es heute tun. In einer sehr (sehr, sehr) vereinfachten Ansicht kann man sich den Kernel als das einzige Programm vorstellen, das vom Computer ausgeführt wird. Anwendungen, Prozesse und Benutzer sind allesamt Artefakte des Ökosystems, das vom Betriebssystem und insbesondere vom Kernel geschaffen wird.
Wenn wir über Benutzer(bereichs)berechtigungen in Bezug auf das Betriebssystem sprechen, sprechen wir über Berechtigungen, die vom Betriebssystem verwaltet, gewährt und durchgesetzt werden. Beispielsweise werden Dateiberechtigungen, die das Abrufen von Daten aus einem bestimmten Verzeichnis einschränken, vom Kernel durchgesetzt. Er betrachtet einige mit der Datei verknüpfte IDs, interpretiert einige Bits, die Berechtigungen darstellen, und ruft dann entweder die Daten ab oder verweigert dies.
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 Kernelmodus, in dem von der CPU ausgeführte Programme sehr frei sind, E/A auszuführen und die von der ISA angebotenen Anweisungen zu verwenden, und den Benutzermodus, in dem E/A und Anweisungen eingeschränkt sind.
Wenn beispielsweise der Befehl 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 Prüfungen durchführt, um festzustellen, ob die Speicheradresse in einem zulässigen Adressbereich liegt, in den Daten geschrieben werden können. Wenn festgestellt wird, dass die Adresse nicht beschrieben werden kann, wechselt die ISA normalerweise in den Kernelmodus und beginnt mit der Ausführung eines anderen Befehlsstroms, der Teil des Kernels ist und das Richtige tut (TM).
Dies ist ein Beispiel für eine Durchsetzungsstrategie, um sicherzustellen, dass ein Programm ein anderes Programm nicht stört … sodass das Javascript auf der Webseite, die Sie gerade besuchen, nicht dazu führen kann, dass Ihre Online-Banking-Anwendung fragwürdige Transaktionen durchführt …
Beachten Sie, dass im Kernelmodus nichts anderes ausgelöst wird, um das Richtige zu erzwingen. Es wird davon ausgegangen, dass das im Kernelmodus ausgeführte Programm das Richtige tut. Deshalb kann im Kernelmodus nichts ein Programm zwingen, sich an die abstrakten Regeln und Konzepte des Ökosystems des Betriebssystems zu halten. Deshalb sind im Kernelmodus ausgeführte Programme vergleichbar leistungsfähig wie der Root-Benutzer.
Technisch gesehen ist der Kernelmodus viel leistungsfähiger, als lediglich der Root-Benutzer Ihres Betriebssystems zu sein.