在我公司,我们使用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"
在此设置中,添加新密钥或删除旧密钥需要一些仪式。我认为,要添加新的密钥,最好是保留审计线索并对所有人可见的操作。但是,由于涉及到的开销,我认为人们有时会在不再需要旧密钥时忽略了它,我们没有真正的方法来跟踪它,只能在员工离开公司时进行清理。在招募新工程师时,还会产生一些额外的摩擦,因为他们需要生成一个新密钥,并将其推出到所有主机上才能完全生产。
但是,最大的好处是为每个用户使用单独的用户名,这使我们可以在需要时轻松进行更精细的访问控制,并为每个用户提供一个显示在审核日志中的身份,这在尝试跟踪用户名时非常有用。生产问题返回到sysadmin操作。
在这种设置下,拥有对生产主机采取行动的自动化系统很麻烦,因为它们的“众所周知”的SSH密钥可以用作备用访问路径。到目前为止,我们仅使这些自动化系统的用户帐户具有执行其工作所需的最小访问权限,并接受恶意用户(必须已经是具有生产访问权限的工程师)也可以同样地执行这些操作,匿名使用应用程序的密钥。