保存的用户标识的目的

Tre*_*rey 2 c unix linux

setuid()位置1的情况下运行程序与以 该程序的所有者身份运行程序相同。执行程序通常退出后,为什么我们必须切换回真实用户ID?

另外,维基百科文章指出:

当以提升的特权运行的程序需要临时执行一些无特权的工作时,将使用保存的用户ID(suid)。

为什么会这样呢?为什么特权进程会降低其特权,但我对此无能为力。

dbu*_*ush 5

出于保存的用户ID的目的进行扩展,它还允许使用提升特权运行的进程,然后在需要时将其删除以恢复为提升特权。

假设ID为1001的用户运行setuid-root程序。程序启动时,各种用户ID设置如下:

  • 实际UID:1001
  • 有效UID:0
  • 保存的UID:0

在启动时将保存的用户ID设置为有效用户ID,可以使用户在需要时随时返回该用户ID。

此时,该程序具有根特权。该程序然后可以执行以下操作:

// 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
Run Code Online (Sandbox Code Playgroud)