我的公司正在寻求保护我们的 Ubuntu 14.04 LTS 服务器,我们希望禁止特定用户远程登录,但仍允许人们在需要支持时使用 SU 切换到该用户帐户。我在这里找到了禁止 SSH 登录的答案:
这是否会阻止使用 SU 更改为不允许远程 SSH 登录的用户?
具体示例:我们不希望人们使用帐户“specadmin”通过 SSH 登录,但用户“mary”可能需要登录并 SU 为“specadmin”,以便通过 SSH 连接执行一些特殊的支持任务,这可能吗(虽然我确信这不是最好的模型)。我们没有对服务器的本地访问权限,因为它们是云托管的。
答案1
不会,在文件中禁用 SSH 访问sshd_config
不会影响本地登录或通过使用su
命令登录的能力。
虽然您可以按照参考答案中所述限制允许使用 SSH 连接的帐户(即通过在文件中设置DenyUsers specadmin
或),但它仍然不如 SSH 的常见做法安全。AllowUsers mary
/etc/ssh/sshd_config
您不应该这样做,而应该切换到基于密钥的身份验证。
如果您是第一次配置它,可能会看起来很麻烦,但是当您使用云服务时,您可以轻松添加新服务器并执行测试运行(顺便说一句,如果您将自己锁定,云服务通常会为您提供对控制台的 Web 访问权限)。
首先您应该设置(或确保在中设置了以下选项sshd_config
):
PubkeyAuthentication yes
然后,您应该在客户端机器上生成一个密钥对(ssh-keygen
Linux 机器上的命令),并将公钥添加到以下文件中(对于mary
):
/home/mary/.ssh/authorized_keys
可以通过手动复制(密钥是一串字符)或使用ssh-copy-id mary@<destination_server>
自动上传密钥的命令。
您应该能够使用ssh mary@<destination_server>
密钥连接到服务器。如果您在 期间设置了密码ssh-keygen
,则需要输入密码,但它不会在客户端和服务器之间传输。为了确保您操作正确,请为密钥文件设置一个与目标服务器上的密码不同的密码。
如果您可以使用密钥验证(和密码)成功登录,则可以通过添加/确保以下设置来禁用基于密码的验证sshd_config
:
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
HostbasedAuthentication no
完成更改后,sshd_config
您当然应该重新启动sudo service ssh restart
服务器上的 SSH 守护程序()。
为了安心,您可能还希望禁止 root 帐户通过 SSH 进行访问sshd_config
(尽管如果您执行上述操作,root 将默认无法登录):
PermitRootLogin no
答案2
这是文件中DenyUsers
和行的确切用例。您可以以允许的用户身份登录,并在需要时使用 su 转换为特权用户。AllowUsers
/etc/ssh/sshd_config
此外,如果您想加强安全措施,您应该考虑使用受密码保护的基于证书的身份验证以普通用户身份登录(例如 Mary)。设置起来非常简单,并为您的系统增加了额外的安全层。