将 authorized_keys 放在自己的 .ssh 目录中而不是放在 root 的 .ssh 目录中总是更好吗?

信息安全 SSH
2021-08-22 09:56:03

白天,我从 Mac 的终端窗口通过 ssh 连接到多个 Linux 服务器。

在我的 Mac 上,我的 .ssh 目录中有公钥和私钥。

在 Linux 服务器上,我总是在登录后使用“sudo su”来做我需要的事情。

现在我的公钥在我的 Linux 主目录的 .ssh 目录中,在 authorized_keys 文件中。这样我就可以在不发送密码的情况下登录。

但我注意到,因为我有 su 访问权限,所以我可以在 ~root 内的 .ssh 目录中创建一个 authorized_keys 文件。然后访问我可以 ssh 作为 root 而不是我的用户名。

好处就是登录后不用sudo su,省了一步。

缺点是如果每个具有 su 访问权限的人都这样做,我们将不知道谁在任何时候通过 users 命令登录。它总是只显示root。

不过,将我的公钥添加到 ~root/.ssh 目录似乎“太容易”了。

在这种情况下,什么被认为是最佳实践?一般来说,使用我自己的帐户登录然后根据需要执行 sudo su 是否“更好”?

请注意,我不是在问以 root 身份登录 ssh 是否安全,这已在别处讨论过。因为无论如何我都在做“sudo su”,所以我总是成为 root,在这些机器上拥有帐户的少数用户都可以这样做,并且要这样做来完成他们的任务。

我一直在做的是(1)登录;(2) 须藤苏;(3) cd 到某个目录;(4) 做需要做的事情并退出。我每天在多台服务器上这样做几十次。

所以我对处于我这种情况的人感到好奇的是,这样做是否有优势,而不是直接以 root 身份进入并节省一些时间。

谢谢,

道格

3个回答

安全方面,您希望人们不要使用sudosu可以设置 Sudo,以便它记录所有活动,也就是审核日志)。

更多关于大多数 *nix对 ssh 的root访问是被禁止的(在我建议你启用的设置文件中设置)。这是为了防止破坏的 SSH(-server) 可用于 ROOT 访问。

我建议的进一步安全性是使用加密密钥(你有一个密码,你需要输入你的密钥而不是你的登录提示)并使用代理来共享你的公钥。否则,我只需要您存储的密钥即可获得访问权限,从而删除 1 个安全阈值。

此外,限制sudo(和su)仅用于系统管理任务(并且仅用于您无法执行的任务)groups用于共享访问,而不是root.

我什至会建议您在每个连接中使用不同的密钥(不要重复使用密钥,尤其是 id_rsa 密钥)并使用 .ssh/config 来设置何时使用什么密钥。


-> 对“不同键”的附加说明

您使用不同密钥的原因是您具有分层安全性,它可以更轻松地撤销密钥并替换它(而不是“忘记”将您锁定在该服务器之外的旧服务器)并且如果您按照客户端和连接进行操作两端有相同的选项。

特别是如果您控制多个服务器,从长远来看,这可能会变得很麻烦。对于某些系统,我什至有超过 1 个用于隔离权限和权限的密钥(在服务器上有多个“安全区域”,具有不同的密钥(具有不同的密码),因此具有写访问权限的那个与具有 shell 的那个不一样使用权。

我想说明的另一点是,使用尽可能少的权限总是更好。因此,与其使用 su 以 root 身份登录,不如使用 su 成为不同的用户(无论如何,在您的文件夹中具有写入权限的用户,例如 ubuntu 上的 www-data 用于 apache httpd 文件夹)而不是做你的事情,如果你真的需要使用更多权限(更改权限和安装应用程序对我来说主要是那些)使用“sudo [操作](选项)”而不仅仅是 sudo su。不仅留下更清晰的审计日志,它还限制了可能的错误(写入错误的位置,当文件应该由网络服务器拥有时以 root 身份写入文件等),它要求你知道你在做什么。而不是只是去“嘿,上次是这样工作的”。

“须藤苏”就像用管状炸弹拆除墙壁。它可以拆除墙壁,但一个简单的大锤也可以做到这一点(附带损害的可能性较小)。

这一切都是为了管理风险——就像所有这些事情一样。

如果您通常以 root 身份执行所有操作,我建议这是您的问题,而不是登录机制。为什么?好吧,因为您正在以最高级别的特权做所有事情。

这表明您没有正确设置权限和 ACL。理想的情况是没有人应该永远“作为工作的根本” -而只是升级了特权偶尔才能执行该命令要求该权限。

以 root 身份直接登录似乎颇具争议 - 特别是如果您不需要重新验证即可sudo su

就个人而言,我建议您不要这样做,而是:

  • 使用sudo单一的命令,当你需要它。
  • 以“你”的身份正常工作。
  • 设置允许“你”做你需要做的事情的权限。

并限制root您进行的活动量。

以您自己身份登录并使用 sudo 与以 root 身份登录相比,我能想到的只有少数安全优势。

  • 如果您不是机器上的唯一管理员,则可以使用审计跟踪(如果您是唯一的管理员,这根本不适用)
  • 您必须输入密码才能使用 sudo 升级为 root,这提供了针对密钥泄露的边际保护(这并不是真正的安全性;一个聪明的对手可能会简单地做一些事情,比如在 .bashrc 中更改您的 PATH 并使他们自己的“sudo”脚本会在您下次登录时保存您的密码)。如果您为无密码登录配置了 sudo,则此好处根本不适用。
  • 如果您离开开放的 SSH 会话而不锁定控制台(如果您这样做,我将吊销您的系统管理员许可证),您将获得更多保护。

在我看来,大多数人建议您使用普通用户帐户登录并提升为 root 以执行系统管理任务的主要原因并不是真正保护您免受攻击者的侵害,而是保护您免受自己的侵害(那个意外的额外正斜杠在 rm -rf 中,以您的身份运行比以 root 身份运行的危险要小得多)。就个人而言,如果我不希望在机器上执行非 root 任务,我什至根本不会打扰普通用户帐户 - 我将删除它并使用 root(仅)。

如果您偏执并想真正从 sudo 提供的额外保护中受益,我会添加两个 SSH 密钥。为 root 创建一个并将其安装在 /root/.ssh/authorized_keys 中,并为您的普通用户创建一个。编辑 /etc/sudoers 以仅允许您的普通帐户执行需要以 root 身份日常执行的特定任务。对于其他一切,请确保您的组成员身份允许您执行您需要执行的任务。普通用户密钥在您的计算机上。根密钥位于防火保险箱中的闪存驱动器或智能卡/令牌上。权衡是方便(一如既往),但如果你真的认为你需要增加安全性,那是一种解决方法(不是唯一的方法,只是我想到的)。