为什么root在wheel和operator?扎根在一个团体中会有所作为吗?

Ban*_*ami 17 freebsd login root group

我刚刚在我的 FreeBSD 机器上注意到 root 在轮子和操作员中。我正在尝试考虑这样一种情况,其中 UID 0 在一个组中会对……嗯……任何事情产生任何影响,而我却是一片空白。就此而言,root 甚至需要 /etc/passwd 中的主登录组吗?或者如果用户有一个空白的主要组字段,login(3) 是否会窒息而死?

(澄清一下:我理解“root”组存在的目的,因为文件需要一个组所有者。我不明白用户 root/toor/任何拥有该组成员身份的用户有什么关系。)

这只是几十年前的残留物,还是有真正的原因?

Ouk*_*uki 4

简而言之:不。拥有 root 权限wheeloperator进行分组不会改变任何事情。

但您还质疑另外两件事:

  • 组 ID(默认情况下)设置为 0,这是您可以获得的最接近空值的值。

    $ head -4 /etc/passwd
    # $FreeBSD: releng/9.2/etc/master.passwd 243947 2012-12-06 11:52:31Z rwatson $
    #
    root:*:0:0:Charlie &:/root:/bin/csh
    toor:*:0:0:Bourne-again Superuser:/root:
    
    Run Code Online (Sandbox Code Playgroud)

    如前所述,每个用户都必须有一个组,因此您不能将root组 id(或任何用户 gid)设置为 void 或空白值。如果您尝试将用户 gid 设置为空白,您将收到以下警告pwd_mkdb

    pwd_mkdb: no gid for user root
    pwd_mkdb: at line #3
    pwd_mkdb: /etc/pw.Rlb2U3: Inappropriate file type or format
    re-edit the password file?
    
    Run Code Online (Sandbox Code Playgroud)

    因此,定义root的事实更多的是为了正确命名它,而不仅仅是一个愚蠢的数字。您可以将 root gid 更改为任何无意义的数字(gid 不在 之内/etc/group)。您的root用户仍然可以登录,或者执行rootsu可以执行的其他操作。你最终会得到类似的东西:

    $ id
    uid=0(root) gid=10000 groups=10000,5(operator)
    
    Run Code Online (Sandbox Code Playgroud)
  • 关于为什么有些用户在wheel组中,这是一个完全不同的故事,因为FreeBSD,像OpenBSDNetBSD,用户必须成为rootwheel组的一部分。su

    来自 FreeBSD 文档(第 9.4 章):

    suroot(或任何其他具有超级用户权限的帐户),您必须位于wheel组中。如果没有此功能,则任何在系统上拥有帐户并发现root密码的人都将能够获得系统的超级用户级别访问权限。对于此功能,严格来说这并不正确;如果他们不在wheel中, su (1)将阻止他们甚至尝试输入密码。

    但你是对的,从方向盘上删除root用户不会改变事情。这纯粹是形式上的,就像toor用户也不属于Wheelroot不属于操作员组一样。

  • 然而,操作符组纯粹是形式上的,其本身没有任何特殊含义。

这也是Richard Stallman组的看法(来自gnu su 手册):

为什么GNU“su”不支持`wheel'组======================================== =========

(本节由理查德·斯托曼撰写。)

有时,少数用户试图掌握对所有其他用户的全部权力。例如,1984 年,麻省理工学院人工智能实验室的一些用户决定通过更改 Twenex 系统上的操作员密码并向其他人保密来夺取权力。(我能够阻止这次政变,并通过修补内核将权力交还给用户,但我不知道如何在 Unix 中做到这一点。)

然而,有时统治者确实会告诉某人。在通常的“su”机制下,一旦有人知道了与普通用户同情的root密码,他或她就可以告诉其余的人。“轮组”功能将使这一切变得不可能,从而巩固统治者的权力。

我是站在群众一边,不是站在统治者一边。如果您习惯于支持老板和系统管理员所做的任何事情,那么您一开始可能会觉得这个想法很奇怪。