三项基础提权防护措施是:禁用root远程登录、锁定/etc/shadow权限为400、清除uid 0的非root用户;执行awk -f: '($3==0){print $1}' /etc/passwd确认仅输出root,发现异常用户需先排查依赖再删除或禁用登录。

直接禁用 root 远程登录、锁定 /etc/shadow 权限、确保没有 UID 0 的非 root 用户——这三项做完,80% 的基础提权路径就断了。其他加固动作效果依赖这三步是否干净落地。
如何确认并清理 UID 0 的非 root 用户
UID 为 0 意味着拥有等同于 root 的全部权限,哪怕用户名不是 root,也是严重风险点。
- 执行
awk -F: '($3 == 0) { print $1 }' /etc/passwd,输出里只应有root;如果出现其他用户名(比如admin、test),立刻处理 - 不要直接删用户——先确认该账户是否被服务或脚本依赖。可用
ps aux | grep username和systemctl --all | grep username快速排查 - 确认无依赖后,用
userdel -r username彻底删除;若需保留家目录但禁用登录,改其 shell 为/sbin/nologin:usermod -s /sbin/nologin username - 注意:某些自动化部署工具(如 Ansible Playbook)可能悄悄创建 UID 0 用户,加固后要定期复查
为什么 /etc/shadow 权限必须是 400
/etc/shadow 存储的是加盐哈希后的密码,一旦权限过宽(比如 644),普通用户就能读取哈希值,离离线爆破只差一步。
- 检查当前权限:
ls -l /etc/shadow,正确输出应为-r-------- 1 root root - 修复命令:
chmod 400 /etc/shadow;别用600——写权限对 shadow 文件毫无意义,反而增加误操作风险 - 同样要检查
/etc/gshadow:chmod 400 /etc/gshadow - 加固后建议用
stat /etc/shadow验证,避免因 SELinux 上下文异常导致实际仍可读
禁止 root 远程登录的实操要点
允许 root 直接 SSH 登录等于把万能钥匙挂在门口,攻击者只要撞中密码或私钥泄露,系统就彻底失守。
- 编辑
/etc/ssh/sshd_config,确认存在且未被注释的行:PermitRootLogin no - 必须搭配非 root 管理用户:用
adduser admin+usermod -aG wheel admin(RHEL/CentOS)或sudo usermod -aG sudo admin(Debian/Ubuntu) - 重启服务前先测试新用户能否正常
sudo:su - admin→sudo whoami应返回root - 重启命令必须用
systemctl restart sshd,不是service sshd restart(后者在 systemd 系统上可能不触发完整 reload) - 切勿在修改后立即退出当前 root 会话——留一个窗口验证新用户 SSH 登录成功再关
真正容易被忽略的是时间窗口问题:从创建普通用户到禁用 root 登录之间,如果没同步配置 sudo 权限或密钥认证,就会把自己锁在外面。每次加固都该当作一次“逃生演练”来操作。











