在团队中管理 SSH 密钥的最佳实践是什么?

Eva*_*mou 46 security ssh keys

我与具有以下特征的开发人员和管理员的小团队(<10)一起工作:

  • 团队大部分成员拥有>1台个人电脑,其中大部分是便携式的
  • 团队成员可以访问 10-50 个服务器,通常使用 sudo

我认为这对于大多数初创公司和中小型企业 IT 团队来说是非常典型的。

在这样的团队中管理 SSH 密钥的最佳实践是什么?

您应该为整个团队共享一个密钥吗?

每个人是否应该在共享帐户(每台服务器上的“ubuntu”)上拥有自己的密钥?

分开账户?

每个团队成员是否应该为他们的每台笔记本电脑或台式电脑保留一个单独的密钥?

Mar*_*ins 34

在我的公司,我们使用 LDAP 在所有机器上拥有一组一致的帐户,然后使用配置管理工具(在我们的例子中当前是 cfengine)authorized_keys在所有服务器上为每个用户分发文件。密钥文件本身(连同其他系统配置信息)保存在 git 存储库中,因此我们可以看到密钥何时来来去去。cfengine 还分发一个sudoers文件,该文件控制谁有权使用 LDAP 目录中的用户和组在每个主机上以 root 身份运行内容。

在我们的生产服务器上完全禁用密码身份验证,因此 SSH 密钥身份验证是强制性的。政策鼓励为每台笔记本电脑/台式机/任何设备使用单独的密钥,并在所有密钥上使用密码短语,以减少笔记本电脑丢失/被盗的影响。

我们还有一个堡垒主机,用于访问生产网络上的主机,允许我们在该网络周围制定非常严格的防火墙规则。大多数工程师都有一些特殊的 SSH 配置来使其透明:

Host prod-*.example.com
     User jsmith
     ForwardAgent yes
     ProxyCommand ssh -q bastion.example.com "nc %h %p"
Run Code Online (Sandbox Code Playgroud)

在此设置中添加新密钥或删除旧密钥需要一些仪式。我认为,对于添加新密钥,希望它是一个留下审计跟踪并对所有人可见的操作。但是,由于涉及的开销,我认为人们有时会在不再需要旧密钥时忽略删除它,我们没有真正的方法来跟踪它,除非在员工离开公司时进行清理。这也会在新工程师入职时产生一些额外的摩擦,因为他们需要生成一个新密钥并将其推送给所有主机,然后才能完全发挥作用。

然而,最大的好处是为每个用户拥有一个单独的用户名,这使得我们可以在需要时轻松进行更精细的访问控制,并为每个用户提供一个显示在审计日志中的身份,这在尝试跟踪某个用户时非常有用。生产问题回到系统管理员操作。

在这种设置下,让自动化系统对生产主机采取行动是很麻烦的,因为它们的“众所周知的”SSH 密钥可以作为替代访问路径。到目前为止,我们只是让这些自动化系统的用户帐户只有他们完成工作所需的最小访问权限,并接受恶意用户(必须已经是具有生产访问权限的工程师)也可以执行相同的操作半-匿名使用应用程序的密钥。


小智 6

就我个人而言,我喜欢每个员工在他们拥有基本用户帐户的专用 ssh 堡垒机上拥有一个密钥的想法。该用户帐户具有 1 个 ssh 密钥,可授予对他们需要使用的所有服务器的访问权限。(这些其他服务器也应该被防火墙关闭,以便只启用来自堡垒机的 ssh 访问)

然后在他们的日常工作机器、笔记本电脑、平板电脑等上,他们可以自己选择在它们之间使用一个键还是多个键。

作为该网络上的系统管理员,您需要管理最少数量的密钥(每个开发人员一个),可以轻松监控通过网络的 ssh 访问(因为它都通过堡垒机路由)以及开发人员是否需要多个密钥或只是他们在他们的机器之间共享一台这不是真正的问题,因为您只有一台机器要更新。(除非堡垒 ssh 密钥被泄露,否则比其中一个用户密钥更不可能)


eww*_*ite 5

我遇到过这样的情况,我需要为 40 名开发人员的团队提供对大约 120 台远程客户服务器的 SSH 密钥访问。

我通过强制开发人员通过单个“跳转主机”进行连接来控制访问。我从该主机生成私钥/公钥并将它们推送到客户服务器。如果开发人员需要从笔记本电脑访问,他们可以在本地系统上使用相同的密钥对。


Rhy*_*ans 2

我个人会选择每个用户,这样你就可以立即承担责任并更容易地设置限制 - 我不知道其他人怎么想?