ArchWiki - rsnapshot 页面uid
提到使用和gid
设置为 创建多个用户0
作为创建远程登录以执行备份的用户的一种方法。
为了减轻备份服务器漏洞造成的潜在损害,您可以采取的一件事是在客户端计算机上创建备用用户,并将uid和gid设置为 0,但使用限制性更强的 shell,例如 scponly。
我认为目的是为这些帐户提供用户的读写执行权限,root
但前提是他们的登录 shell 给予他们减少的权限。
这是否意味着即使帐户具有相同的gid
并且uid
它们仍然通过帐户名进行区分并且具有相同的gid
并uid
赋予它们相同的访问权限?
就操作系统上的权限而言,所有权限都与 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 权限执行。
有几种情况会考虑用户名,主要是在登录期间:用户名决定要考虑的用户条目(例如from )以及任何辅助组(例如from )。
/etc/passwd
/etc/group
多个用户可以共享给定的 uid 和/或主要 gid,但仍然具有不同的 shell 和辅助组。一旦定义了给定会话的 uid 和 gids,这通常就是最重要的 — 进程具有 uid 和 gids,而不是用户名和组名。权限由 id 决定,而不是由名称决定。
过去,系统拥有多个 id 0 帐户是很常见的:一个帐户具有常规 shell,另一个帐户具有静态链接的救援 shell。备份 id 0 帐户,能够复制任何文件,也不是闻所未闻(正如您提到的)。这两种用例都变得越来越少。直接 root 登录并不常见,恢复系统不需要静态 shell,而基于拉取的备份系统往往依赖于守护进程。