如何创建第二个“根”:

如何创建第二个“根”:

如果我在 Ubuntu 中创建了一个名为 的用户帐户root,它会自动拥有 root 权限吗?

答案1

用户名必须是唯一的,因此,正如欧文·海因斯的回答,您将无法创建此用户。但是,这里的关键点是超级用户权限(所有可能的权限)不是由用户名授予的root,而是由 UID 授予的。

UID 0 的用户是超级用户。

因此,如果 UID 为 0 的用户具有不同的名称,并且您创建了一个名为 的用户root,则他们将不会具有任何特殊状态。

我建议你标签 wiki!

答案2

它不会让你这么做,因为那里已经有一个root用户了。

但,正如弗洛里安·迪施在评论中说:

有些工具会抱怨,但您随时可以编辑/etc/passwdetc/shadow手动创建名为的第二个用户root

答案3

首先,正如其他人所说,你将 UID 为 0 的用户更改为其他用户。然后,你可以创建一个普通用户,其名称为 root,UID 大于 1000。它会“正常工作”。所有权限和核心系统功能都使用 UID 而不是用户名。事实上,这是强化 Linux 系统的良好第一步。(最好禁用 root,但在 sudo 出现之前我们曾经这样做过)。

现在看看会发生什么。

大多数情况下什么都没有。所有与授权或身份验证有关的系统调用都使用 UID(据我所知)。这种情况已经持续了一段时间。您的系统将继续照常运行。系统工具将反映新的用户名,但继续正常工作。换句话说,“root”是惯例,而不是一成不变的。

话虽如此,我确信有些工具和程序写得不好。检查 $USER 环境变量的程序可能会出现错误。通常这些是脚本和小项目,但你可以花些时间追踪 6 年前 fdisk 中那个让你头疼的错误提交。

这是我以前经常做的事情。这是一个简单的步骤,并且符合“不可预测的用户名”规则。不过,现在有更好的方法来实现同样的目标。

答案4

如何创建第二个“根”:

是的,理论上,不能有两个用户名或 ID 相同的用户。标准实用程序是万无一失的,不会为您创建这样的用户。但您始终可以手动编辑 /etc/passwd。

例如,我这样做了:

$ sudo adduser root2 # created ordinary user
$ sudo vim /etc/passwd # edit last line, change 'root2' to 'root'. 
$ sudo -u '#1002' id # 1002 is UID of new user, it's in last line of /etc/passwd
uid=1002(root) gid=1002(root2) группы=1002(root2)

如您所见,我们现在是 root 了!是的,那不是真正的 root(不是 uid=0),但四个字母是一样的。令人印象深刻,但毫无用处。

如何创建更好的第二个“根”:

另外,您还可以进行其他修改。保留原有的用户名(您的姓名或 root2),但更改 uid。

$ tail -n 1 /etc/passwd
root2:x:0:0:,,,:/home/root2:/bin/bash

(看,UID 和 GID 字段是零)现在您拥有普通(非 root)用户,并且几乎没有可疑的用户名(或者将用户名设为“johndoe”以获得更好的效果),但实际上,这个用户拥有超能力!

$ fdisk /dev/sda
fdisk: unable to open /dev/sda: Permission denied
$ sudo -u root2 fdisk /dev/sda

Command (m for help):

如您所见,普通用户无法在 /dev/sda 上使用 fdisk,但 root2 可以执行任何操作!

这个简单的技巧有时会在系统被黑客入侵后用来提供后门。即使真正的 root 会更改其密钥/密码,黑客仍然可以通过 uid=0 的其他用户完全控制系统。

矩阵的工作原理

实际上,用户名“root”和 uid=0 本身都没有什么神奇之处。这只是惯例问题。甚至并不总是如此。(参见这个问题: 根帐户的 UID/GID 是否始终为 0?)内核代码很神奇。实际上,用户空间代码本身- 无法执行 root 可以执行的任何操作。即使以 root 身份运行!root 权限在内核中。例如,如果您执行“cat /etc/shadow”(通常只有 root 可以执行此操作),/bin/cat 程序将调用 libc open() 函数,该函数仍是用户空间代码,并且此 open() 函数执行对内核的系统调用。然后内核本身决定要做什么。例如,如果有效用户的 id==0,内核可能会允许某些操作。

理论上,如果您更改内核中的某些代码并以不同的方式处理“www-data”用户 - 某些操作可能只允许“www-data”用户执行(甚至不允许 root 用户执行)。

相关内容