来自APUE
当我们执行一个程序文件时,进程的有效用户ID通常就是真实用户ID。然而,我们也可以在文件的模式字 (
st_mode
) 中设置 set-user-ID 位,表示“当执行此文件时,将进程的有效用户 ID 设置为文件的所有者 (st_uid
)”。 '例如,如果文件的所有者是超级用户并且文件的 set-user-ID 位已设置,则当该程序文件作为进程运行时,它具有超级用户权限。无论执行该文件的进程的真实用户 ID 是什么,都会发生这种情况。例如,允许任何人更改其密码的 UNIX 系统程序
passwd
(1) 是一个设置用户 ID 程序。这是必需的,以便程序可以将新密码写入密码文件,通常是/etc/passwd
或/etc/shadow
,只能由超级用户写入的文件。由于对其他用户运行 set-user-ID 的进程通常会假定额外的权限,因此必须仔细编写。
假设程序文件中的设置用户 ID 位已设置。
何时将进程的有效用户 ID 更改为文件的所有者,前或者后内核通过文件访问测试决定进程可以执行该文件?
如果是“before”,由于进程的有效用户ID首先被更改为文件的所有者,那么内核不是总是通过文件访问测试来决定进程可以执行该文件吗?
如果是“之后”,由于内核通过文件访问测试决定该进程可以执行该文件,因此该进程必须具有与文件所有者匹配的有效ID,并且该文件也设置了权限位。那为什么还需要将进程的有效用户ID更改为文件的所有者呢?
谢谢。