
服务器被挂马以后再装杀毒软件,就像厨房着火后才去研究灭火器说明书:当然还有用,但最好别等到那一步。ClamAV 是 Linux 服务器上最常见的开源恶意软件扫描工具之一,适合检查网站文件、用户上传目录、邮件附件、备份包和可疑压缩文件。
本文用 Ubuntu、Debian 服务器作为主线,讲清楚 ClamAV 是什么、如何安装、更新病毒库、扫描 WordPress 网站、设置定时任务,以及发现感染文件后应该怎样处理。Rocky Linux、AlmaLinux 等 RHEL 系发行版的安装方法也放在后面。
ClamAV是什么?
ClamAV 是由 Cisco 维护的开源杀毒工具包,采用 GPLv2 许可证。它包含命令行扫描器、多线程守护进程、病毒特征库更新工具,以及 Linux 下的按访问扫描功能。根据ClamAV官方文档,它可以识别病毒、木马、蠕虫、Office 宏病毒、移动恶意软件,并能检查 ZIP、RAR、7Zip、Tar、ISO 等多种压缩包或镜像格式。
先把几个常见命令认清:
clamscan:一次性扫描文件或目录,每次运行都会重新加载病毒库,不依赖后台服务。clamd:常驻内存的多线程扫描守护进程,适合频繁扫描。clamdscan:把扫描任务交给clamd,通常比反复运行clamscan更快。freshclam:下载和更新官方病毒特征库。clamonacc:Linux 实时监控工具,通过clamd扫描被访问的文件。
ClamAV不是完整的终端安全套件,也不是装完就能高枕无忧的“服务器护身符”。它不能代替系统补丁、最小权限、防火墙、WAF、登录保护、完整备份和入侵排查。它擅长的是发现已知恶意文件,尤其适合网站服务器、文件服务器和邮件网关。
安装前先看服务器配置
ClamAV加载病毒库时会占用明显内存。官方当前建议 Linux 服务器至少准备3GB内存、1颗2.0GHz以上CPU和5GB可用磁盘;如果机器还运行数据库、PHP和Web服务,需要留出更多余量。1GB或2GB的小服务器也不是绝对不能跑,但不适合长期常驻 clamd,扫描时还可能把网站挤得气喘吁吁。
先确认系统与资源:
cat /etc/os-release
free -h
df -h
nproc
Ubuntu、Debian安装ClamAV
第一步:安装扫描器和守护进程
sudo apt update
sudo apt install -y clamav clamav-daemon
安装完成后检查版本:
clamscan --version
freshclam --version
Ubuntu软件源会分别提供 clamav 与 clamav-daemon 包。发行版仓库里的版本不一定等于上游刚发布的最新版本,但通常已经带好服务账户、配置目录和 systemd 单元,服务器运维更省事。
第二步:更新病毒特征库
ClamAV开始扫描前必须先有病毒库,官方推荐使用 freshclam下载和更新,具体机制可查看病毒特征库更新文档。Ubuntu安装后通常会自动启动更新服务;如果直接运行 sudo freshclam提示日志或数据库被锁定,多半不是坏了,而是后台更新进程已经在工作。
需要手动完成第一次更新时,可以这样操作:
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl enable --now clamav-freshclam
再检查病毒库更新时间与服务状态:
sudo systemctl status clamav-freshclam --no-pager
ls -lh /var/lib/clamav/
sudo journalctl -u clamav-freshclam -n 50 --no-pager
第三步:启动clamd守护进程
sudo systemctl enable --now clamav-daemon
sudo systemctl status clamav-daemon --no-pager
第一次启动可能需要等待病毒库加载完成。内存较小或磁盘较慢时,状态短暂显示为“activating”并不罕见。
如何扫描服务器文件?
扫描单个文件
clamscan /path/to/file.zip
递归扫描整个目录
sudo clamscan -r -i /var/www
其中 -r表示递归子目录,-i只显示发现问题的文件。想保存报告,可以加日志参数:
sudo clamscan -r -i \
--log=/var/log/clamav/manual-scan.log \
/var/www
使用clamdscan提高重复扫描效率
如果 clamav-daemon已经运行,建议把日常扫描交给常驻守护进程:
sudo clamdscan --fdpass --multiscan /var/www
--fdpass让客户端把文件描述符交给守护进程,可减少因 clamd账户权限不足而出现的“Access denied”;--multiscan会并行处理目录。具体扫描选项可查阅ClamAV扫描文档。
WordPress网站应该扫描哪些目录?
对 WordPress 服务器,建议先扫描变化最频繁、也最容易藏文件的目录:
sudo clamdscan --fdpass --multiscan /var/www/html/wp-content/uploads
sudo clamdscan --fdpass --multiscan /var/www/html/wp-content/plugins
sudo clamdscan --fdpass --multiscan /var/www/html/wp-content/themes
再扫描整个站点:
sudo clamdscan --fdpass --multiscan /var/www/html
路径要按你的实际网站目录修改。ClamAV能发现已知木马和恶意脚本,但对经过混淆的新型PHP后门、数据库里的恶意管理员、计划任务持久化或被篡改的Nginx配置,不一定都能识别。出现可疑跳转时,还要检查Web日志、PHP进程、后台账号、插件主题、Cron、SSH密钥和数据库。
如果不想自己维护服务器、病毒库、备份和扫描任务,也可以选择由平台托管环境的SHOPAGG独立站;自己管理服务器则一定要把安全更新和备份当成日常工作,而不是出事后的临时加班。
发现感染文件后,不要直接使用–remove
clamscan支持 --remove删除感染文件,但生产服务器不建议直接使用。误报、被感染的核心文件或错误路径都可能让网站瞬间白屏。更稳妥的流程是:
- 先生成完整备份或快照。
- 记录检测名称、原始路径、文件哈希和修改时间。
- 将文件移入服务器外部的隔离目录,而不是立刻删除。
- 从官方安装包、代码仓库或可信备份恢复干净文件。
- 排查入侵入口,并更换后台、数据库、SSH、API密钥等凭据。
创建隔离目录并移动检测文件的示例:
sudo install -d -m 700 /var/quarantine/clamav
sudo clamscan -r -i \
--move=/var/quarantine/clamav \
/var/www/html
执行前请先备份,并确认隔离目录不在网站可访问范围内。ClamAV官方也提醒,告警有可能是误报,不应看到“FOUND”就闭眼删除。
如何设置每天自动扫描?
病毒库更新由 clamav-freshclam服务负责;文件扫描则可以交给Cron。下面的任务每天凌晨3点20分扫描网站,并把结果写入日志:
sudo tee /etc/cron.d/clamav-wordpress-scan >/dev/null <<'EOF'
20 3 * * * root /usr/bin/clamdscan --fdpass --multiscan /var/www/html >> /var/log/clamav/wordpress-scan.log 2>&1
EOF
sudo chmod 644 /etc/cron.d/clamav-wordpress-scan
先手动执行一次相同命令,确认路径、权限和日志都正常。站点文件很多时,不要把全盘扫描安排在备份、数据库统计或流量高峰同一时间。需要进一步降低影响,可以给一次性扫描加上 nice和 ionice:
sudo nice -n 15 ionice -c 3 \
clamscan -r -i /var/www/html
如何确认ClamAV真的能工作?
不要拿真实病毒测试服务器。EICAR提供了不含恶意代码的标准测试文件,杀毒软件会把它当成测试病毒处理。请从EICAR官方网站下载到临时目录,然后执行:
clamscan /tmp/eicar.com
正常情况下会看到类似 Win.Test.EICAR与 FOUND的提示。测试结束后删除文件,并确认扫描日志记录完整。
Rocky Linux、AlmaLinux等RHEL系如何安装?
RHEL兼容发行版通常从EPEL仓库安装:
sudo dnf install -y epel-release
sudo dnf install -y clamav clamav-update clamd
sudo freshclam
不同发行版和软件包版本的systemd服务名称可能不同,不要照抄一个服务名硬启动。先查看本机实际提供的单元:
systemctl list-unit-files | grep -Ei 'clam|fresh'
rpm -ql clamav-update | grep -E 'freshclam|systemd'
再启用对应的 freshclam与 clamd服务。ClamAV官方支持列表包含AlmaLinux 9/10,但第三方发行版软件包的配置路径和服务名仍应以本机安装结果为准。
常见问题排查
freshclam提示日志被锁定
通常是后台的 clamav-freshclam正在运行。日常使用让服务自动更新即可;确实需要手动更新时,先停止服务,运行 freshclam,再启动服务。
扫描时CPU或内存突然升高
病毒库加载、压缩包解压和大量小文件扫描都会消耗资源。避开业务高峰,先扫重点目录,排除缓存、备份和日志目录;小内存服务器可以只使用 clamscan按计划扫描,不必长期运行 clamd。
出现Access denied
先确认扫描命令是否有权读取目标文件。使用 sudo运行一次性扫描;使用 clamdscan时尝试 --fdpass,并检查守护进程账户、Unix Socket与目录权限。
病毒库一直无法更新
检查DNS、出站HTTPS、代理、防火墙和系统时间,再查看:
sudo journalctl -u clamav-freshclam -n 100 --no-pager
sudo freshclam --verbose
官方说明中明确指出,freshclam负责下载签名数据库;没有可用病毒库,clamscan与 clamd都无法正常发挥作用。安装成功只是第一步,更新、扫描、告警和处置流程缺一不可。



