Es ist ein bisschen kompliziert. Das Betriebssystem - Kernel verwendet eine effektive UID des Prozesses und GID seine Privilegien / Berechtigungen zu bestimmen; Sie werden für verwendet
- gewöhnliche Dateisystemvorgänge (z. B. Öffnen, Verknüpfen / Aufheben der Verknüpfung) basierend auf den Benutzer- / Gruppen- / anderen Regeln zulassen / verbieten
- Festlegen des Eigentums an neu erstellten Dateien,
- Bestimmen, an welche anderen Prozesse ein Prozess Signale senden kann, und
- Entscheidung, ob ein Prozess Dateisysteme bereitstellen oder die Bereitstellung aufheben kann, das Datum ändern, das System herunterfahren kann usw.
und wahrscheinlich andere Dinge. Der Haken ist jedoch, wenn ein Programm eine Art Zugriffs- / Berechtigungsentscheidung treffen muss, muss es normalerweise die echte UID und GID verwenden. Bedenken Sie: Wenn Ihr with_sudo.c
Programm ausgeführt wird sudo
, ist die effektive UID root (0) und die reale UID ist Sie (1000) printf
. Dies ist jedoch genau das Gleiche wie sudo
bei einer unprivilegierten Shell. Bei jeder sudo
Ausführung ist die effektive UID 0 - daher sudo
kann sie nicht verwendet werden, um zu entscheiden, wie sie sich verhalten soll. Es muss die echte UID verwenden, um herauszufinden, wer Sie wirklich sind, damit es bestimmen kann, was Sie tun dürfen sudo
. Nur wenn die reale UID 0 istsudo
Schlußfolgerung, dass du "wirklich" root bist oder zumindest nicht zuverlässig deine tatsächliche Identität bestimmen kannst, so dass es nicht weiß, welche Einschränkungen für dich gelten, und es führt nur die aus, cat
ohne dass eine weitere Authentifizierung von dir verlangt wird.