要真正切断root账号全网不合规操作路径,须协同落地pam_securetty终端拦截、sudoers权限委托及系统登录通道封堵:清空/etc/securetty熔断所有交互式登录;在/etc/sudoers中移除root默认权限并强制目标用户密码验证;通过pam_listfile.so在login/sshd中叠加黑名单校验;最终root仅存于passwd中作符号标识,所有管理行为均由实名运维账号发起并完整审计。

要真正切断 root 账号在全网范围内的不合规直接操作路径,不能只靠单一手段,必须把 pam_securetty 的终端级拦截、sudoers 的权限委托机制、以及系统层的登录通道封堵三者协同落地。核心逻辑是:让 root 既无法交互式登录(任何终端、VNC、SSH),也无法被非授权用户提权调用,同时确保所有管理行为可追溯、可审计、有明确责任主体。
一、清空并锁定 /etc/securetty 实现 root 终端登录熔断
该文件是 pam_securetty.so 模块的白名单开关,清空即等效于“拒绝所有 tty”。此操作影响 login、getty、gdm/kdm/xdm、VNC 启动的图形会话等所有需要分配真实或伪终端的登录场景。
- 执行命令彻底禁用 root 终端入口:
sudo mv /etc/securetty /etc/securetty.bak && sudo touch /etc/securetty && sudo chmod 600 /etc/securetty - 验证是否生效:切换到普通用户后执行
su -,输入 root 密码应提示Authentication failure;VNC 登录 root 也会卡在认证环节 - 注意:此操作不影响 su -c 或 sudo 执行命令,仅阻断交互式 shell 分配
二、在 /etc/sudoers 中剥离 root 权限并强制最小化授权
不是“允许谁用 sudo”,而是“禁止 root 被任何方式间接调用”。关键在于取消 root 用户自身在 sudoers 中的默认隐式权限,并通过 Defaults targetpw 和 Defaults runaspw 强制每次提权都需验证目标用户密码(含 root)——但前提是 root 已无法登录,所以实际只会验证管理员账户密码。
- 使用
sudo visudo编辑,删除或注释掉类似root ALL=(ALL:ALL) ALL的行 - 添加全局策略限制:
Defaults targetpw<br>Defaults runaspw<br>Defaults !tty_tickets
(最后一条避免同一用户多终端重复输密) - 为运维账号(如 admin)单独授权,且限定命令范围:
admin ALL=(ALL) NOPASSWD: /usr/bin/systemctl start nginx, /usr/bin/journalctl -u sshd
三、配合 PAM 全局拦截 root 在 login/sshd/gdm 等服务中的残留入口
即使 securetty 已空,某些服务(如旧版 VNC Server、自定义 getty)可能绕过 pam_securetty。需在服务级 PAM 配置中叠加 pam_listfile.so 黑名单校验,实现双重保险。
- 创建禁止用户列表:
echo "root" | sudo tee /etc/security/denied-users && sudo chmod 600 /etc/security/denied-users - 在
/etc/pam.d/login和/etc/pam.d/sshd开头插入:auth [user_unknown=ignore success=ok default=bad] pam_listfile.so onerr=succeed item=user sense=deny file=/etc/security/denied-users - 该规则含义:若当前登录用户名在黑名单中,立即返回失败;user_unknown=ignore 避免非 root 用户因配置错误被误拒
四、验证与收口:确认 root 已完全“不可见、不可达、不可用”
完成上述配置后,root 不再是一个“可用账户”,而是一个仅存在于 /etc/passwd 中的符号标识。所有管理动作必须经由明确命名的运维账号发起,并留下完整 sudo 日志(默认记录在 /var/log/auth.log 或 /var/log/secure)。
- 测试 SSH 登录:
ssh root@host应直接拒绝连接或报Permission denied - 测试本地终端:
Ctrl+Alt+F2进入 tty2,输入 root 密码应无响应或报错 - 测试 VNC:
vncviewer host:1登录 root,应在认证阶段失败,日志中可见 pam_listfile 或 pam_securetty 拒绝记录 - 检查 sudo 日志:
sudo grep "root.*COMMAND" /var/log/auth.log应为空;所有有效提权均归属 admin 等实名账号











