
核心要点(TL;DR)
- rkhunter 与 chkrootkit 只能覆盖已知特征,手工排查才是发现未知后门的关键。
- 扫描工具误报率高,必须结合文件时间戳、进程与网络连接交叉验证。
- 入侵后先取证再清理,直接删文件会破坏溯源线索。
- 持久化点集中在 cron、systemd、SSH 公钥与 LD_PRELOAD,优先检查这四处。
半夜收到告警,登录服务器发现 CPU 跑满、陌生 IP 频繁连接,却不知道从哪查起——这是很多运维和站长遇到 Linux 后门时的真实状态。本文把 rkhunter、chkrootkit 与手工排查三种 Linux 后门检测方案放到同一张桌面上,给出可直接复制的命令、误报判断方法和检查清单,目标是让你在半小时内完成一轮有结论的排查。
三种方案各自解决什么问题
先明确边界,避免把工具当万能药。
- rkhunter:基于特征库与文件属性基线,检查 Rootkit、被替换的系统命令、异常网络参数与隐藏文件,覆盖广但依赖更新。
- chkrootkit:轻量本地检查,重点在已知 Rootkit 特征、日志异常与网络接口混杂模式,速度快、误报也相对集中。
- 手工排查:不依赖特征库,从进程、网络、账号、持久化项反推异常,是发现未知后门与内存马的主要手段。
结论很直接:工具负责快速筛查,手工排查负责定性。只跑扫描工具就宣布“服务器干净”,是应急响应里最常见的错误。
方案一:rkhunter 安装与实战扫描
Debian/Ubuntu 与 RHEL 系均可直接安装:
apt install rkhunter -y # 或 yum install rkhunter -y rkhunter --update rkhunter --propupd rkhunter --check --sk
首次执行 --propupd 会建立文件属性基线,务必在确认系统干净时做,否则基线本身就被污染。扫描结果在 /var/log/rkhunter.log,重点关注 Warning 行。
常见误报与处理:
- 隐藏文件告警:多为应用自身生成的
.htaccess、.env,核对路径即可。 - 端口或协议异常:容器环境、NAT 下常见,结合
ss -tunlp实际监听判断。 - 系统命令被替换:这是高危信号,用
rpm -V coreutils或debsums校验包完整性确认。
方案二:chkrootkit 快速筛查
apt install chkrootkit -y chkrootkit -q chkrootkit -x | less # 专家模式,输出更详细
输出中 INFECTED 必须逐条核实,not infected 可略过。Checking `bindshell'、Checking `sniffer' 出现异常时,配合 lsof -i 与 ip link 确认是否存在监听后门或网卡混杂模式。
chkrootkit 的已知弱点是特征陈旧,对近年的挖矿木马、SSH 暴力破解后植入的公钥后门基本无感,因此它只能作为第一道筛子。
方案三:手工排查六步清单
这一步决定你能否发现未知后门。按顺序执行,边查边记录。
1. 进程与网络
ps auxf | grep -v '\[' | sort -k3 -nr | head -20 ss -tunlp lsof -i -P -n | grep LISTEN
关注:无父进程的孤儿进程、路径在 /tmp、/dev/shm 的可执行文件、监听在非常规端口的服务。
2. 账号与提权配置
awk -F: '==0{print }' /etc/passwd
grep -v '^#' /etc/sudoers
ls -la /etc/sudoers.d/除 root 外出现 UID 为 0 的账号、sudoers 中陌生的 NOPASSWD 条目,都要立即处置。
3. 持久化项
crontab -l; ls -la /etc/cron.*/ systemctl list-unit-files --state=enabled cat /etc/rc.local 2>/dev/null cat /etc/ld.so.preload 2>/dev/null
/etc/ld.so.preload 非空是典型的用户态 Rootkit 手法,正常情况下该文件不应存在。
4. SSH 后门
cat /root/.ssh/authorized_keys find / -name authorized_keys 2>/dev/null
逐个比对公钥指纹,陌生密钥直接移除并轮换密码。
5. 文件时间戳与 SUID
find / -xdev -mtime -7 -type f -perm -u+x 2>/dev/null | head -50 find / -xdev -perm -4000 -type f 2>/dev/null
入侵时间窗内新增的可执行文件、异常 SUID 程序,是最有价值的线索。
6. 日志与登录记录
last -a | head -20 lastb | head -20 grep -i 'accepted' /var/log/auth.log | tail -30
三种方案对比与选用建议
| 维度 | rkhunter | chkrootkit | 手工排查 |
|---|---|---|---|
| 覆盖范围 | 广,含基线比对 | 窄,偏已知特征 | 取决于经验 |
| 未知后门 | 弱 | 弱 | 强 |
| 误报率 | 中 | 中高 | 低(需经验) |
| 耗时 | 5–15 分钟 | 3–10 分钟 | 20–40 分钟 |
| 适用场景 | 日常巡检 | 快速初筛 | 疑似入侵定性 |
推荐流程:日常用 rkhunter 定时巡检建立基线,告警后先跑 chkrootkit 快速初筛,再用手工六步清单定性,三者结果交叉验证后才下结论。
处置与加固建议
确认后门后,先取证再清理:备份日志与可疑文件、记录哈希与进程信息,再删除持久化项、轮换所有凭据、升级存在漏洞的组件。加固层面,关闭不必要端口、禁用密码登录、限制 sudo 范围、对关键目录做哈希基线并持续监控。在防护建议上,可借助 AegisX 的主机防护能力实现文件完整性与异常进程的实时告警,把“事后排查”前移为“事中拦截”。
行动建议:今天就对生产服务器执行一次 rkhunter --propupd 建立干净基线,并把本文六步清单固化成脚本加入巡检,下一次告警时你会有据可查。
常见问题(FAQ)
rkhunter 和 chkrootkit 能查出所有后门吗?
不能。两者都基于已知特征库与基线比对,对新型 Rootkit、内存马、被篡改的合法二进制无能为力。正确用法是让它们做第一轮快速筛查,再用手工排查核对进程、网络连接、账号与持久化项,最后用文件哈希与时间戳交叉验证,任何单一工具的结果都不足以定论。
扫描时出现大量警告,怎么判断哪些是真后门?
先看警告类型。隐藏进程、/dev 下异常文件、被替换的系统命令属于高危;隐藏文件、端口异常多为误报。对每个警告记录路径与哈希,用 rpm -V 或 debsums 校验包完整性,再对照文件修改时间是否落在可疑时间窗内,能快速筛掉大部分误报。
服务器疑似被入侵,第一步应该做什么?
先隔离再取证。断开公网访问但保留运行状态,立即备份 /var/log、/etc/passwd、crontab、进程列表与网络连接快照,记录可疑文件哈希。不要在取证前重启或直接删除可疑文件,否则内存中的进程信息与日志线索会丢失,后续溯源和定责都会变得困难。
手工排查最少要检查哪些位置?
至少覆盖六处:异常进程与网络连接、/etc/passwd 与 sudoers 中的可疑账号、cron 与 systemd 定时任务、SSH authorized_keys、/etc/ld.so.preload 与启动脚本、/tmp 与 /dev/shm 下的可执行文件。这六处覆盖了绝大多数持久化手法,逐项核对耗时通常在半小时以内。
怎么避免以后再次被植入后门?
核心是收敛入口与建立基线。关闭不必要端口、禁用密码登录改用密钥、限制 sudo 权限、定期审计账号与计划任务,并对关键目录做哈希基线,出现变化即告警。可借助 AegisX 的主机防护能力做文件完整性与异常进程监控,把事后排查变成事中拦截。