在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、开发测试环境来说,这是性价比最高的基础安全措施之一。每天花几分钟看一眼邮件报告,就能对服务器的安全状态心里有底。真正出了问题,你也有历史报告可以追溯分析。安全这件事,不怕做得多,就怕什么都不做。
