在 /etc/ssh/sshd_config 配置文件中,PasswordAuthentication 和 PermitRootLogin 是用于控制 SSH 连接安全性和访问权限的两个重要参数。下面是这两个参数的详细解释:

1. PasswordAuthentication

  • 作用:该参数用于控制是否允许通过 密码 方式进行 SSH 登录。
  • 配置项
    • PasswordAuthentication yes:允许通过密码进行 SSH 登录。
    • PasswordAuthentication no:禁用通过密码进行 SSH 登录,只能使用公钥认证(即 SSH 密钥对)等其他认证方式进行登录。
  • 默认值:通常默认为 yes,意味着可以通过密码登录 SSH。
  • 使用场景
    • 启用 密码认证yes):如果你希望用户可以通过输入密码来登录服务器。
    • 禁用 密码认证no):如果你希望增强服务器的安全性,建议禁用密码认证,改为使用 SSH 密钥对(public/private key)进行身份验证,这样可以有效防止暴力破解攻击。
  • 示例# 禁用密码登录,只允许密钥认证 PasswordAuthentication no

2. PermitRootLogin

  • 作用:该参数用于控制是否允许通过 SSH 以 root 用户身份直接登录。
  • 配置项
    • PermitRootLogin yes:允许 root 用户通过 SSH 登录。
    • PermitRootLogin no:禁止 root 用户通过 SSH 登录。
    • PermitRootLogin without-password:允许 root 用户通过 SSH 登录,但仅限于使用公钥认证(即禁用密码登录)。
    • PermitRootLogin prohibit-password:同样是禁用密码登录,但允许其他认证方式,如基于密钥的登录。
    • PermitRootLogin forced-commands-only:只允许 root 用户执行特定的命令,如通过脚本自动化的认证,不能登录进行一般交互。
  • 默认值:通常默认为 yes,允许 root 用户通过 SSH 登录。
  • 使用场景
    • 启用 PermitRootLogin yes:如果你希望 root 用户能够直接通过 SSH 登录服务器(但不推荐这样做,因为它存在安全隐患)。
    • 禁用 PermitRootLogin no:为了增强服务器的安全性,禁止 root 用户直接登录,而是使用普通用户登录后,再通过 sudo 或 su 提升权限。
    • 使用 PermitRootLogin without-password:允许通过密钥认证登录,这样可以确保 root 用户只能通过密钥认证来登录,避免暴力破解密码。
  • 示例# 禁止 root 用户通过 SSH 登录 PermitRootLogin no # 只允许 root 用户通过公钥认证登录 PermitRootLogin without-password

安全建议

  • PasswordAuthentication:建议在生产环境中禁用密码认证(PasswordAuthentication no),以提高安全性,防止暴力破解。使用 SSH 密钥认证是一种更安全的做法。
  • PermitRootLogin:为了避免 root 用户被攻击者利用,建议禁用 root 用户的 SSH 登录(PermitRootLogin no)。可以通过普通用户登录后使用 sudo 提升权限。

示例配置

假设你希望只允许通过 SSH 密钥认证进行登录,并且禁止 root 用户通过 SSH 登录,/etc/ssh/sshd_config 的配置如下:

# 禁止通过密码认证登录
PasswordAuthentication no

# 禁止 root 用户直接通过 SSH 登录
PermitRootLogin no

修改完配置文件后,记得重启 SSH 服务使改动生效:

# 重启 SSH 服务
sudo systemctl restart sshd

总结

  • PasswordAuthentication 控制是否允许使用密码登录 SSH。
  • PermitRootLogin 控制是否允许 root 用户直接通过 SSH 登录。

禁用密码登录和 root 用户登录是提升 SSH 安全性的常见做法,尤其是在服务器暴露在公共网络环境下时。