Ubuntu 安装和使用 ClamAV
ClamAV 是开源恶意软件扫描引擎,适合文件服务器、邮件网关、上传目录和离线文件检查。它不是主机加固的全部内容,不能替代系统更新、最小权限、应用白名单、备份和入侵检测。
一、安装
sudo apt update
sudo apt install -y clamav clamav-daemon
clamscan --version
Ubuntu 软件包通常会安装 clamav-freshclam 服务自动更新病毒库。先查看服务状态:
systemctl status clamav-freshclam --no-pager
freshclam --version
只有手工更新与正在运行的 freshclam 服务冲突时,才临时停止服务:
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclam
如果更新失败,先检查 DNS、代理、系统时间和日志,不要从第三方网站下载病毒库。
二、扫描前准备
对大目录或生产服务器扫描可能消耗大量 CPU、磁盘 IO 和时间。建议:
- 先扫描测试目录并评估性能;
- 将隔离目录放在受控位置,限制普通用户访问;
- 排除虚拟文件系统、备份挂载点和不应重复扫描的隔离目录;
- 在低峰期执行,并监控磁盘空间;
- 重要文件先备份,发现告警后先隔离、核验,不要直接删除。
sudo install -d -m 700 /var/quarantine/clamav
三、常用扫描方式
扫描单个目录并只显示告警:
clamscan --recursive --infected /srv/uploads
记录日志并把告警文件移动到隔离目录:
sudo clamscan --recursive --infected \
--log=/var/log/clamav/manual-scan.log \
--move=/var/quarantine/clamav \
/srv/uploads
不建议使用 --remove 自动删除。误报或业务文件被删除后可能无法恢复。使用 clamdscan 前应确认 clamav-daemon 已运行并能读取目标路径。
四、理解退出码
ClamAV 扫描命令常见退出码:
0:未发现告警;1:发现告警;2:发生错误,例如权限不足、病毒库不可用或文件读取失败。
自动化脚本必须区分“发现病毒”和“扫描失败”,不能把两者都当作扫描成功。
五、计划任务示例
先创建脚本并在测试环境运行成功,再交给 systemd timer 或 cron。下面示例每天扫描上传目录,不直接删除文件:
30 2 * * * /usr/bin/clamscan --recursive --infected --move=/var/quarantine/clamav --log=/var/log/clamav/daily-scan.log /srv/uploads
路径应通过 command -v clamscan 确认。病毒库更新优先交给 clamav-freshclam 服务,不要重复创建并发更新任务。
六、发现告警后的处理
- 记录文件路径、检测名称、时间和主机;
- 隔离文件并保留哈希,避免继续传播;
- 结合文件来源、业务用途和多种证据判断是否误报;
- 排查同目录、同账号和同时间段的其他异常;
- 必要时按安全事件流程上报;
- 清理完成后重新扫描,并确认业务恢复。
官方参考:ClamAV 扫描文档
