自动定时检查linux权限漏洞的关键是盯准账户权限异常、提权路径暴露、最小权限违背三类攻击链起点,通过原生命令组合实现每日闭环审计。

自动定时检查 Linux 权限漏洞,关键不是“扫得全”,而是“盯得准、判得清、动得快”。重点应落在账户权限异常、提权路径暴露、最小权限违背这三类真实攻击链起点上,用系统原生命令组合+轻量脚本+固定调度,实现每日可追溯的闭环审计。
聚焦四类高风险权限问题
不必扫描全部账户或文件,优先锁定攻击者最常利用的突破口:
- 禁用登录 Shell 却有有效密码的账户(如
/etc/passwd中 shell 为/usr/sbin/nologin,但/etc/shadow密码字段非*或!) - SUID/SGID 异常文件(特别是属主为普通用户、却带
4000或2000权限的可执行文件) -
sudoers中宽泛授权(含NOPASSWD: ALL、未限定命令绝对路径、允许无日志切换 root) - 90 天以上未登录账户(排除 UID
用原生命令写轻量检查脚本
不依赖第三方工具,直接调用 awk、find、visudo、lastlog 等自带命令,确保兼容性与低开销:
- 查禁用 Shell 但有密码账户:
awk -F: '$7 ~ /(nologin|false)$/ && $1 != "root" {print $1}' /etc/passwd | while read u; do grep "^$u:" /etc/shadow | cut -d: -f2 | grep -q '^[a-zA-Z0-9./]' && echo "$u: nologin but valid password"; done - 找异常 SUID 文件:
find / -perm -4000 -o -perm -2000 2>/dev/null | xargs -r stat -c "%U %a %n" 2>/dev/null | awk '$1 !~ /^(root|bin|daemon|sys)$/ && $2 ~ /^...s/ {print}' - 检 sudoers 风险配置:
grep -v "^#" /etc/sudoers | grep -E "(ALL\s+ALL|NOPASSWD|!requiretty|Runas_Spec)" | grep -v "root\s+ALL" - 列长期未登录用户:
lastlog -b 90 | awk '$3 != "Never" && $1 !~ /^(root|sync|shutdown|halt|operator|games|ftp)$/ {print $1}'
设为每日定时任务并生成可操作报告
让脚本真正落地,需固化执行节奏与输出规范:
- 写入
/etc/cron.daily/audit-perm.sh,加执行权限,并在末尾添加邮件通知:mail -s "Perm Audit Report $(date +%F)" admin@example.com - 报告每条发现附带明确处置动作,例如:
user_dev: NOPASSWD ALL → edit /etc/sudoers, replace with 'user_dev ALL=/usr/bin/systemctl restart nginx' - 记录时间戳与状态变更,如某账户上次存在、本次已锁定,便于回溯是否误删或漏修
- 首次运行后,将确认安全的例外项(如某业务账户确需 SUID)加入白名单,在脚本中用
grep -v -f /etc/audit/whitelist过滤
集成到日常运维闭环
避免脚本沦为“一次性检查”,必须嵌入运维习惯:
- 每月初抽检 10% 的告警项,人工验证是否真实风险,同步更新白名单与判定逻辑
- 审计脚本本身纳入 Git 版本管理,每次修改注明原因(如“新增检测 SSH 密钥过期时间”)
- 结果 JSON 化输出(主机名、检查项 ID、状态、时间),方便接入 Prometheus 做趋势分析或推送到钉钉告警
- 修复动作也自动化:对高危项(如空密码账户)脚本可附加
passwd -l $user锁定,但需人工确认开关











