易君召
易君召
发布于 2026-11-04 / 1 阅读
0

Linux root 用户安全管理最佳实践

核心思路:尽量不直接登录 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 控制。

三、审计与日志(出事能溯源)

  1. sudo 日志:默认记录提权操作

  2. 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

  1. 开启 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,生产模式设为 enforcing

  • Debian/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)

  1. root 登录成功(SSH、本地 tty)

  2. 出现 su - root

  3. sudo 执行高危命令:rm -rf、chmod 777、修改 shadow、passwd

  4. /root/.ssh/authorized_keys 文件变更

  5. audit 审计规则触发

八、应急与兜底

  1. 不要随便给应用进程跑 root:所有业务程序尽量用专用低权限用户运行(nginx、mysql 都有独立账号)

  2. 定期备份 /etc/shadow、/etc/sudoers,变更前备份

  3. 牢记:root 一旦被拿下,主机基本失守,所有加固是提高攻击门槛、留审计线索,不是绝对安全

  4. 云主机:尽量使用云服务商的密钥登录,关闭 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,转载请注明出处。

原文链接 https://www.yijunzhao.cn/archives/linux-root-user-security-management-best-practices

欢迎访问 小易撩挨踢

https://www.yijunzhao.cn/