Basierend auf einem Teil der ersten Antwort auf diese Fragen :
Lesen aus einer Datei (der Kernel muss überprüfen, ob die Berechtigungen das Lesen aus dieser Datei ermöglichen, und dann führt der Kernel die eigentlichen Anweisungen auf der Festplatte aus, um die Datei zu lesen).
Es erfordert Root-Berechtigungen, um die Berechtigung für eine Datei zu ändern. Mit dem Root-Recht kann der Benutzer auf alle Dateien zugreifen, ohne sich um die Berechtigung sorgen zu müssen. Gibt es also Beziehungen zwischen Root und Kernel?
permissions
kernel
root
Ron Vince
quelle
quelle
Antworten:
Zunächst eine Klarstellung:
Aus man 2 chmod können wir sehen, dass der Systemaufruf chmod () EPERM (einen Berechtigungsfehler) zurückgibt, wenn:
Dies bedeutet normalerweise, dass Sie entweder der Eigentümer der Datei oder der Root-Benutzer sein müssen. Aber wir können sehen, dass die Situation unter Linux etwas komplizierter sein könnte.
Wie der von Ihnen zitierte Text gezeigt hat, ist der Kernel dafür verantwortlich, zu überprüfen, ob die UID des Prozesses, der einen Systemaufruf ausführt (dh der Benutzer, unter dem er ausgeführt wird), das tun darf, was er verlangt. Die Superkräfte von root ergeben sich daher aus der Tatsache, dass der Kernel so programmiert wurde, dass er immer eine vom Root-Benutzer angeforderte Operation zulässt (UID = 0).
Unter Linux prüfen die meisten der verschiedenen Berechtigungsprüfungen, ob die angegebene UID über die erforderlichen Funktionen verfügt . Das Funktionssystem ermöglicht eine genauere Kontrolle darüber, wer was tun darf.
Um jedoch die traditionelle UNIX-Bedeutung des "Root" -Benutzers beizubehalten, verfügt ein Prozess, der mit der UID 0 ausgeführt wird, über alle Funktionen.
Beachten Sie, dass Prozesse, die als UID = 0 ausgeführt werden, zwar über Superuser-Berechtigungen verfügen, jedoch weiterhin Anforderungen an den Kernel über die Systemaufrufschnittstelle stellen müssen.
Daher ist ein Userspace-Prozess, der sogar als Root ausgeführt wird, in seiner Funktionsweise immer noch eingeschränkt, da er im " Benutzermodus " ausgeführt wird und der Kernel im " Kernelmodus " ausgeführt wird, bei dem es sich tatsächlich um unterschiedliche Betriebsmodi für die CPU selbst handelt. Im Kernelmodus kann ein Prozess auf jeden Speicher zugreifen oder Anweisungen erteilen. 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 Anweisungen ausgeben. Daher hat ein als root ausgeführter Userspace-Prozess immer noch nur Zugriff auf die Kernelmodusfunktionen, die der Kernel für ihn bereitstellt.
quelle