Basierend auf einem Teil der ersten Antwort vondiese Fragen:
aus einer Datei lesen (der Kernel muss prüfen, ob die Berechtigungen das Lesen aus der besagten Datei zulassen, und dann führt der Kernel die eigentlichen Anweisungen zum Lesen der Datei auf der Festplatte aus)
Um die Berechtigung einer Datei zu ändern, sind Root-Rechte erforderlich. Mit Root-Rechten kann der Benutzer auf alle Dateien zugreifen, ohne sich um die Berechtigung kümmern zu müssen. Gibt es also irgendwelche Beziehungen zwischen Root und Kernel?
Antwort1
Zunächst eine Klarstellung:
Zum Ändern der Berechtigung für eine Datei sind Root-Rechte erforderlich.
AusMann 2 chmodWir können sehen, dass der Systemaufruf chmod() EPERM (einen Berechtigungsfehler) zurückgibt, wenn:
Die effektive UID stimmt nicht mit dem Eigentümer der Datei überein und der Prozess ist nicht privilegiert (Linux: er verfügt nicht über die Fähigkeit CAP_FOWNER).
Dies bedeutet normalerweise, dass SieentwederSie müssen der Eigentümer der Datei oder der Root-Benutzer sein. Wir sehen jedoch, dass die Situation unter Linux etwas komplizierter sein kann.
Gibt es also irgendwelche Beziehungen zwischen Root und Kernel?
Wie der von Ihnen zitierte Text bereits verdeutlicht hat, ist der Kernel dafür verantwortlich, zu prüfen, ob die UID des Prozesses, der einen Systemaufruf durchführt (also der Benutzer, unter dem er ausgeführt wird), das ausführen darf, was er verlangt. Die Superkräfte von Root beruhen also auf der Tatsache, dass der Kernel so programmiert wurde, dass er eine vom Root-Benutzer angeforderte Operation immer zulässt (UID=0).
Bei Linux prüfen die meisten Berechtigungsprüfungen, ob die angegebene UID die erforderlichenFähigkeit. Das Fähigkeitensystem ermöglicht eine feinere Kontrolle darüber, wer was tun darf.
Um jedoch die traditionelle UNIX-Bedeutung des „Root“-Benutzers beizubehalten, verfügt ein mit der UID 0 ausgeführter Prozess über alle Funktionen.
Beachten Sie, dass Prozesse, die mit UID=0 ausgeführt werden, zwar über Superuser-Berechtigungen verfügen, aber dennoch Anfragen an den Kernel über die Systemaufrufschnittstelle stellen müssen.
Daher ist ein Userspace-Prozess, selbst wenn er als Root ausgeführt wird, in seinen Möglichkeiten immer noch eingeschränkt, da er in "Benutzermodus" und der Kernel läuft in "Kernelmodus", die eigentlich unterschiedliche Betriebsmodi für die CPU selbst sind. Im Kernelmodus kann ein Prozess auf jeden Speicher zugreifen oder jeden Befehl ausgeben. Im Benutzermodus (auf x86-CPUs gibt es tatsächlich eine Reihe verschiedener geschützter Modi) kann ein Prozess nur auf seinen eigenen Speicher zugreifen und nur einige Befehle ausgeben. Daher hat ein als Root ausgeführter Benutzerbereichsprozess immer noch nur Zugriff auf die Kernelmodusfunktionen, die ihm der Kernel zur Verfügung stellt.