Um zu verstehen, wie os.getuid
und os.geteuid
unterscheiden, müssen Sie verstehen, dass sie nicht bestimmte Funktionen (außer dem os
Modulpräfix) Python. Diese Funktionen wickeln die Systemaufrufe und geteuid
ab, die im Wesentlichen von allen Unix-ähnlichen Betriebssystemen bereitgestellt werden.
Also, anstatt Python-Dokumente (die wahrscheinlich nicht viele Details geben) zu sehen, sollten Sie sich die Dokumente für Ihr Betriebssystem ansehen. Here ist die relevante Dokumentation für Linux zum Beispiel. Wikipedia hat auch eine gute article on Unix User IDs.
Der Unterschied zwischen der regulären UID und der effektiven UID besteht darin, dass nur die EUID überprüft wird, wenn Sie etwas tun, für das ein spezieller Zugriff erforderlich ist (z. B. Lesen oder Schreiben einer Datei oder bestimmte Systemaufrufe). Die UID gibt den tatsächlichen Benutzer an, der die Aktion ausführt, wird jedoch (normalerweise) nicht berücksichtigt, wenn Berechtigungen geprüft werden. In normalen Programmen werden sie gleich sein. Einige Programme ändern ihre EUID, um die Aktionen, die sie ausführen dürfen, zu addieren oder zu subtrahieren. Eine kleinere Zahl ändert auch ihre UID, um effektiv zu einem anderen Benutzer zu werden.
Hier ist ein Beispiel für ein Programm, das seine EUID ändert: Das Programm passwd
(mit dem Sie Ihr Kennwort ändern) muss in die Kennwortdatei des Systems schreiben, die dem Benutzer root gehört. Normale Benutzer können nicht in diese Datei schreiben, da sie sonst das Passwort aller anderen ändern könnten. Um dies zu beheben, hat das Programm passwd
ein Bit in seinen Dateiberechtigungen gesetzt (bekannt als setuid bit
), das dem Betriebssystem anzeigt, dass es mit der EUID des Eigentümers des Programms ausgeführt werden soll (zB root
), selbst wenn es von einem anderen Benutzer gestartet wird . Das Programm passwd
würde dann seine UID
als den startenden Benutzer und seine EUID als root sehen. Das Schreiben in die Systempasswortdatei erfordert, dass die EUID privilegiert ist. Die UID ist auch nützlich, da passwd
wissen muss, für welchen Benutzer das Passwort geändert wird.
Es gibt ein paar andere Fälle, in denen die UID und EUID nicht übereinstimmen, aber sie sind nicht allzu häufig. Zum Beispiel kann ein Dateiserver, der als der Superbenutzer läuft, seine EUID ändern, um mit einem spezifischen Benutzer übereinzustimmen, der einige Dateimanipulationen anfordert. Durch die Verwendung der EUID des Benutzers kann der Server vermeiden, auf Dinge zuzugreifen, die der Benutzer nicht berühren darf.
Sie sind nicht identisch in Setuid-Programmen (und sie können für jedes Programm unterschiedlich sein, das als root ausgeführt wird und Seteuid explizit aufruft). Das bedeutet, dass sie * beim Start des Skripts identisch sind. –