2024-05-13 06:37:39 发布
网友
os.getuid()的文档说明:
os.getuid()
Return the current process’s user id.
在os.geteuid()中说:
os.geteuid()
Return the current process’s effective user id.
那么用户id和有效用户id之间的区别是什么?
对我来说,两者的工作原理都是一样的(在2.x和3.x上)。我使用它来检查脚本是否作为根运行。
函数os.getuid()返回运行程序的用户的ID。程序使用权限的用户的函数os.geteuid()。在大多数情况下,这是一样的。众所周知,当为程序可执行文件设置setuid位时,这些值将不同,并且运行程序的用户与拥有程序可执行文件的用户不同。在这种情况下,os.getuid()将返回运行程序的用户的ID,而os.geteuid()将返回拥有程序可执行文件的用户的ID。
setuid
要理解os.getuid和os.geteuid的区别,您需要理解它们不是特定于Python的函数(除了os模块前缀)。这些函数包装了本质上所有类Unix操作系统提供的getuid和geteuid系统调用。
os.getuid
os.geteuid
os
getuid
geteuid
因此,与其查看Python文档(不太可能给出很多细节),不如查看操作系统的文档。Here是例如Linux的相关文档。维基百科也有一个很好的article on Unix User IDs。
常规UID和有效UID的区别在于,当您执行需要特殊访问(例如读取或写入文件或进行某些系统调用)的操作时,只检查EUID。UID指示执行操作的实际用户,但在检查权限时(通常)不考虑它。在正常程序中,它们将是相同的。有些程序将其EUID更改为允许它们执行的操作的加或减。较小的数字也会更改他们的UID,从而有效地“成为”另一个用户。
下面是一个更改其EUID的程序示例:passwd程序(用于更改密码)必须写入系统的密码文件,该文件归根用户所有。普通用户无法写入该文件,因为如果可以,他们也可以更改其他人的密码。为了解决这个问题,passwd程序在其文件权限(称为setuid bit)中设置了一个位,该位向操作系统指示,它应该使用程序所有者的EUID(例如root)运行,即使它是由另一个用户启动的。然后passwd程序会将其UID视为启动用户,将其EUID视为根用户。写入系统密码文件要求EUID具有特权。UID也很有用,因为passwd需要知道它正在为哪个用户更改密码。
passwd
setuid bit
root
UID
还有一些情况下UID和EUID不匹配,但它们并不太常见。例如,作为超级用户运行的文件服务器可能会更改其EUID以匹配请求某些文件操作的特定用户。使用用户的EUID允许服务器避免访问用户不允许接触的内容。
函数
os.getuid()
返回运行程序的用户的ID。程序使用权限的用户的函数os.geteuid()
。在大多数情况下,这是一样的。众所周知,当为程序可执行文件设置setuid
位时,这些值将不同,并且运行程序的用户与拥有程序可执行文件的用户不同。在这种情况下,os.getuid()
将返回运行程序的用户的ID,而os.geteuid()
将返回拥有程序可执行文件的用户的ID。要理解
os.getuid
和os.geteuid
的区别,您需要理解它们不是特定于Python的函数(除了os
模块前缀)。这些函数包装了本质上所有类Unix操作系统提供的getuid
和geteuid
系统调用。因此,与其查看Python文档(不太可能给出很多细节),不如查看操作系统的文档。Here是例如Linux的相关文档。维基百科也有一个很好的article on Unix User IDs。
常规UID和有效UID的区别在于,当您执行需要特殊访问(例如读取或写入文件或进行某些系统调用)的操作时,只检查EUID。UID指示执行操作的实际用户,但在检查权限时(通常)不考虑它。在正常程序中,它们将是相同的。有些程序将其EUID更改为允许它们执行的操作的加或减。较小的数字也会更改他们的UID,从而有效地“成为”另一个用户。
下面是一个更改其EUID的程序示例:
passwd
程序(用于更改密码)必须写入系统的密码文件,该文件归根用户所有。普通用户无法写入该文件,因为如果可以,他们也可以更改其他人的密码。为了解决这个问题,passwd
程序在其文件权限(称为setuid bit
)中设置了一个位,该位向操作系统指示,它应该使用程序所有者的EUID(例如root
)运行,即使它是由另一个用户启动的。然后passwd
程序会将其UID
视为启动用户,将其EUID视为根用户。写入系统密码文件要求EUID具有特权。UID也很有用,因为passwd
需要知道它正在为哪个用户更改密码。还有一些情况下UID和EUID不匹配,但它们并不太常见。例如,作为超级用户运行的文件服务器可能会更改其EUID以匹配请求某些文件操作的特定用户。使用用户的EUID允许服务器避免访问用户不允许接触的内容。
相关问题 更多 >
编程相关推荐