![如何阻止除通过密钥认证的 SSH 之外的所有控制台访问?](https://linux22.com/image/1365038/%E5%A6%82%E4%BD%95%E9%98%BB%E6%AD%A2%E9%99%A4%E9%80%9A%E8%BF%87%E5%AF%86%E9%92%A5%E8%AE%A4%E8%AF%81%E7%9A%84%20SSH%20%E4%B9%8B%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E6%8E%A7%E5%88%B6%E5%8F%B0%E8%AE%BF%E9%97%AE%EF%BC%9F.png)
我有一个服务器环境,其中唯一的登录方法是 SSH 或数据中心的本地终端。我已将其设置为允许特定用户仅使用密钥而不是密码登录(明确禁用)。此用户也没有设置密码。
由于该用户需要在服务器上执行一些操作,我已授予无密码 sudo 访问权限,使用(在 sudoers 文件中):
username ALL=(ALL) NOPASSWD: ALL
显然,这可能是一个安全问题。我需要确保用户无法使用我们严密保护的 SSH 密钥通过 SSH 以外的任何方式登录服务器。所有 SSH 登录都受到极好的保护,并且也锁定到特定的 IP 地址,因此与基于密钥的登录相结合,是安全的(尽可能安全)。我希望消除通过我们的数据中心登录的能力,以确保用户无法从那里登录,只能通过 SSH 登录。
我该如何阻止那些未经授权的访问尝试?
答案1
您可以为用户设置一个由 30 多个随机字符(有些几乎不可能输入)组成的密码,以防止非 SSH 登录。
但是,这并不能阻止用户通过 SSH 更改密码,然后使用数据中心终端进行直接访问。
答案2
我一直认为更好的解决方案是将密码哈希值(在 /etc/shadow 中)设置为无效值。我通常使用字符串 %%NP%%。这有效地关闭了此用户的密码验证,并禁止任何形式的暴力破解密码。鉴于密码哈希算法中的任何输入都不会与影子文件中的哈希值匹配,因此这非常安全。
对于 Linux,您可以代替(或除了)上述操作,在 /etc/security/access.conf 中设置访问控制参数。该文件中有几个示例应该可以满足您的需求。这种方法的一个缺点是,您很容易锁定 root 权限,使其无法从控制台登录,这在紧急情况下是一个非常糟糕的主意。