从通道上收窄 root 使用
直接使用 root 的风险在于没有留痕、没有权限边界,一旦口令泄露就是完整控制权。加固的方向不是简单禁用,而是按通道分别约束:控制台登录受 /etc/securetty 约束,SSH 远程登录受 sshd_config 的 PermitRootLogin 约束,图形登录与串口各有对应开关。日常运维改用普通账户加 sudo,既是权限收敛也是审计链路。
基本信息
| 控制台通道 | /etc/securetty,限制 root 可登录的终端设备 |
|---|---|
| SSH 通道 | sshd_config 的 PermitRootLogin(yes / no / prohibit-password / forced-commands-only) |
| 图形通道 | Display Manager 的允许 root 登录设置 |
| 前置条件 | 至少一个可用的 sudo 管理员账户并已实测 |
| 查看现状 | grep PermitRootLogin /etc/ssh/sshd_config、sshd -T | grep permitrootlogin |
| 权限要求 | root;改 SSH 配置后先 sshd -t 再 reload |
典型使用场景
- 等保与安全基线要求禁止 root 远程直接登录
- 批量运维场景改用 sudo 后统一关闭 root 直连
- 排查远程登录失败时确认是否 PermitRootLogin 已收敛
- 外包人员入场前把 root 通道收紧,只留受控账户
- 控制台维护场景按需限定 root 可用的终端
现状检查与收敛示例
现状检查与收敛示例
cat /etc/securetty # 允许 root 登录的控制台列表(文件存在才生效)
grep -i '^PermitRootLogin' /etc/ssh/sshd_config # 当前 SSH 侧策略
sshd -T | grep -i permitrootlogin # 看最终生效值(含 drop-in 合并结果)
# 收敛为禁止口令登录、仅允许密钥(推荐折中):
# PermitRootLogin prohibit-password
sshd -t && systemctl reload sshd # 语法检查通过后再重载sudo 管理员通道准备
sudo 管理员通道准备
id opsadmin # 确认存在普通管理员账户
usermod -aG wheel opsadmin # 加入 sudo 组(Debian 系为 sudo 组,RHEL 系为 wheel)
su - opsadmin -c 'sudo -n true; echo exit=$?' # 验证该账户具备 sudo 权限(-n 表示不提示口令)
sudo -l -U opsadmin # 查看该账户被授予的具体权限
# 全部验证通过后再关闭 root 远程登录,顺序不能颠倒PermitRootLogin 取值
| 取值 | 含义 | 适用场景 |
|---|---|---|
| yes | 允许 root 用口令或密钥登录 | 最宽松,公网环境不建议 |
| prohibit-password | 允许密钥登录、禁止口令登录 | 常见的折中选项 |
| forced-commands-only | 仅允许带强制命令的密钥登录 | 自动化场景 |
| no | 完全禁止 root 远程登录 | 安全基线最推荐,需有替代管理通道 |
| 未显式配置 | 取默认值,不同版本默认不同 | 用 sshd -T 查实际生效值 |
securetty 只约束控制台登录,不影响 SSH 与图形登录:各通道要分别配置,只改一处并不意味着 root 不可登录。
收敛 root 登录前必须先在另一个会话实测普通账户的 sudo 可用性,否则可能出现所有管理通道同时不可用的情况;救援流程(如单用户模式)也要提前确认仍可用。