程序文件的set-user-ID有什么用?

程序文件的set-user-ID有什么用?

来自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更改为文件的所有者呢?

谢谢。

相关内容