实际的UID,有效的UID,以及某些系统甚至具有“已保存的UID”。所有这些的目的是什么,尤其是最后一个?
每个UNIX进程都有3个与之关联的UID。超级用户特权是UID = 0。
真实的UID
这是创建此流程的用户/流程的UID。仅当正在运行的进程的EUID = 0时才可以更改。
有效的UID
此UID用于评估执行特定操作的进程的特权。如果EUID!= 0,则可以将EUID更改为RUID或SUID。如果EUID = 0,则可以将其更改为任何内容。
保存的UID
如果您将set- UID位置1来运行可执行文件,则最终的运行过程将以运行它的真实用户的真实UID以及可执行文件所有者的有效且已保存的UID开始。如果该过程随后调用setuid()或seteuid()来更改其有效UID,则由于保存了UID,它们仍然可以再次取回其原始特权。如果未设置set- UID,则SUID将成为RUID。