os.getuid()
的文档说:
返回当前进程的用户ID。
os.geteuid()
的文档说:
返回当前进程的有效用户ID。
那么用户ID和有效用户ID之间有什么区别呢?
对我来说,两者都是相同的(适用于2.x和3.x)。我正在使用它来检查脚本是否以root权限运行。
os.getuid
和 os.geteuid
的区别,需要明白它们都不是 Python 特有的函数(除了 os
模块前缀)。这些函数包装了由几乎所有类 Unix 操作系统提供的 getuid
和 geteuid
系统调用。passwd
程序(用于更改密码)必须写入系统密码文件,该文件由root用户拥有。普通用户无法对该文件进行写操作,因为如果他们可以这样做,他们就可以更改其他所有用户的密码。为了解决这个问题,passwd
程序在其文件权限中设置了一个位(称为setuid bit
),告诉操作系统它应该使用程序所有者(例如root
)的EUID运行,即使它是由另一个用户启动的。然后,passwd
程序将其UID
视为启动用户,将其EUID视为root。需要特权的EUID才能写入系统密码文件。UID也很有用,因为passwd
需要知道要更改哪个用户的密码。函数os.getuid()
返回运行程序的用户ID。 函数os.geteuid()
返回您的程序使用权限的用户ID。 在大多数情况下,这将是相同的。 众所周知,当这些值不同时的情况是设置了setuid
位于程序可执行文件中,并且运行程序的用户与拥有程序可执行文件的用户不同。 在这种情况下,os.getuid()
将返回运行程序的用户ID,而os.geteuid()
将返回拥有程序可执行文件的用户ID。
os.geteuid()
部分吗?并且你能给出例子来展示两者不同吗,即 x 只能通过 getuid 实现而不能通过 geteuid 实现,而 y 只能通过 geteuid 实现而不能通过getuid 实现? - Santosh Kumar