是否可以在Linux上创建多个具有相同UID和GID的用户,特别是UID和GID 0?

是否可以在Linux上创建多个具有相同UID和GID的用户,特别是UID和GID 0?

ArchWiki - 快照页面提到使用uidgidset to创建多个用户0作为创建远程登录以执行备份的用户的一种方法。

为了减轻备份服务器漏洞造成的潜在损害,您可以做的一件事是在客户端计算机上创建备用用户uid吉德设置为 0,但使用限制性更强的 shell,例如 scponly。

我认为目的是为这些帐户提供用户的读写执行权限,root但前提是他们的登录 shell 给予他们减少的权限。

这是否意味着即使帐户具有相同的gid并且uid它们仍然通过帐户名进行区分并且具有相同的giduid赋予它们相同的访问权限?

答案1

就操作系统上的权限而言,所有权限都与 UID 和 GID 相关,而不是与名称相关。因此,如果某人的 UID 为 0(在传统的 Unix 模型中),那么他们就是 root,并且拥有与之相关的所有权限,无论用于登录的名称如何。

但是,远程登录时,同一 ID 可以有多个用户名,并为每个用户提供不同的 shell。因为传统的 Unix passwd 和 Shadow 数据库按用户名存储 shell 和其他信息,所以如果您为 UID 0 指定备用用户名,例如toor(某些系统上的常见替代方法),则数据库中列出的该用户的 shell 和密码将进行咨询以确定访问权限和要使用的 shell。登录成功后,OpenSSH 或登录进程会将用户和组更改为给定的 ID,并运行指定的 shell。

登录后,该进程仍将具有 root 权限,但其运行的 shell 可能只允许访问一组有限的程序。假设 shell 确实受到限制并且不允许其他访问,则可以通过这种方式限制访问。然而,对该 shell 的任何损害(例如,由于错误)都将允许以 root 权限执行。

答案2

有几种情况需要考虑用户名,主要是在登录期间:用户名决定用户条目(例如来自/etc/passwd) 被考虑在内,以及任何次要组 (例如/etc/group)。

多个用户可以共享给定的 uid 和/或主要 gid,但仍然具有不同的 shell 和辅助组。一旦定义了给定会话的 uid 和 gids,这通常就是最重要的 — 进程具有 uid 和 gids,而不是用户名和组名。权限由 id 决定,而不是由名称决定。

过去,系统拥有多个 id 0 帐户是很常见的:一个帐户具有常规 shell,另一个帐户具有静态链接的救援 shell。备份 id 0 帐户,能够复制任何文件,也不是闻所未闻(正如您提到的)。这两种用例都变得越来越少。直接 root 登录并不常见,恢复系统不需要静态 shell,而基于拉取的备份系统往往依赖于守护进程。

相关内容