“进程具有超级用户权限”是什么意思?

“进程具有超级用户权限”是什么意思?

来自APUE

  1. 如果进程具有超级用户权限,则setuid函数将真实用户ID、有效用户ID和保存的set-user-ID设置为uid。
  2. 如果进程没有超级用户权限,但 uid 等于真实用户 ID 或保存的 set-user-ID,则 setuid 仅将有效用户 ID 设置为 uid。真实用户ID和保存的设置用户ID不会改变。
  3. 如果这两个条件都不成立,则 errno 设置为 EPERM 并返回 -1。

“进程具有超级用户权限”是什么意思?

这是否意味着进程的真实用户 ID 为 0,即 root?

这是否意味着进程的有效用户 ID 为 0,即 root?

谢谢。

答案1

在 POSIX 中,如果进程具有超级用户权限,则有效的用户 ID 为 0。

(一些 Unix 风格的系统有不同的机制;例如,在 Linux 上,默认的访问控制系统也考虑功能,您可以创建一个 setuid 二进制文件,它将以 root 有效用户运行,但没有功能,因此无能为力。看联机setuid帮助页.)

APUE正在描述指定的行为setuid。上下文以用户 ID 设置的方式给出exec:如果可执行文件setuid设置了该位,并且在未禁用的情况下安装了其文件系统setuid,则运行它会产生exec一个进程,该进程的有效用户是文件的所有者,其真实和保存的用户是调用用户。

如果setuid使用有效的 root 用户调用,它将替换所有用户 ID;否则它只会替换有效的 id。这最终会令人困惑......这种行为的原因在 POSIX 规范的基本原理中给出:login并且su需要能够以不可撤销的方式更改用户 id,而唯一的方法就是替换所有 id 。

相关内容