禁用 root 密码登录
为什么 root 密码登录很危险,PermitRootLogin 各选项有何区别,以及如何在不丢失机器访问权限的情况下禁用它。
更新于 2026年8月23日
所有人都知道 root 这个用户名:它存在于每一台机器上,并且拥有全部权限。暴力破解者只剩下一件事需要猜——密码。禁用 root 的密码登录,只需一个参数就能消除一整类攻击。
准备工作
先留后路,再下禁令。顺序和您的直觉正好相反。
- 创建一个具有 sudo 权限的用户——参见用户与 sudo。
- 为其添加 SSH 密钥,并在另一个终端窗口中验证登录。
- 确认
sudo -i可以正常使用。 - 到这一步再修改设置。
ssh artem@<address>
sudo whoami
如果第二条命令返回了 root,说明您已经有了后路。
配置选项
在文件 /etc/ssh/sshd_config.d/99-hardening.conf 中:
| 取值 | 含义 |
|---|---|
PermitRootLogin yes | 一切都被允许,包括密码。没有人会保持这种设置 |
PermitRootLogin prohibit-password | 密钥可用,密码被拒绝。合理的最低要求 |
PermitRootLogin forced-commands-only | 仅允许预定义的命令,用于自动化 |
PermitRootLogin no | root 完全无法通过 SSH 登录。最严格的选项 |
推荐的组合:
PermitRootLogin prohibit-password
PasswordAuthentication no
第二个参数会一次性关闭所有用户的密码登录,而不仅仅是 root。更多细节请参见 SSH 加固。
应用并验证
sudo sshd -t
sudo systemctl restart ssh
sudo sshd -T | grep -i permitrootlogin
在另一个窗口中,确认 root 不再接受密码,并且您的用户可以通过密钥登录:
ssh root@<address>
ssh artem@<address>
重启 sshd 不会断开当前会话——在检查完成之前请保持它处于打开状态。
仍然可用的方式
此更改仅影响 SSH。root 密码仍然需要,也仍然有效:
- 在机器控制台中,两个标签页都可用——文本标签页和“Screen”标签页;
- 通过恢复磁盘登录时;
- 在系统内执行
su -命令时。
密码本身以加密形式存储,可通过面板 /hosting/vds/m/<id> 的“访问”标签页上的按钮显示。这是您的应急通道,不应丢失——参见备份密钥与密码。
常见错误
| 错误 | 后果 | 解决方法 |
|---|---|---|
| 禁用了 root,却从未创建具有 sudo 权限的用户 | 没有人能管理这台机器 | 使用面板控制台并创建一个用户 |
| 密钥只存在于 root 名下 | 新用户无法登录 | 复制 authorized_keys 并修正权限 |
| 该设置被另一个文件覆盖 | 规则不生效 | 检查 sshd -T,而不是文件 |
| 以为禁令也会作用于控制台 | 产生完全锁定的错觉 | 控制台始终可用,这是设计使然 |
切勿在未于相邻窗口中验证替代登录方式的情况下禁用 root 登录。检查只需十秒钟;通过控制台恢复则要久得多。