用 diff -un 配合 --ignore-matching-lines 过滤动态内容,结合可信基线(首次部署归档、离线镜像、配置管理commit)对比 /etc,排除易变目录,再用 grep 聚焦高危变更并人工核验关键文件。

直接结论:用 diff -uN 对比,配合 --ignore-matching-lines 过滤掉时间戳、PID、随机哈希等干扰行,否则输出全是噪音。
对比前必须备份干净基线配置
被入侵后临时抓取的“原始配置”不可信——攻击者可能已篡改备份或隐藏修改。真正可用的基线只能来自:
- 系统首次部署后立即归档的
/etc/目录(如tar -cf etc-baseline-20260401.tar /etc/) - 未联网环境下的离线镜像快照
- Ansible/Puppet 等配置管理工具的历史 commit 记录(需确认该仓库未被攻陷)
若无上述任一来源,diff 结果仅能提示“有异常”,无法判断哪些是攻击引入、哪些是运维误操作。
过滤动态内容避免误报
系统日志路径、证书有效期、SSH host key、/proc/sys/ 下的运行时参数等,每次重启或重载都会变。硬对比会刷屏无关差异。关键过滤手段:
Linux AI 服务器 — 将 Linux 服务器转换为本地 AI 推理集群。使用 systemd、NVIDIA CUDA 实现无头 Linux AI,零 GUI 开销。
- 用
--ignore-matching-lines='^#|^ *$|^Last modified:|^Serial:|^Not After:'屏蔽注释、空行、证书字段 - 对
/etc/shadow这类敏感文件,先用awk -F: '{print $1,$2}'提取用户名和密码哈希段再比对,跳过时间戳字段 - 比较
/etc/crontab时加-w忽略空白符,防止因缩进风格不同触发假阳性
递归对比整个 /etc 但跳过已知易变目录
执行 diff -r -uN --exclude='log' --exclude='cache' --exclude='tmp' /etc-baseline/ /etc/ > changes.patch
注意三点:
-
-r是必须的,否则只比/etc根目录下文件,漏掉/etc/systemd/system/等深层路径 -
-N让diff把只在新目录中出现的文件(如攻击者新建的/etc/systemd/system/backdoor.service)当成“与空文件对比”,而非报错“Only in /etc: backdoor.service” -
--exclude必须显式排除log、cache,否则/etc/logrotate.d/里的时间戳规则会污染结果
快速定位可疑变更的最小命令组合
不要从头读完几万行 diff 输出。先用管道聚焦高危线索:
-
grep -E '^[+-][^+-]|^\+\+\+|^---' changes.patch | grep -E '(adduser|usermod|chmod|chown|\/bin\/bash|\/dev\/shm)' | head -20—— 找新增用户、权限提升、shell 路径写入 -
grep '^[+]#' changes.patch | grep -i 'malware\|backdoor\|hidden'—— 检查攻击者留下的伪装注释 -
diff -q /etc/passwd /etc-baseline/passwd | grep 'differ'快速确认是否被篡改,再决定是否深入
真实入侵分析中,最常被忽略的是 /etc/passwd 中 UID=0 的额外账户、/etc/shadow 中空密码哈希、以及 /etc/pam.d/common-auth 末尾被追加的可疑 auth [success=done] pam_exec.so 行——这些必须人工逐行核验,diff 只负责把它们从海量变更里揪出来。










