如果我创建一个名为“ root”的帐户会怎样?


30

如果我在Ubuntu中创建了一个名为的用户帐户root,它会自动具有root权限吗?破坏系统?在矩阵中引起毛刺?会发生什么?


25
已经有一个名为root的帐户。
mikewhatever

Answers:


46

用户名必须是唯一的,因此,如Owen Hines的回答所述,您将无法创建该用户。但是,关键是超级用户的权限(所有可能的权限)不是由username授予的root,而是由UID 授予的。

UID为0的用户是超级用户。

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

我推荐您使用标签Wiki!


您可以重命名现有的帐户根目录,然后创建常规用户根目录吗?
2016年

附带说明一下,似乎可以(虽然我还没有尝试过)将uid 0用户名更改为其他名称,所以不调用superuser root。这不是一个好主意,但可能。因此,例如,可以创建一个god使用uid 调用的超级用户帐户0,以及一个root使用uid 1000或其他编号调用的普通用户。
伊恩·斯科特

15

它不会让您,因为已经有一个root用户。

但是,正如Florian Diesch在评论中所说:

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


2
如果您这样做,会发生什么chown root file
fkraiem

1
@fkraiem,嗯..好问题,我不知道答案。
TheOdd

3
曾经发生的是文件中的第一个获胜。我现在不知道
约书亚

5

首先,如其他人所述,如何将UID 0的用户更改为其他用户。然后,您可以创建一个具有root用户名和UID大于1000的普通用户。它将正常运行。所有权限和核心系统功能都使用UID,而不使用用户名。实际上,这是加强Linux系统的良好第一步。(最好禁用root,但是在sudo之前我们曾经这样做)。

现在,将要发生什么。

大多数时候什么都没有。所有与授权或身份验证有关的系统调用都使用UID(据我所知)。这已经有一段时间了。您的系统将继续正常运行。系统工具将反映新的用户名,但仍可继续正常工作。换句话说,“根”是约定俗成的,并非一成不变。

也就是说,我敢肯定有些工具和程序编写得不好。检查$ USER环境变量的程序可能行为不正确。通常这些都是脚本和小型项目,但是您可能需要花一些时间来追踪6年前在fdisk中的一次错误提交,这让您很头疼。

这是我一直都在做的事情。这是一个简单的步骤,属于“不可预测的用户名”的规则。但是,今天有许多更好的方法可以实现相同的目标。


您的意思是我认为的UID
Zanna

1

正如其他人所解释的,它是UID = 0赋予用户“超级大国”的权限,而不是用户名是“ root”的用户。因此,如果您设法以某种方式创建了另一个名为“ root”的用户(在重命名/删除原始用户之后),那么该用户的超级状态将取决于您为其提供的UID。

这也引出了另一个有趣的想法:完全可能有多个具有相同UID的用户(从文件系统权限的角度来看,这使他们本质上是同一用户,但允许具有不同的外壳目录和主目录)。实际上,某些类似UNIX的系统具有另一个称为toor(向后root)的超级用户帐户,该帐户允许拥有两个具有不同设置的超级用户帐户。


1

如何创建第二个“根”:

是的,从理论上讲,绝对不能有两个用户使用相同的用户名或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)

如您所见,我们现在已经扎根!是的,那不是真正的根(不是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本身都不是魔术。这只是惯例问题。甚至并非总是如此。(请参阅此问题: root帐户是否始终具有UID / GID 0?)内核代码是不可思议的。实际上,用户空间代码本身 -无法执行root可以执行的任何操作。即使以root身份运行!根源在内核中。例如,如果您执行“ cat / etc / shadow”(通常只有root用户可以执行此操作),则/ bin / cat程序将调用libc open()函数,该函数仍是用户空间代码,而此open()函数将对内核执行系统调用。然后内核本身决定要做什么。例如,如果有效用户的id == 0,内核可能允许某些操作。

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


0

大多数“用户友好”工具都会对此进行检查,并且不允许您使用已使用的用户名创建帐户。

如果您绕过此操作,然后将另一个根帐户手动添加到/ etc / passwd和/ etc / shadow中,那么将使用哪个帐户,我想这取决于您将其放在原始帐户之前还是之后。像Unix系统上的所有用户帐户一样,仅当其UID为零(无论其名称)时,它也将具有超级用户访问权限。

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.