rkhunter --checkall 默认交互式需按回车,加 --skip-keypress 可全自动;--cronjob 更适合定时任务,自动跳过提示并记录日志;首次运行前须确保系统干净,执行 rkhunter --propupd 建立可信文件快照。

直接运行 rkhunter --checkall 会卡在交互提示上
默认执行 rkhunter --checkall 时,每完成一个检测模块(比如“检查系统命令”“检查隐藏文件”),它都会停住并等你按 Enter 继续——这不是 bug,是设计如此,方便人工介入。但生产环境没人守着敲回车。
- 加
--skip-keypress参数才能全自动跑完:rkhunter --checkall --skip-keypress - 如果还希望静默输出(比如配合 cron 日志分析),再加
--quiet,但注意:--quiet会隐藏所有警告([ Warning ])和错误([ Error ]),只留[ OK ]和最终摘要,慎用 - 真正适合定时任务的是
--cronjob:它自动启用--skip-keypress,同时把日志写进/var/log/rkhunter.log(或配置的LOGFILE),还会抑制无关提示
rkhunter --propupd 必须在干净系统上首次运行
这个命令不是“更新数据库”,而是“拍一张当前系统文件属性的快照”——包括文件大小、权限、inode、MD5 值等。后续每次扫描都拿这个快照比对。所以它必须在确认系统未被入侵、关键工具(如 ls、ps、netstat)没被替换的前提下运行。
- 新装系统或重装后立即执行:
rkhunter --propupd - 升级核心包(如
glibc、coreutils)后,建议重新运行一次,否则可能误报“/bin/ls 权限异常”或“/usr/bin/md5sum 被修改” - 别在可疑系统上补跑:如果已经中招,快照本身就被污染,后续扫描失去意义
扫描结果里大量 [ Warning ] 不等于被黑了
比如 /sbin/ifdown [ Warning ]、/usr/bin/GET [ Warning ] 很常见,原因通常是:这些工具被发行版精简过、符号链接指向了其他实现(如 busybox)、或 SELinux/AppArmor 限制导致 rkhunter 读不到预期元数据。
- 先看日志路径:
grep "Warning\|Error" /var/log/rkhunter.log | head -20 - 重点盯三类警告:
File hash mismatch(文件哈希不一致)、Hidden file(隐藏进程或文件)、Kernel module(可疑内核模块加载) - 普通警告可临时忽略,但要在
/etc/rkhunter.conf里用ALLOWHIDDENFILE或ALLOWPROCLISTEN显式豁免,并注释原因,避免下次升级后又冒出来
定期扫描不能只靠 cron + --checkall
每天扫一次没问题,但 rkhunter 自身不监控实时行为,也不捕获网络连接突变或进程内存注入。它只做静态快照比对,属于“事后验尸”工具。
- 务必搭配其他手段:
chkrootkit(互补检测逻辑)、lynis audit system(配置基线检查)、ss -tulpn手动查监听端口 - 如果发现
/var/lib/rkhunter/db/rkhunter.dat文件时间比系统安装还早,说明数据库可能被篡改或复用了旧镜像——得删掉重建 - 别忘了验证 rkhunter 二进制本身:
sha256sum /usr/local/bin/rkhunter对比官网发布页的 checksum,防止工具被劫持
rkhunter 都可能被绕过了。

















