Linux安全运维三大核心问题是权限划分模糊、日志路径不统一、sudo权限过度开放;须通过Cmnd_Alias限制命令、密钥登录加固、rsyslog统一采集、auditd监控与自动化校验脚本实现闭环管控。

Linux 安全运维不是靠一份“规范文档”就能落地的,真正卡住团队协作的,是权限划分模糊、日志路径不统一、sudo 权限过度开放这三类问题。下面直击实操中高频踩坑点。
sudo 权限配置必须限制到具体命令,不能只靠 NOPASSWD
很多团队在 /etc/sudoers 里写 %ops ALL=(ALL) NOPASSWD: ALL,看似方便,实则等于交出 root 密钥。攻击者一旦拿下任意一个运维账号,立刻提权。
- 正确做法:用
Cmnd_Alias显式声明允许的命令集,例如只允许重启 nginx 和查看日志 - 禁止使用
ALL作为命令路径,必须写绝对路径,如/bin/systemctl restart nginx,否则可被 PATH 劫持绕过 - 所有 sudo 规则末尾加
NOEXEC,防止通过less /var/log/auth.log进 shell - 启用
requiretty(默认已开),阻断非交互式提权场景
SSH 登录必须禁用密码 + 强制密钥登录,且私钥需加密
仍见团队用 PasswordAuthentication yes 配合弱口令,这是暴力破解的温床。密钥登录不是终点,密钥本身的安全才是关键。
- 服务端关闭密码登录:
PasswordAuthentication no、ChallengeResponseAuthentication no - 客户端生成密钥时必须加
-N "your-passphrase",空口令等同于无密钥保护 - 私钥文件权限必须为
600,~/.ssh/目录权限必须为700,否则 OpenSSH 拒绝加载 - 禁用
ssh-agent自动转发(ForwardAgent no),避免跳板机密钥泄露扩散
系统日志需统一采集到远程 rsyslog server,本地仅保留 7 天
本地日志易被清除,且各服务器路径、格式不一致,导致安全事件无法关联分析。“查不到”和“没记录”效果一样差。
- rsyslog 客户端配置中,必须用
@@(TCP)而非@(UDP),避免丢包;同时启用$ActionQueueType LinkedList防止网络中断时日志堆积丢失 - 日志格式统一用
RSYSLOG_ForwardFormat,确保时间戳、主机名、程序名字段结构一致 - 本地
/var/log/下所有日志由logrotate管理,配置maxage 7和compress,避免磁盘打满 - 敏感操作日志(如 sudo、su)必须额外写入独立文件,例如通过
Defaults logfile="/var/log/sudo.log"
用户家目录和关键配置文件权限必须自动化校验
人工巡检不可持续,而 chmod 777 /home 或 sshd_config 可被普通用户写入这类低级错误,每周都会在不同机器上重复出现。
- 用
auditd监控关键路径变更:-w /etc/passwd -p wa -k identity,配合aureport -f -i -k identity快速定位 - 编写轻量校验脚本,检查
/home/*是否为755或更严,~/.ssh/authorized_keys是否为600,/etc/shadow是否为640 - 将校验结果输出为 JSON,接入团队现有监控告警链路(如 Prometheus + Alertmanager),异常直接触发工单
- 禁止用
chown -R修复家目录权限——可能误改 .bashrc 等可执行文件属主,引发提权风险
#!/bin/bash
# check-perms.sh:最小化权限校验(示例)
for user in $(cut -d: -f1 /etc/passwd | grep -v '^root$'); do
homedir=$(getent passwd "$user" | cut -d: -f6)
[[ -d "$homedir" ]] || continue
perm=$(stat -c "%a" "$homedir" 2>/dev/null)
if [[ "$perm" != "755" && "$perm" != "700" ]]; then
echo "ERROR: $homedir perm $perm, expected 755 or 700"
fi
done最难的不是写规则,而是让每台机器的 /etc/sudoers、sshd_config、rsyslog.conf 在上线前就通过同一套 CI 流水线校验。配置漂移比漏洞更隐蔽,也更难追溯。










