虽然 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-freshclam

CentOS / 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}"
fi

ClamAV 是补充工具而非万能解

ClamAV 擅长发现已知恶意特征文件,对新型攻击的检出率有限。最有效的安全策略仍是最小权限、及时打补丁、监控异常进程,ClamAV 作为定期体检工具使用效果最佳。

小结

  • 安装后先更新病毒库(freshclam),再扫描
  • clamscan -r 目录 --infected 是最常用的命令
  • 用 --move 隔离而非 --remove 直接删除,避免误删
  • 配置 cron 定期扫描重要目录,结合邮件告警

常见问题

ClamAV 扫描会影响服务器性能吗?

全盘扫描会占用 CPU 和 I/O,建议在凌晨低峰期运行,或用 --max-scansize 限制扫描文件大小上限。

发现感染文件后怎么处理?

先用 --move 移到隔离目录,查看威胁名称判断性质,确认为恶意文件后删除,同时排查文件如何进入系统并修补漏洞。

clamd 守护进程和 clamscan 有什么区别?

clamscan 是一次性扫描命令;clamd 是常驻进程,其他程序(如邮件系统)可调用它实时扫描,不必每次重新加载病毒库,速度更快。