虽然 Linux 服务器感染恶意软件的概率远低于 Windows,但来自 Web 应用漏洞上传的恶意脚本、被入侵后投放的后门文件,以及用户上传内容中携带的病毒依然值得防范。ClamAV 是目前最成熟的开源杀毒引擎,支持扫描文件、目录和邮件附件,是服务器安全审计的有效补充工具。
本文要点
- 安装 ClamAV 及病毒库更新工具
- 手动更新病毒特征库
- 扫描指定目录并解读扫描结果
- 配置定时扫描与感染文件隔离
安装 ClamAV
Debian / Ubuntu
apt update
apt install -y clamav clamav-daemon
# 首次安装后先停止 freshclam 服务,再手动更新病毒库
systemctl stop clamav-freshclam
freshclam
systemctl start clamav-freshclamCentOS / AlmaLinux / Rocky
dnf install -y epel-release
dnf install -y clamav clamd clamav-update
# 初始化配置(去掉 Example 占位符)
sed -i 's/^Example$/#Example/' /etc/clamd.d/scan.conf
sed -i 's/^Example$/#Example/' /etc/freshclam.conf
freshclam首次更新可能较慢
病毒库文件(main.cvd、daily.cvd)合计数百 MB,首次下载需要一些时间。之后每次更新只下载增量文件,速度更快。
更新病毒库
# 手动立即更新
freshclam
# 查看当前病毒库版本
clamscan --version扫描目录
常用扫描参数
| 参数 | 说明 |
|---|---|
| -r / --recursive | 递归扫描子目录 |
| -i / --infected | 只显示感染文件 |
| --log=路径 | 将结果写入日志文件 |
| --move=目录 | 将感染文件移到隔离目录(推荐) |
| --remove | 直接删除感染文件(谨慎) |
| --exclude-dir=路径 | 排除指定目录(如 /proc /sys) |
常用扫描示例
# 扫描 Web 根目录,只显示感染文件
clamscan -r /var/www --infected --log=/var/log/clamav/scan.log
# 扫描整个系统(耗时较长,安排在低峰期)
clamscan -r / --infected \
--exclude-dir=/proc --exclude-dir=/sys --exclude-dir=/dev \
--log=/var/log/clamav/fullscan.log
# 发现感染文件后移到隔离目录(推荐代替 --remove)
mkdir -p /var/quarantine
clamscan -r /var/www --infected --move=/var/quarantine用 --move 代替 --remove
杀毒软件存在误报可能。建议用 --move 将可疑文件移到隔离目录,人工确认后再决定是否删除,避免误删正常文件。
解读扫描结果
| 输出字段 | 含义 |
|---|---|
| Infected files: 0 | 未发现感染文件,正常 |
| Infected files: N(N>0) | 发现 N 个感染文件,需立即处理 |
| 文件路径: 威胁名 FOUND | 该文件被标记为威胁,路径后显示威胁名称 |
| ERROR | 无法读取该文件(权限不足或损坏) |
配置定时扫描
crontab -e# 每天凌晨 2 点扫描 /var/www,结果写入日志
0 2 * * * clamscan -r /var/www --infected --log=/var/log/clamav/daily-$(date +\%F).log 2>&1
# 每天凌晨 1 点更新病毒库
0 1 * * * freshclam --quiet有感染时才发邮件告警
#!/bin/bash
# /usr/local/bin/clamav-scan.sh
mkdir -p /var/log/clamav
LOG=/var/log/clamav/scan-$(date +%F).log
clamscan -r /var/www --infected --log="${LOG}" 2>&1
# 只有发现感染文件时才发邮件
if grep -q "FOUND" "${LOG}"; then
mail -s "[ClamAV 告警] 发现感染文件" admin@example.com < "${LOG}"
fiClamAV 是补充工具而非万能解
ClamAV 擅长发现已知恶意特征文件,对新型攻击的检出率有限。最有效的安全策略仍是最小权限、及时打补丁、监控异常进程,ClamAV 作为定期体检工具使用效果最佳。
小结
- 安装后先更新病毒库(freshclam),再扫描
- clamscan -r 目录 --infected 是最常用的命令
- 用 --move 隔离而非 --remove 直接删除,避免误删
- 配置 cron 定期扫描重要目录,结合邮件告警
常见问题
ClamAV 扫描会影响服务器性能吗?
全盘扫描会占用 CPU 和 I/O,建议在凌晨低峰期运行,或用 --max-scansize 限制扫描文件大小上限。
发现感染文件后怎么处理?
先用 --move 移到隔离目录,查看威胁名称判断性质,确认为恶意文件后删除,同时排查文件如何进入系统并修补漏洞。
clamd 守护进程和 clamscan 有什么区别?
clamscan 是一次性扫描命令;clamd 是常驻进程,其他程序(如邮件系统)可调用它实时扫描,不必每次重新加载病毒库,速度更快。