使用diff -un对比入侵前后配置需以可信基线为前提,配合动态内容过滤和目录级排除;可信基线仅来自首次部署归档、离线镜像或未被攻陷的配置管理commit;须忽略日志、缓存等易变目录及证书、时间戳等动态字段;通过grep管道快速定位高危变更。

用 diff -uN 对比入侵前后的关键配置,必须配合可信基线、动态内容过滤和目录级排除,否则输出全是干扰项,无法定位真实攻击痕迹。
必须使用可信的原始基线
被入侵后现场提取的“原始配置”不可信——攻击者可能已篡改备份、替换符号链接或隐藏修改。真正可用的基线只来自:
- 系统首次部署后立即归档的
/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: …” -
--exclude必须显式排除log、cache,否则/etc/logrotate.d/中的时间戳规则会污染结果
快速聚焦高危变更线索
不要通读几万行 changes.patch。用管道组合快速定位可疑点:
-
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'快速确认是否被篡改,再决定是否深入分析










