开源tripwire在现代系统上段错误的根本原因是其2.4.1.2版使用了已废弃的glibc符号和32位内联汇编,导致64位系统链接失败;aide是最佳开源替代,但语法与初始化流程不兼容tripwire;rpm校验仅覆盖包管理安装文件;自建脚本需规避时间戳和日志干扰;工具选择关键在于明确各自信任边界。

开源 Tripwire 在现代系统上跑不起来,根本原因不是配置问题
Ubuntu 20.10+、CentOS 8+、Debian 11+ 上运行 tripwire --init 直接段错误(SIGSEGV),不是你漏装依赖或路径写错——是官方开源版 tripwire 2.4.1.2 的代码里大量使用了已废弃的 glibc 符号和 32 位汇编内联逻辑,64 位系统链接时无法解析,--verbose 输出里反复出现的 undefined symbol: __stack_chk_fail 或 Segmentation fault (core dumped) 就是铁证。商业版 Tripwire(Tripwire Enterprise)虽能跑,但需订阅 + agent 部署 + 中央控制台,对单机或中小团队纯属杀鸡用牛刀。
AIDE 是目前最平滑的开源替代,但策略语法和初始化流程不能照搬 Tripwire
AIDE(Advanced Intrusion Detection Environment)是 GPLv2 开源项目,维护活跃(2025 年仍有 release),原生支持 x86_64,安装即用,且策略文件结构比 Tripwire 更直观。但它不兼容 Tripwire 的 twpol.txt 语法,比如 Tripwire 里写 /bin -> $(SEC_BIN),AIDE 得写成 /bin p+i+n+u+g+s+b+m+c+acl+selinux+xattrs;数据库初始化命令也从 tripwire --init 变成 aide --init && mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz。
-
aide --check默认只输出变更摘要,加-V才显示具体字段差异(如 mtime、inode、hash) - 首次运行前必须确保
/var/lib/aide/可写,且aide.conf中DBDIR路径与实际一致 - 若系统启用了 SELinux,需在策略中显式加入
selinux,否则会把 context 变更全报成“异常”
RPM 数据库校验可补 AIDE 盲区,但仅限包管理安装的文件
像 /usr/bin/bash、/etc/ssh/sshd_config 这类由 RPM 安装的文件,rpm -V 比任何外部完整性工具都快、准、低开销。它直接比对 /var/lib/rpm/ 里的原始 checksum,不依赖外部数据库或密钥。但它的盲区也很明确:所有手动编译安装(如 /usr/local/bin/nginx)、通过 pip/npm 安装、或管理员自己 touch 出来的配置文件,rpm 根本不认。
-
rpm -Va | grep '^..5'筛出 MD5 不匹配项(即内容被改) -
rpm -Vf /path/to/file快速验证单个文件是否被篡改 - 注意:
rpm -V结果中的c表示该文件是配置文件(config file),改动属预期行为,别一看到就告警
自建轻量校验脚本适合监控特定高危路径,但得避开时间戳和日志类干扰
如果你只关心 /boot/vmlinuz*、/etc/crontab、/root/.bash_history 这几处,写个 20 行 shell 脚本比部署整套 AIDE 更快见效。核心是用 sha256sum 固定路径生成基准哈希,再定期比对。但容易踩的坑是:没排除 /var/log/ 下文件(每次写日志都变)、没处理 tmpfs 挂载点(如 /run)、或把 mtime 当作唯一判断依据(很多合法更新只改时间不改内容)。
- 用
find /boot -type f -name 'vmlinuz*' -print0 | xargs -0 sha256sum > /etc/.bootsums生成基线 - 检查时用
sha256sum -c /etc/.bootsums 2>&1 | grep -v 'OK$'过滤掉正常项 - 务必把脚本放进
crontab -e并重定向输出,否则失败时你根本不知道
真正麻烦的从来不是选哪个工具,而是你得清楚每种方案的“信任边界”在哪——AIDE 信的是自己生成的数据库,RPM 信的是包管理器的元数据,而手写脚本信的只是你当初 sha256sum 那一刻的磁盘状态。选错边界,检测就等于摆设。










