在 /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 安全性的常见做法,尤其是在服务器暴露在公共网络环境下时。
发表回复