核心思路:尽量不直接登录 root、最小权限、审计可追溯、加固防护、定期巡检,不代表禁用 root,而是管控 root 的使用入口与行为。
一、基础账号策略(最核心)
1. 禁止 root 直接 SSH 登录
编辑 /etc/ssh/sshd_config
PermitRootLogin no
可选:如果特殊场景必须允许,不要设 yes,用
PermitRootLogin prohibit-password,仅允许密钥登录,禁止密码登录。 修改后重载 sshd:
# Debian/Ubuntu
systemctl reload ssh
# RHEL/CentOS/openEuler
systemctl reload sshd
2. 使用普通用户 + sudo 提权(推荐标准方案)
日常用普通账号登录,需要权限时用 sudo,而不是 su - 切 root。
不要多人共用一个账号;一人一个独立普通账号
配置 sudo 精细化授权,不要直接
ALL=(ALL) ALL
示例:/etc/sudoers(用 visudo 编辑,语法校验防止锁死)
# 允许 user01 执行全部命令(不推荐生产)
# user01 ALL=(ALL) ALL
# 精细化:只允许执行指定命令
user01 ALL=(root) /usr/bin/systemctl restart nginx, /usr/bin/journalctl
# 免密(谨慎使用,仅限运维自动化账号)
# user01 ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx
✅ 优点:sudo 自带日志
/var/log/secure(RHEL 系)、/var/log/auth.log(Debian 系),记录是谁、什么时间、执行了什么提权命令。
3. 强密码策略 + 定期轮换(root 密码)
即使很少直接登录 root,root 密码也必须强口令:长密码、大小写、数字符号。 配置密码策略(pam):
/etc/pam.d/common-password(Debian)/etc/security/pwquality.conf(RHEL/openEuler)
设置密码有效期:
chage -M 90 root # 90天过期
chage -W 7 root # 提前7天提醒
建议:root 密码单独保管,密码管理器存放,不要明文存服务器、脚本里;多人环境不要共享 root 密码。
二、限制 su 切换 root
su - 可以输入 root 密码切到 root,很多人忽略这个入口。 限制只有 sudo 组用户才能 su:
# /etc/pam.d/su
auth required pam_wheel.so use_uid
然后把可信用户加入 wheel 组(RHEL/openEuler)
usermod -aG wheel user01
Debian 没有 wheel,可以自建组 + pam 控制。

三、审计与日志(出事能溯源)
sudo 日志:默认记录提权操作
auditd 审计框架(生产推荐),监控 root 关键行为: 安装 auditd,添加规则监控 root 修改重要文件、执行高危命令
# 监控 /etc/passwd /etc/shadow 修改
auditctl -w /etc/shadow -p rwxa -k shadow_change
auditctl -w /etc/passwd -p rwxa -k passwd_change
日志查看:ausearch、aureport
开启 shell 会话记录:
script或者tlog(cockpit/audit 配套),记录 root 终端输入输出。
注意:日志要远程转发到独立日志服务器(rsyslog/loki),防止攻击者登录 root 后清空本地日志销毁证据。
四、限制 root 本地登录(控制台)
如果是云服务器、机房远程管理,不需要本地控制台登录 root:
# /etc/securetty
# 注释掉 tty1~tty6,禁止 root 在本地终端登录
# tty1
# tty2
# tty3
⚠️ 风险:如果 SSH 挂了,本地控制台也进不去,适合有 IPMI / 远程控制台的环境。
五、SELinux / AppArmor 强制访问控制
root 不是万能的!开启 MAC 可以限制 root 越权破坏:
RHEL、openEuler、CentOS:SELinux,生产模式设为
enforcingDebian/Ubuntu:AppArmor 即使攻击者拿到 root,受策略约束,不能随意读写某些敏感资源。
六、密钥、agent、自动化账号管控
很多自动化(ansible、jenkins)使用 root 密钥,风险极高: ✅ 最佳实践:
自动化账号也用普通账号 + sudo 细粒度授权,禁止直接使用 root ssh key
密钥设置密码保护,不要使用无密码裸密钥
定期清理
/root/.ssh/authorized_keys,删除废弃公钥禁止在脚本、镜像、Dockerfile 硬编码 root 密码、私钥
检查 root 公钥:
ls -l /root/.ssh/
cat /root/.ssh/authorized_keys
七、监控告警
重点监控这些事件,对接告警(Prometheus Alertmanager、zabbix)
root 登录成功(SSH、本地 tty)
出现
su - rootsudo 执行高危命令:
rm -rf、chmod 777、修改 shadow、passwd/root/.ssh/authorized_keys 文件变更
audit 审计规则触发

八、应急与兜底
不要随便给应用进程跑 root:所有业务程序尽量用专用低权限用户运行(nginx、mysql 都有独立账号)
定期备份
/etc/shadow、/etc/sudoers,变更前备份牢记:root 一旦被拿下,主机基本失守,所有加固是提高攻击门槛、留审计线索,不是绝对安全
云主机:尽量使用云服务商的密钥登录,关闭 root 密码登录
九、错误做法(避坑清单)
❌ 多人共用 root 账号 ❌ SSH 允许 root 密码登录 ❌ sudo 直接 ALL=(ALL) ALL 给所有人 ❌ 业务进程以 root 运行 ❌ root 私钥无密码,到处复制 ❌ 不开启审计,日志只存在本机 ❌ 把 root 密码写在脚本、配置文件、注释里
十、极简落地检查清单(可直接拿来巡检)
# 1. 检查SSH root登录
grep PermitRootLogin /etc/ssh/sshd_config
# 2. 查看哪些用户有sudo权限
getent group sudo wheel
# 3. 查看root密码有效期
chage -l root
# 4. 检查root的authorized_keys
ls /root/.ssh/authorized_keys
# 5. 检查selinux状态
getenforce
# 6. 查看最近root登录记录
last root
lastlog -u root
本文原创作者:易君召,详见:https://www.yijunzhao.cn/authors/yijunzhao,转载请注明出处。
原文链接
欢迎访问 小易撩挨踢