Lassen Sie uns kurz zu den Prozessberechtigungen übergehen. Erinnern Sie sich, wie ich Ihnen sagte, dass Sie, wenn Sie den Befehl passwd mit aktiviertem SUID-Berechtigungsbit ausführen, das Programm als root ausführen werden? Das stimmt. Bedeutet das aber, dass Sie, da Sie vorübergehend root sind, die Passwörter anderer Benutzer ändern können? Nein, glücklicherweise nicht!
Dies liegt an den vielen UIDs, die Linux implementiert. Jedem Prozess sind drei UIDs zugeordnet:
Wenn Sie einen Prozess starten, läuft dieser mit denselben Berechtigungen wie der Benutzer oder die Gruppe, die ihn gestartet hat. Dies wird als effektive Benutzer-ID bezeichnet. Diese UID wird verwendet, um einem Prozess Zugriffsrechte zu gewähren. Wenn Bob also den Befehl touch ausgeführt hat, würde der Prozess als er ausgeführt werden, und alle von ihm erstellten Dateien wären in seinem Besitz.
Es gibt eine weitere UID, die reale Benutzer-ID genannt wird. Dies ist die ID des Benutzers, der den Prozess gestartet hat. Diese werden verwendet, um zu verfolgen, wer der Benutzer ist, der den Prozess gestartet hat.
Eine letzte UID ist die gespeicherte Benutzer-ID. Diese ermöglicht es einem Prozess, zwischen der effektiven UID und der realen UID zu wechseln und umgekehrt. Dies ist nützlich, da wir nicht möchten, dass unser Prozess ständig mit erhöhten Rechten läuft; es ist einfach eine gute Praxis, spezielle Rechte zu bestimmten Zeiten zu verwenden.
Lassen Sie uns diese nun alle zusammenfügen, indem wir uns den Befehl passwd noch einmal ansehen.
Beim Ausführen des Befehls passwd ist Ihre effektive UID Ihre Benutzer-ID; sagen wir vorerst 500. Oh, aber warten Sie, erinnern Sie sich, der Befehl passwd hat die SUID-Berechtigung aktiviert. Wenn Sie ihn also ausführen, ist Ihre effektive UID jetzt 0 (0 ist die UID von root). Jetzt kann dieses Programm als root auf Dateien zugreifen.
Nehmen wir an, Sie bekommen ein wenig Macht zu schmecken und möchten Sallys Passwort ändern. Sally hat eine UID von 600. Nun, Sie werden Pech haben. Glücklicherweise hat der Prozess auch Ihre reale UID, in diesem Fall 500. Er weiß, dass Ihre UID 500 ist, und daher können Sie das Passwort von UID 600 nicht ändern. (Dies wird natürlich immer umgangen, wenn Sie ein Superuser auf einem Computer sind und alles kontrollieren und ändern können).
Da Sie passwd ausgeführt haben, wird der Prozess mit Ihrer realen UID gestartet, und die UID des Dateibesitzers (effektive UID) wird gespeichert, sodass Sie zwischen den beiden wechseln können. Es ist nicht nötig, alle Dateien mit Root-Zugriff zu ändern, wenn dies nicht erforderlich ist.
Meistens sind die reale UID und die effektive UID gleich, aber in Fällen wie dem Befehl passwd ändern sie sich.