对服务帐户使用的 SSH 私钥进行密码保护有什么意义吗?

信息安全 SSH 服务帐户
2021-09-11 11:05:37

在我的 Linux 机器 (Alice) 上,我正在使用 rsync cron 作业设置一个服务帐户,该作业将与远程主机 (Bob) 同步一些文件。显然,我想通过使用带有密钥对的 SSH 来确保 rsync 的安全。

所以我的问题是:密码保护私钥有什么意义吗?

如果我对私钥进行密码保护,显然我不会将密码放入 cron 作业脚本中。我需要设置一个持久的后台ssh-agent进程,以便 cron 作业可以使用它。但是,这不是有点违背密码保护的目的吗?如果有人可以闯入爱丽丝,难道他们不能只使用持久性ssh-agent来做他们需要做的所有坏事吗?

我相信唯一的(轻微的)优势是,即使入侵者可以复制私钥,他们也无法在其他地方使用它,因为他们不知道密码。

2个回答

在这些场景中,我将私钥保持为未加密状态(除非可能位于已加密的磁盘上),读取权限仅限于 root 并且 cronjob 以 root 身份运行,但尽我所能将此密钥的用处限制为非常具体的任务(相对于允许它以完全访问权限登录远程计算机)。

这可以通过配置~/.ssh/authorized_keys为在使用特定密钥登录时自动运行特定命令来相当简单地完成。

command="/usr/bin/remote_commands_to_run.sh",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty
ssh-rsa AAAAB3Nz...DfE= root@some_client

有关更多信息,请参阅此答案您应该小心,其中的命令/usr/bin/remote_commands_to_run.sh不允许攻击者逃到 shell。在远程机器上创建一个受限帐户也可能是有意义的,比如/bin/false运行远程命令的外壳(例如,将与该受限用户的私钥相关联的公钥放入该受限用户的authorized_keys)。

与往常一样,在设置之后,尝试并测试以确保密钥没有比您预期的更多的权限(例如,sftp 不起作用,rsync 不起作用等)。

在进一步通知中,我看到您的特定任务是 rsync 数据(大概在特定目录中)。这对于有限的帐户可能是可行的(例如,chroot 只能查看那些无法访问 shell 的特定目录)。我相信像 rssh 这样的工具可以用来做到这一点;咨询超级用户或服务器故障以获得最佳建议。

当然,我在这种情况下所做的是将特定目录挂载为网络驱动器(例如,通过 NFS / sshfs),然后在 cron 脚本中对挂载的目录执行 rsync。

我认为密码保护是明智的。有总比没有好。但是,就像你说的,如果 Alice 的机器被攻破了,即使有私钥,没有密码也是没有用的。但是,如果机器被攻破,攻击者可以简单地等待 Alice 输入密码,并且可以使用键盘记录器轻松捕获。