在Ubuntu服务器上部署chkrootkit并实现每日自动扫描、邮件报告,核心操作就三步:安装chkrootkit工具、编写每日扫描的Shell脚本、配置cron定时任务和邮件发送。整个过程不需要复杂的第三方软件,系统自带的mailutils和cron就能搞定。下面我把每一步的具体操作、常见坑和优化建议全部讲清楚。

chkrootkit是一个轻量级的Linux rootkit检测工具,它会检查系统二进制文件是否被篡改、检查已知的rootkit签名、扫描可疑的网络监听端口和隐藏进程。虽然它不是万能的,但作为日常安全巡检的第一道防线非常实用。把它跑起来并每天自动发报告,你就能第一时间发现服务器是否被入侵。

第一步:安装chkrootkit及邮件发送依赖

Ubuntu默认仓库里就有chkrootkit,直接用apt安装即可。同时需要安装mailutils来发送邮件报告,如果你的服务器用的是postfix或者ssmtp做邮件中转,也要提前配置好。这里以最简单的方式演示:

sudo apt update
sudo apt install -y chkrootkit mailutils

安装完成后,先手动跑一次看看效果:

sudo chkrootkit

如果输出类似"INFECTED"或者发现了可疑项,说明系统可能存在问题,需要进一步排查。如果全部显示"not found"或"not infected",说明当前系统是干净的。这一步很重要,先确认工具本身能正常工作。

第二步:编写每日扫描脚本

手动跑一次不够,我们需要一个自动化脚本。在/usr/local/bin/目录下创建一个脚本文件:

sudo nano /usr/local/bin/daily_chkrootkit.sh

脚本内容如下,我把每一行的作用都写了注释:

#!/bin/bash

# 定义变量
DATE=$(date '+%Y-%m-%d %H:%M:%S')
HOSTNAME=$(hostname)
REPORT_FILE="/tmp/chkrootkit_report_${DATE}.txt"
MAIL_TO="admin@yourdomain.com"
MAIL_SUBJECT="[安全报告] $HOSTNAME chkrootkit扫描 - $DATE"

# 执行扫描并将结果写入文件
echo "===== chkrootkit 扫描报告 =====" > $REPORT_FILE
echo "扫描时间: $DATE" >> $REPORT_FILE
echo "主机名: $HOSTNAME" >> $REPORT_FILE
echo "================================" >> $REPORT_FILE
echo "" >> $REPORT_FILE

# 运行chkrootkit并追加输出
sudo chkrootkit >> $REPORT_FILE 2>&1

echo "" >> $REPORT_FILE
echo "===== 扫描结束 =====" >> $REPORT_FILE

# 发送邮件
cat $REPORT_FILE | mail -s "$MAIL_SUBJECT" "$MAIL_TO"

# 清理临时文件(保留最近7天的报告)
find /tmp/chkrootkit_report_*.txt -mtime +7 -delete

exit 0

写完后给脚本执行权限:

sudo chmod +x /usr/local/bin/daily_chkrootkit.sh

这里有几个关键点要注意。第一,脚本里用了sudo chkrootkit,因为chkrootkit需要root权限才能检查系统文件。第二,邮件收件人地址要改成你自己的。第三,脚本最后加了自动清理,避免临时文件堆积占满磁盘。第四,2>&1是把标准错误也重定向到文件里,确保不会漏掉任何输出。

第三步:配置邮件发送能力

很多人卡在这一步,因为Ubuntu服务器默认没有配置好邮件发送。有两种方案:

方案一:使用系统自带的postfix。安装后选择"Internet Site"模式,配置好域名即可。适合有固定IP和域名的服务器。

sudo apt install -y postfix
sudo dpkg-reconfigure postfix

方案二:使用ssmtp配合外部邮箱SMTP(比如企业邮箱或第三方邮箱)。编辑/etc/ssmtp/ssmtp.conf:

root=your_email@yourdomain.com
mailhub=smtp.yourdomain.com:587
AuthUser=your_email@yourdomain.com
AuthPass=your_password
UseSTARTTLS=YES
UseTLS=YES
FromLineOverride=YES

然后把默认的sendmail指向ssmtp:

sudo apt install -y ssmtp
sudo chmod 640 /etc/ssmtp/ssmtp.conf
sudo chmod 640 /etc/ssmtp/revaliases

不管用哪种方案,测试一下能不能发出去:

echo "测试邮件" | mail -s "测试" admin@yourdomain.com

收到邮件就说明配置成功了。如果没收到,检查/var/log/mail.log看看报什么错,通常是认证失败或者被当成垃圾邮件拦截了。

第四步:配置cron定时任务每日自动执行

Ubuntu用cron来管理定时任务。编辑root用户的crontab:

sudo crontab -e

在文件末尾添加一行,设置每天凌晨3点执行扫描:

0 3 * * * /usr/local/bin/daily_chkrootkit.sh

格式解释:0 3 * * * 分别代表分钟、小时、日、月、星期。意思是每天凌晨3点整执行。你可以根据自己的需求调整时间,比如改成凌晨2点或者晚上11点,避开业务高峰期。

保存退出后,确认crontab已经生效:

sudo crontab -l

如果看到刚才那行就对了。另外建议同时配置一个每周的手动提醒,检查cron服务是否正常运行:

0 3 * * 0 /usr/local/bin/daily_chkrootkit.sh && echo "周报已发送" || echo "周报发送失败" | mail -s "cron状态检查" admin@yourdomain.com

这样万一某天扫描没跑成功,你也能收到告警。

第五步:进阶优化和安全加固建议

基础配置完成后,还有几个值得做的优化:

1、排除误报。chkrootkit有时候会报一些假阳性,比如某些自定义脚本或者特殊内核模块会被标记为可疑。你可以把确认安全的项记录下来,在脚本里加一个过滤逻辑,只把真正的"INFECTED"和"WARNING"级别的结果高亮显示。

2、日志归档。把每次的报告不只是发邮件,还存一份到指定目录方便回溯:

cp $REPORT_FILE /var/log/chkrootkit_reports/

3、配合其他工具。chkrootkit只是检测工具之一,建议同时部署rkhunter(另一款rootkit检测工具)和aide(文件完整性检测),形成多层防护。rkhunter的安装和配置方式类似,也可以写进同一个脚本里。

sudo apt install -y rkhunter
sudo rkhunter --update
sudo rkhunter --check

4、监控告警升级。如果扫描结果发现"INFECTED",光发邮件可能不够及时。可以在脚本里加一个判断逻辑,发现感染立即发高优先级告警:

if grep -q "INFECTED" $REPORT_FILE; then
    cat $REPORT_FILE | mail -s "[紧急] $HOSTNAME 检测到rootkit!" admin@yourdomain.com
fi

5、定期更新签名库。chkrootkit本身不会自动更新,需要手动定期拉取最新的检测规则。可以在脚本开头加一行更新命令,或者单独设一个每周更新的cron任务。

sudo chkrootkit --update
第六步:常见问题排查

部署过程中可能遇到的问题及解决办法:

问题一:cron任务没执行。检查cron服务是否在运行:sudo systemctl status cron。如果没运行就启动它:sudo systemctl start cron。

问题二:邮件被当成垃圾邮件。这是因为服务器IP没有反向DNS解析或者没有SPF记录。解决办法是配置好DNS的PTR记录,或者使用有信誉的邮件中转服务。

问题三:chkrootkit扫描时间太长。在大型服务器上可能需要十几分钟甚至更久。如果觉得影响性能,可以把扫描时间调到业务低峰期,或者在脚本里加nice值降低优先级。

nice -n 19 sudo chkrootkit >> $REPORT_FILE 2>&1

问题四:脚本权限不足导致执行失败。确保脚本文件的属主是root,权限是755或700,cron任务也必须用root的crontab来配置,因为chkrootkit必须以root身份运行。

总结:为什么这套方案值得部署

这套方案的核心价值在于"低成本、高覆盖"。chkrootkit本身占用资源极少,扫描速度快,配合cron和邮件就能实现7×24小时的自动化安全巡检。它不能替代专业的入侵检测系统(IDS)或者安全运营中心(SOC),但对于中小型服务器、个人VPS、开发测试环境来说,这是性价比最高的基础安全措施之一。每天花几分钟看一眼邮件报告,就能对服务器的安全状态心里有底。真正出了问题,你也有历史报告可以追溯分析。安全这件事,不怕做得多,就怕什么都不做。