使用ssh公钥的风险


10

我有服务器A服务器B(备份),我想知道是否有人闯入服务器A,如果使用ssh公钥配置了无密码登录,闯入服务器B是否有潜在的危险?

我正在尝试设置rsnapshot。

谢谢

ssh 

Answers:


21

是的,这是无密码SSH密钥的问题之一。如果您在服务器A上存储允许您连接到服务器B的私钥,则获得对服务器A的访问权限实际上就是获得对服务器B的访问权限。(并非相反:获得服务器B的访问权限不会导致访问服务器B假设您还没有设置SSH密钥以允许该方向上的无密码登录,则服务器A会立即遭到破坏。

您可以采取一些措施来减轻这种情况:

  • 如果不需要完全自动化该过程,请向您的SSH密钥添加密码。(这可能对您不起作用,因为您注意到这是用于备份的)
  • 对于使用您自己的帐户以无密码方式登录多台计算机,我建议为您实际键入的每台计算机创建一个密码密钥,并在使用该密钥时使用SSH代理将密钥存储在内存中。代理转发应允许您在主机之间“跳跃”,而无需在每个远程主机上创建密钥。
  • 对于自动无密码SSH密钥,我建议限制密钥可以运行的命令。在authorized_keys文件中,为每个键添加以下前缀:
    command="<allowed command line here>",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty

8-9年前,我在与数百个本地用户共享的用户环境中工作,由于无法对密钥实施密码策略,因此基于SSH密钥的登录被禁用。只要您完全控制该方案,如今SSH密钥肯定比仅使用密码更好。


7

是的,Internet上的大多数指南都停止了使无密码的SSH正常工作,而不是使其安全运行。该指南很好地说明了可以减少风险的方法。基本上(引用本文):

  • 为工作创建一个单一用途的角色帐户:即dnssync每台计算机上的一个用户
  • 如果可行,请使该用户可写文件,而不要依靠root用户身份
  • 对于确实需要特权访问的那些位,创建一个脚本来执行,然后使用sudo
  • 在文件中使用command=from=选项authorized_keys来限制无密码密钥
  • 要进行文件传输,请在接收计算机上编写一个脚本以使用rsync进行操作,以便远程访问可以是只读的
  • 如果这意味着需要从远程计算机访问启动计算机,请使用ssh-agent而不是创建第二个无密码密钥

4

ssh键有两个问题:

没有集中的方式来撤销密钥。

无法对密钥实施密码策略(您的私钥是否已加密,如果已加密,则使用正确的密码加密吗?)。

这些是kerberos解决的问题。但是,它引入了其他方面,即实施起来更加复杂,并且需要真实的用户管理基础结构来进行部署和管理。

无论如何,尽管sshauthorized_keys允许进行morris-worm类型的攻击,但它仍然比.r服务和telnet更好(以英里为单位)(光年)


如果您使用的是LDAP,则可以将公钥存储在目录中,然后使用(OpenSSH-LPK补丁程序)[ code.google.com/p/openssh-lpk/] -这有助于解决第一个问题,尽管现在必须构建和分发新的SSH二进制文件,总体收益可能是负面的。
Zanchey

这很有趣,但是听起来这几乎和设置kerberos一样多。
克里斯,

2

在我控制的任何环境中,我一直都是真正的坚持不懈地追求服务帐户的最低特权。

在这种情况下,我建议确保仅允许远程服务器上的用户帐户运行一组严格定义的小型可执行文件。您可以在远端使用多个帐户并使用sudo来完成此操作。

即使在这种情况下,您仍然会受到本地特权升级错误的影响,因此,请务必谨慎并严格跟踪安全错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.