我和一位朋友正在管理相当数量的虚拟机,每个虚拟机专用于整个系统中的某些任务。当我们需要管理它们时,我们通常以 root 身份登录,因为我们登录到计算机的唯一时间是当我们需要在其中执行管理任务时。我们不使用 sudo,因为我们执行的每个命令通常都是 sudo 命令。
我们希望在这些计算机上保持我们的帐户分开,以便为我们提供单独的 .bash_history,查看另一个计算机上次登录的时间等。为此,我们需要两个具有完全 root 权限的帐户。
一种方法是将我们的普通用户帐户更改为具有 UID=0 GID=0,即与 root 相同,但是在这个问题中我被劝阻了该解决方案:通过使用户 UID=0 GID=0 来授予用户 root 权限是否有任何问题?
[这个问题与此相同,到目前为止]
该问题的答案是使用 sudo,但正如我提到的,sudo 对于我们的用例来说非常不方便。在这些虚拟机上执行的几乎所有命令都是 sudo 命令(并且| sudo tee >\dev\null
对于每个输出重定向都令人头脑麻木!),因此 sudo 可能比拥有单独的历史记录更不方便,而其他帐户日志记录是一个优势。
我的后续问题就变成了:除了 sudo 之外,是否有一种可靠的方法可以使多个用户帐户充当 root 角色?或者有没有办法让 sudo 更方便(除此之外sudo -i
达不到目的)。
答案1
如果您使用sudo -s
的$HOME
未更新,那么您的 shell 历史记录将保存在您自己的帐户中。
(请记住,其他配置/历史文件,例如由 所创建的文件vim
,也会以 root 身份创建。这意味着您最终可能会在主目录中得到 root 拥有的文件。当您想要时,这可以创建“有趣”的情况无需 root 即可修改它们,有时您需要运行类似的操作chown -R myusername "$HOME"
来修复它。)
答案2
以下是我们在之前的工作中处理此问题的方法。
首先,我们有一个安全的堡垒主机,管理员登录该主机即可对目标计算机进行所有根访问。该主机配置了一个特殊keymaster
帐户,该帐户保存与目标主机上的 root 相对应的私钥。 (我们还有一个系统,新主机可以自动注册。但这超出了本文的范围。)
管理员将使用用户级帐户登录此堡垒主机,然后连接到目标系统。
除了我们少数人能够访问堡垒主机本身的 root 权限之外,没有管理员实际上可以直接访问密钥;相反,他们使用connect
在 sudo (as keymaster
,而不是 root)下运行的命令进行连接。该连接命令将环境变量设置REMOTE_ADMIN
为连接用户的名称,并以 root 身份连接到目标系统。
然后、远程系统设置为AcceptEnv=REMOTE_ADMIN
insshd_config
和 .bashrc 文件设置BASH_HISTORY
为~/.bash_history-$REMOTE_ADMIN
。
通过这种设置,不同的.bash_history
文件不是安全记录,但它们至少是不同的,以便非恶意地回顾所发生的事情。安全记录位于堡垒主机上,显示谁在何时进行连接。 (我们也对命令使用了 2FA sudo connect
。)
此外,除了破坏主机之外,无需担心指定系统之外的 root 访问(无论是恶意的还是只是为了“方便”)。虽然密钥可以退役,但没有必要仅仅因为某人的访问级别发生变化就这样做。
您可以使用该解决方案的全部或部分;仅仅拥有.bash_history-$SUDO_USER
可能就足够了,具体取决于您真正想要实现的目标。