进程的用户和组之间的关系

进程的用户和组之间的关系

对于一个过程来说,

  1. 它的真实用户一定是其真实组的成员吗?

  2. 其有效用户是否一定是其有效组的成员?

  3. 它的真实用户一定是其有效组的成员吗?

  4. 它的有效用户是否一定是其真实组的成员?

如果重要的话,我正在谈论 Linux。

谢谢。

答案1

不不不不:

我将解释uid(与gid相同)进程可以在有效、真实和其他之间移动ID。当且仅当进程具有 CAP_SETUID 能力时,它还可以任意设置 ID。

我们看一下UID和GID的实现方式:

这两个数字都存储在一个数据库表(一个文件)中,这两个表是独立的。我有一个 UID 和一个主 GID。两人都打电话给理查德,但号码不同。唯一的连接是:在 /etc/passwd 中,它列出了用户名、UID 和主 GID。在 /etc/group 中,它列出了组名、GID、UID。

大多数时候,这些关系不会被检查,除了:登录时和调用 setgid 时(我认为)。

为了提高效率,仅检查必要的内容。

  • 进程可以在有效、真实和其他(文件、保存)之间移动 ID。
  • 当且仅当进程具有 CAP_SETUID 能力时,它还可以任意设置 ID。

--

来自手册页setreuid(),

setreuid()设置调用进程真实有效的用户ID。

为真实或有效用户 ID 提供值 -1 会强制系统保持该 ID 不变。

非特权进程只能将有效用户ID设置为真实用户ID、有效用户ID或保存的设置用户ID。

非特权用户只能将真实用户ID设置为真实用户ID或有效用户ID。

如果设置了真实用户ID或将有效用户ID设置为不等于之前的真实用户ID的值,则保存的设置用户ID将被设置为新的有效用户ID。

完全类似,setregid()设置调用进程的真实有效的组ID,并且以上所有内容都适用于“组”而不是“用户”。

相关内容