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


50

在我管理的所有Linux系统上,root帐户的GID和UID为0。是否可以保证这一点?或者系统是否可以为root提供不同的ID?


3
ID 0拥有所有权利。实际名称(或名称-multiple-)可以不同。例如,我的服务器有两个uid 0用户。一个叫做“根”,一个叫做“ toor”。
Hennes

Answers:


80

您的问题实际上有两部分

在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保证存在于系统的根分区中(用于恢复目的)。


15
内核中有代码检查root,uid ==0。是的,它是硬编码的并且是永久的。
Rich Homolka

1
BSD通常具有roottoor,都与UID 0
西蒙里克特

@SimonRichter在这种情况下,存在一个名称为的超级用户帐户root,因此,只要身份验证存储库不会被两个具有相同UID的用户混淆,就不会出现任何问题(在这种情况下,BSD不会这样做)方式,否则库将被修复)。
2013年

内核中有使用UID = 0表示root的代码,并将其存储在名为“ root_uid”的变量中,但我什么都没找到(6年后),这实际上取决于用户名为 “ root”。但是,无论UID是否在/ etc / passwd中,最终都会有w / UID = 0启动的进程。:)
dannysauer

15

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。


1
Oof,只选择一个可接受的答案的痛苦...
Tanaki

5
@Tanaki通常,“接受”最能帮助您回答问题的答案,并支持所有您认为有用的答案。没什么好说的,您必须接受票数最高或写得第一的答案。
CVn

1

对于使用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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.