当前位置:首页>Linux>Linux 服务器的 IT 审计证据采集——上市公司审计实战脚本

Linux 服务器的 IT 审计证据采集——上市公司审计实战脚本

  • 2026-09-10 10:58:42
Linux 服务器的 IT 审计证据采集——上市公司审计实战脚本
痛点

每年年审,审计机构发来的 IT 审计配合需求清单,大概长这样:

请提供所有服务器的用户清单、特权账户列表、密码策略配置、SSH 配置、防火墙规则、已安装软件包清单、日志保留策略、计划任务列表、SUID 文件扫描结果……

原本一台服务器手动采集 ITGC 证据要 1-2 小时:登服务器、敲命令、截图、粘到 Excel、整理格式。十几台服务器排下来,一周就过去了。

作为被审计方的 IT,我决定把这事自动化掉。


这个脚本做什么

一句话:以 root 身份在 Linux 服务器上执行,自动采集审计师关心的所有 ITGC 证据,输出一份结构化的证据包 + Markdown 汇总报告。

覆盖 8 个审计维度:

01_system/     → 主机标识、OS 版本、硬件指纹、NTP 同步状态02_access/     → 用户清单、特权账户、密码策略、SSH 配置、登录记录03_change/     → 软件包清单及变更历史、关键配置文件哈希04_runtime/    → 进程、资源使用、内核参数05_logging/    → rsyslog/journald/auditd 配置、日志保留策略06_filesystem/ → SUID/SGID、世界可写文件、目录权限、磁盘加密07_network/    → 监听端口、防火墙规则、DNS 配置08_services/   → systemd 服务、cron 任务、SELinux/AppArmor 状态
最终产出一个带时间戳的 .tar.gz 压缩包,内含所有原始证据文件和一份 REPORT.md。单台服务器采集时间从 1-2 小时压缩到 2-10 分钟,审计师拿到解压就能用。

几个设计原则

① 只读,绝不改系统

脚本全程不修改被审计系统的任何配置,唯一的写入操作是在 /tmp 下生成采集结果。Ctrl+C 中断会自动清理未完成的目录。

② 不碰敏感明文

/etc/shadow 只采集密码状态("已设置"/"已锁定"/"无密码"),不导出哈希;私钥文件只列路径和权限,不读取内容。这是审计方和被审计方都能接受的红线。

③ 证据可追溯、防篡改

每个采集项都记录了执行命令、开始/结束时间、退出码。打包后自动生成 MANIFEST.sha256,审计师可据此验证证据完整性。

④ 兼容主流发行版

自动识别 RHEL/CentOS/Rocky 系和 Debian/Ubuntu 系,软件包变更采集会根据 rpm/dnf 或 dpkg/apt 自动选择正确的命令。缺失的命令(如 ufw/firewalld 没装)会记录到 missing_commands.log,不会让审计日志被无意义的错误刷屏。


安全创建输出目录(防 /tmp symlink 攻击):

# 用 mktemp 注入随机字符,避免 /tmp 下可预测路径被利用if ! OUTPUT_DIR=$(mktemp -d "${OUTPUT_BASE}/linux_audit_${HOSTNAME_SAFE}_${TIMESTAMP}_XXXXXXXX"); then    echo "[错误] 无法创建临时目录" >&2    exit 3fichmod 700 "${OUTPUT_DIR}"
shadow 只采状态,不导哈希:
while IFS=: read -r user pwd lastchg mindays maxdays warn rest; do    case "$pwd" in        "")       pwd_stat="无密码(危险)" ;;        "!"|"!!") pwd_stat="已锁定" ;;        "*")      pwd_stat="禁用登录" ;;        \$*)      pwd_stat="已设置哈希" ;;    esac    printf "%-20s %-15s\n" "$user" "$pwd_stat"done < /etc/shadow

全盘文件系统扫描只跑一次——SUID/SGID、世界可写、无属主合并为单次 find,避免 4 次 I/O 冲击生产环境:

find / -xdev \( -path /proc -o -path /sys \) -prune -o \    \( -type f -o -type d \) \    -printf '%y\t%m\t%U\t%G\t%u\t%g\t%s\t%TY-%Tm-%Td\t%p\n' \    > "${SCAN_RAW}"# awk 一次性按权限位分类输出到 4 个文件
怎么用?
# 1. 上传到被审计服务器scp linux_audit.sh root@服务器IP:/root/# 2. 切 root 执行su -bash linux_audit.sh# 3. 取回证据包scp root@服务器IP:/tmp/linux_audit_*.tar.gz ./# 4. 验证 SHA256(与现场记录对比)sha256sum linux_audit_*.tar.gz
支持几个可选参数:
bash linux_audit.sh --days 180        # 改为采集近 180 天的日志bash linux_audit.sh --cleanup         # 打包后自动清理原始目录bash linux_audit.sh --help            # 查看帮助
产出效果

执行完毕后屏幕会打印采集摘要,包括压缩包路径、SHA256、文件数和耗时。解压后打开 REPORT.md,长这样:

审计师直接看汇总表定位关注点,再点进对应的原始文件查证据。


使用声明

本脚本输出的是客观证据,不替代审计师的判断,也不对"合规/不合规"做任何结论。使用前建议先与审计机构沟通确认证据采集范围是否符合其要求。如果贵司审计有额外的合规基线(如等保 2.0、行业监管指引),可能需要在此基础上补采集。

脚本以 MIT 协议分享,自行担责使用。


拿到脚本后建议先在测试环境跑一遍熟悉产出结构,再上生产。


如果你也在企业做 IT,每年被审计折腾的同行,希望这个工具能帮你省点时间。

脚本获取

在本公众号后台回复"审计脚本"获取

最新文章

随机文章