使用 setuid() 运行程序位设置与以该程序的所有者身份运行它是一回事。执行完程序一般都会退出,为什么还要切换回真实用户ID呢?
另外,wikipedia文章指出:
The saved user ID (suid) is used when a program running with elevated privileges needs to do some unprivileged work temporarily.
为什么会这样?为什么特权进程会降低其特权,我无法理解这个问题。
最佳答案
扩展保存的用户 ID 的用途,它还允许以提升的权限运行并随后删除它们的进程在需要时返回到提升的权限。
假设 ID 为 1001 的用户运行一个 setuid-root 程序。程序启动时,各种用户ID设置如下:
- 真实 UID:1001
- 有效 UID:0
- 保存的 UID:0
在启动时将保存的用户 ID 设置为有效用户 ID 允许用户在需要时返回到此用户 ID。
此时程序拥有root权限。然后该程序可以执行以下操作:
// perform privileged commands
seteuid(1001); // drop privileges, euid is now 1001
// perform unprivileged commands
seteuid(0); // raise privileges, euid is now 0, allowed because saved UID is 0
// perform more privileged commands
seteuid(1001); // drop privileges, euid is now 1001
// perform more unprivileged commands
关于c - 保存用户 ID 的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47400704/