Answers:
用户名必须是唯一的,因此,如Owen Hines的回答所述,您将无法创建该用户。但是,关键是超级用户的权限(所有可能的权限)不是由username授予的root
,而是由UID 授予的。
UID为0的用户是超级用户。
因此,如果UID为0的用户具有不同的名称,并且您创建了一个名为的用户root
,那么他们将没有任何特殊状态。
我推荐您使用根标签Wiki!
root
。这不是一个好主意,但可能。因此,例如,可以创建一个god
使用uid 调用的超级用户帐户0
,以及一个root
使用uid 1000
或其他编号调用的普通用户。
首先,如其他人所述,如何将UID 0的用户更改为其他用户。然后,您可以创建一个具有root用户名和UID大于1000的普通用户。它将正常运行。所有权限和核心系统功能都使用UID,而不使用用户名。实际上,这是加强Linux系统的良好第一步。(最好禁用root,但是在sudo之前我们曾经这样做)。
现在,将要发生什么。
大多数时候什么都没有。所有与授权或身份验证有关的系统调用都使用UID(据我所知)。这已经有一段时间了。您的系统将继续正常运行。系统工具将反映新的用户名,但仍可继续正常工作。换句话说,“根”是约定俗成的,并非一成不变。
也就是说,我敢肯定有些工具和程序编写得不好。检查$ USER环境变量的程序可能行为不正确。通常这些都是脚本和小型项目,但是您可能需要花一些时间来追踪6年前在fdisk中的一次错误提交,这让您很头疼。
这是我一直都在做的事情。这是一个简单的步骤,属于“不可预测的用户名”的规则。但是,今天有许多更好的方法可以实现相同的目标。
是的,从理论上讲,绝对不能有两个用户使用相同的用户名或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用户使用)。