我和一位朋友正在管理多个虚拟机,每个虚拟机专用于整个系统中的某些任务。当我们需要管理它们时,我们通常以 root 身份登录,因为我们登录到计算机的唯一时间是当我们需要在其中执行管理任务时。我们通常不使用 sudo,因为我们执行的每个命令通常都是 sudo 命令。
我们希望在这些计算机上保持我们的帐户分开,以便为我们提供单独的 .bash_history,查看另一个计算机上次登录的时间等。为此,我们需要两个具有完全 root 权限的帐户。
一种方法是将我们的普通用户帐户更改为 UID=0 GID=0,即与 root 相同。问题是:多个用户帐户具有相同的 UID 和 GID(特别是与 root 相同)是否存在任何陷阱(即意外或不明显的影响)?
PS 我在超级用户那里问过这个问题,但这只为我赢得了一个风滚草徽章,所以我在这里尝试。
答案1
显然,您能够以“root”身份完成(大部分)任务,因为重要的是拥有正确的 id 和 gid;然而,将两个新帐户都作为 root 是行不通的,因为您希望区分您和您朋友的操作/登录。
通常,系统或其他软件会感到困惑,并会显示一个用户具有另一个用户的名称、完全不同的用户甚至是根名称。 (例如,如果三个用户具有相同的 id/gid,系统会因您的目的而变得有些混乱);您甚至可能正在登录,但想知道为什么系统说您有另一个登录名。
我建议您使用属于 sudo 组的常规帐户,并使用 sudo 有一些纪律,避免滥用sudo su
作为常规 root 进入;正如您提到的,使用所有 root 命令作为 sudo 命令的优点是,忽略轻微的不便,您已经根据执行此操作的正确用户进行了登录。
从安全角度来看,root 用户通常有多种限制,系统可能不会对具有相同 id 的其他用户施加这些限制。一个很好的例子是 sshd 默认情况下不允许远程 root 登录。还会有其他人。
到目前为止。 Unix 中的许多东西在历史上都是假设 root 的 id/gid 为 0 来构建的。尝试以非传统方式解决这个问题会带来一些惊喜。
答案2
你是不是只是“给你的普通用户帐户 UID=0,GID=0”。您正在创建(或将它们转换为)两个额外的根帐户。 UID=0(以及 GID=0)定义了 root 帐户。
任何系统都可以有多个 root 帐户,并且它们是全部一个根帐户。系统甚至不需要有一个名为 的帐户root
。 root 帐户可以有任何名称。
它们在任何方面都与 root 无法区分(除了getent passwd
登录名、主目录和 shell 等可能的字段 - 但即使如此也不能 100% 保证,具体取决于登录/ssh/其他内容如何/何时获取这些字段),因为它们是根。
这样做有很多“陷阱”,几乎全部源于这样一个事实:这些帐户运行的所有内容都将以 root 身份运行。
这是一个坏的主意。不要这样做。代替使用sudo
。
顺便说一句,freebsd 系统通常有第二个root
帐户,称为toor
.它通常使用/bin/sh
(或bash
或ksh
或zsh
或其他)作为外壳,而不是克苏鲁外壳(csh
或tcsh
)。这样做并不是为了与其他人共享 root,这样做是为了方便地使用您的首选 shell 作为 root,而不需要更改实际命名的帐户的 shell root
(这有很小但确实可能破坏假设的事情)根的外壳将是csh
)。 tcsh/csh 确实是可怕的、破坏理智的怪物,不应该使用,但exec bash
一旦你su
获得 root 权限,输入它就非常容易了。
最后,如果您想要单独的历史文件,例如,sudo -i
则编辑~root/.bashrc
并添加如下内容:
HISTFILE="~/.bash_history.${SUDO_USER:-root}"
这将根据 root 是否登录(例如在控制台或通过ssh
)或某人sudo
登录到 root 来设置不同的 HISTFILE。
如果您希望 HISTFILE 在该 shell(以及它可能生成的任何子 shell)中不可更改,请在之后立即添加以下内容:
readonly HISTFILE