Docker运行ClamAV
使用 Docker 运行 ClamAV是最优雅且不破坏当前系统环境的解决办法。
由于 Docker 容器自带了符合要求的基础环境(包括新版的 glibc),因此它可以完美避开你宿主机系统太老的问题。
以下是保姆级的详细操作教程:
📝 前置准备
确保你的服务器上已经安装了 Docker,并且正常启动。可以通过以下命令检查:
1 | docker -v |
第一步:创建病毒库挂载目录 (强烈建议)
ClamAV 需要依赖最新的病毒库来识别木马。如果我们每次运行容器都去下载几百MB的病毒库,会非常慢且浪费网络。
因此,我们在宿主机上建一个目录,用来永久保存病毒库。
1 | # 创建用于存放病毒库的目录 |
第二步:首次下载/更新病毒库
运行以下命令,启动一个临时的 Docker 容器,它的唯一任务就是执行 freshclam(更新病毒库的命令),并将下载好的库文件保存到我们刚创建的宿主机目录中。
1 | docker run -it --rm \ |
*⏳ 注意:首次下载病毒库可能需要 5-10 分钟左右,具体取决于你的网络速度。看到类似 Downloading daily.cvd [100%] 和 Database updated 的提示,就说明更新完成了。*
第三步:开始扫描文件或目录
病毒库准备好后,就可以开始扫描了。原理是:把宿主机上你需要扫描的目录,通过 -v 映射到容器内部,然后让容器对映射进去的目录进行扫描。
场景 A:扫描指定的某个目录
假设你想扫描宿主机上的 /var/www/html 目录:
1 | docker run -it --rm \ |
命令参数解释:
-it --rm:运行完毕后自动删除该临时容器,不占用系统垃圾。-v /var/www/html:/scandir:将宿主机的/var/www/html挂载到容器内的/scandir(只读扫描,不影响原文件)。-v /opt/clamav/database:/var/lib/clamav:挂载我们刚才下载好的病毒库。clamscan:执行扫描的主命令。-r:递归扫描(扫描该目录下的所有子文件夹)。-i:只显示被感染的文件(Infected)。如果不加这个参数,它会把你几万个正常文件全打印在屏幕上,眼睛根本看不过来。
场景 B:全盘扫描(扫描宿主机的整个根目录)
如果你想给服务器做一次全盘大体检,可以将宿主机的根目录 / 挂载进去。
注意:全盘扫描时必须排除一些系统虚拟目录(如 /proc, /sys, /dev),否则会无限循环或报错。
1 | docker run -it --rm \ |
(注意:这里加了 :ro 表示 Read-Only 只读,确保扫描工具绝对不会意外修改你宿主机的文件,十分安全。)
💡 进阶技巧:如何让扫描结果保存到文件?
如果你扫描的目录很大,可能需要好几个小时,你不想一直盯着屏幕,可以将结果输出到一个文本文件里。
假设你想扫描 /data 目录,并将结果存到宿主机的 /tmp/scan_result.txt:
1 | docker run -it --rm \ |
(原理是直接利用 Linux 的重定向符 > 将终端输出保存为文件,等它跑完你直接 cat /tmp/scan_result.txt 查看即可)
(说明:–max-filesize=4000M 和 –max-scansize=4000M 表示允许扫描最大 4GB 的文件和解压体积。你可以根据你的 .tar 包实际大小,把 4000M 改得更大,比如 10000M)
✅ 总结流程
以后你日常的杀毒流程就变成了这两步:
- 隔个两三天更新一次病毒库:
1
docker run --rm -v /opt/clamav/database:/var/lib/clamav clamav/clamav freshclam
- 执行杀毒:
1
docker run --rm -v /你要扫描的目录:/scandir -v /opt/clamav/database:/var/lib/clamav clamav/clamav clamscan -r -i /scandir