Answers:
您的问题实际上有两部分。
在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
是一个非常严格的约定,但这不是系统所必需的(尽管某些userland软件可能会要求它,可能包括系统管理实用程序)。
另外值得一提的是,正如指出的西蒙·里希特,在BSD系统往往会有存在第二 UID 0帐号,名为惯例toor
(这是“根”的反写,也词法来后, root
在列表中按字母顺序排序)。例如,FreeBSD使用它为root用户提供自定义的shell设置,为root用户提供默认的shell,该shell保证存在于系统的根分区中(用于恢复目的)。
root
和toor
,都与UID 0
root
,因此,只要身份验证存储库不会被两个具有相同UID的用户混淆,就不会出现任何问题(在这种情况下,BSD不会这样做)方式,否则库将被修复)。
1)管理员总是uid ==0。这是在内核中编码的。要更改此设置,需要在内核中进行一些编码。没有太多意义,所以还没有完成。例如,对于其他共享相同NFS的UNIX,这将是不一致的。
2)uid 0不一定映射到root。最好的例子是FreeBSD。它有两个uid == 0帐户,区别在于外壳。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。
对于使用nonStop服务器的系统来说,ROOT_UID不是0,而是65535。
OSS用户和组 OSS环境不提供通用的UNIX默认用户名和用户ID,除非它们是由站点管理员明确创建的。但是,确实存在等效的OSS用户名和用户ID。例如,对于65535(超级ID)的OSS用户ID(UID),通常具有与UNIX用户名root和用户ID 0相关联的特权,即用户SUPER.SUPER及其别名。
参见https://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf
在coreutils中,您可以找到该root-uid.h头文件:
/* The user ID that always has appropriate privileges in the POSIX sense.
Copyright 2012-2016 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
Written by Paul Eggert. */
#ifndef ROOT_UID_H_
#define ROOT_UID_H_
/* The user ID that always has appropriate privileges in the POSIX sense. */
#ifdef __TANDEM
# define ROOT_UID 65535
#else
# define ROOT_UID 0
#endif
#endif