我不是服务器管理员,但我们当前的服务器管理员离开了。所以暂时由我来照看事情。我们的系统目前受公钥/私钥保护。但在进行调查时,我发现唯一的访问权限是通过此密钥。我认为没有任何可以访问的辅助帐户。根帐户已被锁定。这让我很担心,因为如果由于任何原因密钥失效/过期,我们就会被锁定。正如我所说,我不是服务器管理员,但我认为我们至少需要另一个非根帐户的可访问帐户,可能具有 sudo 权限。
现在问题来了,我们有大约 30 台 Ubuntu 主网络服务器,管理所有这些密码似乎是一件苦差事。我现在还不想进入并创建帐户。我需要有关如何配置对 30 多个(并且还在增加)服务器的访问权限的建议。
考虑到增长,保护环境的最佳方法是什么?我是否只需要手动配置所有这些帐户并使用单独的密码?或者我们应该考虑使用目录服务?如果是,您会为 Ubuntu 推荐什么?
答案1
有很多事情:
我们的系统目前受到公钥/私钥的保护。但在进行调查时,我发现唯一的访问权限是通过此密钥。
这看起来就像有一个共享的管理员帐户和一个共享的 ssh 密钥来远程登录到该帐户。
通常,您希望管理员(实际上所有用户)使用自己的帐户和密钥登录。然后他们可以使用sudo
自己的个人密码提升权限。
当某人离开您的组织时,您可以锁定/删除他们的个人帐户,然后就完成了。
对于共享账户,这个过程变得越来越复杂,因为你应该在所有地方更改所有共享账户的密码,而且账户越多,你就越有可能错过一个或出现问题。
根权限已被锁定。这让我很烦恼,因为如果出于任何原因密钥失效或过期,我们就会被锁定。
几乎所有的安全指南都要求远程根访问应禁用。通常允许通过控制台进行 root 登录,但需要知道 root 密码。
作为已经建议生成一个强 root 密码列表,最好每个系统一个,打印该列表并将其贴在办公室保险箱中,以备发生意外时使用。(当您需要访问远程控制台时。)
对这些密码进行 SHA512 加密哈希处理,并使用这些加密密码在您的系统上设置根密码(通过配置管理自动化),以防止处理明文密码。
顺便说一下,传统的 ssh 密钥对不会过期。
现在问题来了,我们有大约 30 台 Ubuntu 主网络服务器,管理所有这些密码似乎是一件苦差事。我现在还不想进入并创建帐户。我需要有关如何配置对 30 多个(并且还在增加)服务器的访问权限的建议。
如果您有 30 台服务器并且预计会更多,您应该考虑采用一种集中式和自动化的配置管理形式。
这将使事情变得容易得多:
为每个团队成员/员工/系统管理员提供个人账户和 ssh 密钥对的访问权限
sudo
为每个团队成员/员工/系统管理员提供(基于组的)权限进行更新
重新部署正确的配置以进行测试、水平扩展、灾难恢复等。
通过适当的自动配置管理,您可以避免集中式用户目录并为所有管理员和员工提供本地用户帐户。
从短期来看,这可能会不那么复杂。
但是,如果您想强制定期轮换密码,并且需要确保每个人都使用强密码,那么中央用户目录很快就会成为更好的解决方案。
如果您已经有一个中央用户目录,例如 Microsoft Active Directory,那么与其集成几乎总是更好的,而不是为管理您的 Linux 服务器设置单独的用户目录。
答案2
您无需担心,也无需更改。您以前的管理员做得很好,禁用 root 和密码是增强总体安全性的一个良好开端。仅使用密钥认证是安全的。通常密钥不会过期,它们只是存储在文件系统中,只要它们留在那里,它们就会起作用。您也不必担心被锁定。如果您对 Web 服务器有完全控制权,您始终可以通过修改文件/etc/shadow
(再次激活 root)来授予自己 root 访问权限。这里唯一的问题是,您需要使用另一个 OS 实例挂载文件系统。有几种方法可以做到这一点。其中一种更简单的方法是使用 initramfs 操作系统层或使用可引导安装映像并使用 shell。
如果您确实想要一个 root 密码,我建议使用一个非常长的密码,并在所有机器上设置它,将其打印出来并放入保险箱。您只需设置 root 密码即可sudo passwd
。这通常还会激活 root 用户帐户。此密码应该只有极少数人知道,不应存储在任何具有互联网访问权限的计算机系统上,并且只应在紧急情况下使用。
答案3
我会使用 ansible 来集中管理这些服务器上的 ssh 密钥,但可能有点过度,不确定。
https://medium.com/@chandrapal/managing-linux-users-ssh-keys-using-ansible-39ee2fc24c16
也许可以将其与 keeper security 之类的解决方案结合起来,这样您就可以只与需要它的人共享 ssh 密钥。