仅允许 root 通过基于密钥的身份验证通过 ssh 登录

仅允许 root 通过基于密钥的身份验证通过 ssh 登录

我对 上的某些 ssh 服务器配置有一些疑问/etc/ssh/sshd_config。我想要下一个行为:

  1. 公钥身份验证是作为 root 进行身份验证的唯一方法(无需密码身份验证或其他身份验证)
  2. 普通用户可以同时使用(密码和公钥认证)

如果我设置PasswordAuthentication no我的第一点是满意的,但不是第二点。有没有办法只设置PasswordAuthentication noroot权限?

答案1

您可以使用该PermitRootLogin指令来执行此操作。从sshd_config联机帮助页:

指定 root 是否可以使用 ssh(1) 登录。参数必须是“yes”、“without-password”、“forced-commands-only”或“no”。默认为“是”。

如果此选项设置为“without-password”,则禁用 root 的密码身份验证。

以下将实现您想要的:

PasswordAuthentication yes
PermitRootLogin prohibit-password

OpenSSH 7.0 变更日志

PermitRootLogin 现在接受“prohibit-password”参数作为“without-password”的不太明确的同义词。

然后重新加载你的 ssh 服务器:

systemctl reload sshd

像往常一样,不要关闭活动终端,直到您从另一个终端验证一切正常并且您没有因错误而被锁定。

答案2

您可以使用Match块来配置每个用户或组身份验证或每个连接源的 IP 地址或主机名的一些选项。

PasswordAuthentication yes
PermitRootLogin yes

Match User root
PasswordAuthentication no

然后重新加载你的 ssh 服务器:

systemctl reload sshd

像往常一样,不要关闭活动终端,直到您从另一个终端验证一切正常并且您没有因错误而被锁定。

答案3

我有一种更严格的方法来授予我的服务器上的 root 权限,这对于像我这样偏执的人来说可能会很有趣。请小心您的操作和顺序,否则您最终可能会得到一个无法获得 root 访问权限的系统。

  • 创建一个特定的组sugroup,其成员将被允许成为 root 并且仅允许通过输入以下行对该组进行密钥身份验证在最后sshd_confid:

Match Group sugroup

PasswordAuthentication no

  • 将命令auth required pam_wheel.so group=sugroup放入/etc/pam.d/su.它可能已经存在,您只需取消注释即可。这会拒绝所有非 sugroup 成员的用户的 root 访问权限
  • 选择一个强root密码:)
  • 检查您的新身份验证方法是否有效,并且仅在以下情况下有效:
  • PermitRootLogin no使用in拒绝通过 ssh 直接 root 登录/etc/ssh/sshd_config

使用此配置需要使用密钥身份验证和密码才能成为 root。我这样配置我的服务器,因为我更喜欢不通过 ssh 直接进行 root 访问,无论身份验证方法如何。

相关内容