root 帐户是否始终具有 UID/GID 0?

Tan*_*aki 68 linux root user id passwd

在我管理的所有 Linux 系统上,root 帐户的 GID 和 UID 为 0。这是有保证的,还是系统可能会给 root 一个不同的 ID?

use*_*ser 100

你的问题实际上有两个部分

Linux 上的超级用户帐户是否始终具有 uid/gid 0/0?

是的。正如Rich Homolka评论中指出的那样,内核中有代码在需要检查 root 用户时明确检查 uid 0,这意味着 root 始终至少具有uid 0。

uid 0 的用户帐户的名称总是root吗?

No. root只是一个名称,列在 /etc/passwd 或其他一些身份验证存储中。您也可以调用该帐户admin,操作系统本身不会在意,但某些应用程序可能不太喜欢它,因为它们希望存在一个名为root. 在 *nix 上调用 uid 0 帐户root是一个非常严格的约定,但系统不需要它(尽管某些用户空间软件可能需要它,可能包括系统管理实用程序)。

还值得注意的是,正如Simon Richter所指出的,在 BSD 上,通常存在第二个uid 0 帐户,按照约定命名toor(“root”向后拼写,并且在词法上出现 root按字母顺序排序的列表之后)。例如,FreeBSD 使用它为 root 用户提供自定义的 shell 设置,让 root 用户拥有一个默认的 shell,它保证存在于系统的 root 分区上(用于恢复目的)。

  • 内核中有代码来检查 root,uid == 0。是的,它是硬编码的并且是永久性的。 (15认同)
  • BSD 通常有 `root` 和 `toor`,两者的 UID 都是 0。 (2认同)

Ric*_*lka 17

1)管理员总是uid == 0。这是在内核中编码的。需要在内核中进行一些编码才能改变这一点。这没有太多意义,所以没有完成。例如,对于共享相同 NFS 的其他 Unix 来说,这将是不一致的。

2) uid 0 不一定映射到 root。最好的例子是 FreeBSD。它有两个 uid == 0 帐户,区别在于 shell。root 有 shell /bin/sh,这是一个简单的 shell,当你的磁盘坏了并且你需要 fsck /usr 时很有用。toor 使用 tcsh,这在非紧急情况下更有用,因为它具有历史等内容。

另一个更个人化的例子;我有一份工作,他们在 NIS 上有一个 root equiv(即 uid=0)帐户。密码,空白!因为新的系统管理员不记得机器上的 root 密码。出于显而易见的原因,我对此大喊大叫(根据定义,NIS 密码无法隐藏其空白)。我对这个帐户不满意。

确实不是给 uid 0 的系统是 root,而是你。您可以使用 passwd 文件或其他命名目录(NIS、ldap)更改它,但它没有被编译。尽管您应该在 /etc/passwd 中至少有一个 uid 0 帐户,因为当您真正需要它时可能没有网络.

所以 root 总是 uid 0,但 uid 0 不一定总是 root。

  • @Tanaki 一般来说,“接受”最能帮助您回答问题的答案,并为您认为有用的所有答案点赞。没有什么说你必须接受最高投票或第一个书面答案。 (5认同)
  • 噢,只选择一个被接受的答案的痛苦...... (2认同)