我们有几十台 Linux 服务器,还有几名开发人员,每个开发人员都负责服务器的一部分工作。
目前每个服务器都有一个管理员账户,如果有人想管理该服务器,他的公钥将被添加到服务器管理员账户的 ssh authorized_keys 中,这样他就可以访问和编辑该服务器。但这不是一个好的解决方案:
- 每个服务器的ssh端口不要开放给别人,这样很危险。
- 如果有多个用户使用同一个账户访问同一个服务器,我们将无法分辨谁登录了。
- 很难删除或撤销某人的这些服务器的 ssh 密钥。
所以我认为应该有一个更好的解决方案:
- 一个集中的 ssh 审计和管理服务器。
- 每个服务器只允许从该服务器进行 ssh 端口访问。
- 该服务器可以管理用户帐户以及每个服务器的访问权限。
- 开发人员使用此审计服务器进行服务器操作,所有操作都应被记录,并在执行危险操作时提醒其他人。
- 如果该服务器瘫痪了,则有紧急访问解决方案。
有人知道这样的解决方案吗?谢谢。
答案1
每个服务器的ssh端口不要开放给别人,这样很危险。
事实并非如此,特别是当您使用具有良好密码的密钥并且已禁用密码登录时(您没有这样做过)。
如果有多个用户使用同一个账户访问同一个服务器,我们将无法分辨谁登录了。
在您当前的情况下,这是正确的 - 共享帐户不是一件好事。然而,适当详细的 sshd 日志您可以看到谁在何时登录。
很难删除或撤销某人的这些服务器的 ssh 密钥。
有一些可用的工具可以实现这一自动化 - puppet、chef、ansible 等 - 一般是配置管理工具。
解决您问题的一般方法是
- 为每个人提供自己的帐户(使用配置管理工具实现自动化)
- 停止使用共享帐户。
- 给每个人合适的须藤使用权。
- 使用 rsyslog 将所有日志发送到中央日志服务器。
这允许您记录访问系统的个人用户。经过适当的培训,您还可以记录个人用户对管理帐户的使用情况。
答案2
也许可以看看 Monkeyspere。它使您能够设置一个中央密钥服务器,您可以在其中撤销用户密钥(可以将其视为 ssh 密钥的信任网)
答案3
不要为开发人员提供服务器上的根访问权限!使用一些中央管理工具,如 chef 或 cfengine3,并让开发人员编写模板,这些模板应用于服务器。您可以将这些模板推送到 Git/SVN/Whatever 以跟踪更改。
另外,您可以使用 VPN 访问您的服务器。您的服务器不需要向全世界开放,也不必有公共 IP。