clamav是linux服务器上专用于检测木马和恶意软件的开源命令行杀毒引擎,默认仅查杀不自动清除、无实时监控、不绕过权限限制;其核心工具clamscan为单次扫描、不依赖服务,而clamdscan需clamd守护进程支持、速度快但须确保服务运行及socket可达。

ClamAV 在 Linux 服务器上能有效扫描已知木马和恶意软件,但默认不自动清除、不实时监控、不绕过权限限制——它是个“发现者”,不是“清道夫”。你得自己决定扫哪里、怎么报、扫到后怎么处理。
clamscan 和 clamdscan 到底该用哪个?
两者核心区别不在功能强弱,而在运行模型和权限边界:
-
clamscan是单次命令行工具,不依赖服务,适合一次性扫描或低频检查;但它每次都要加载病毒库,速度慢,且无法跳过 root 权限保护的路径(比如/proc、/sys下的部分文件) -
clamdscan依赖clamd守护进程,病毒库常驻内存,扫描快 3–5 倍;它能以clamav用户身份访问更多路径(前提是配置了AllowSupplementaryGroups yes并把clamav加入目标目录所属组),但必须确保clamd正在运行且 socket 可达 - 常见错误:
clamdscan: connect() to /var/run/clamd.scan/clamd.sock failed—— 这说明clamd没启动,或LocalSocket路径在/etc/clamd.d/scan.conf里配错了,或 socket 文件权限不对(应属clamav:clamav,且至少660)
freshclam 更新失败的三个高频原因
病毒库拉不下来,90% 不是网络问题,而是配置或权限卡点:
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
-
ERROR: Can't open /var/lib/clamav/clamav-xxx.cvd或ERROR: getfile: Download interrupted:检查/var/lib/clamav所有者是否为clamav:clamav,且目录可写;freshclam默认以该用户运行,权限不对会静默失败 -
ERROR: Your ClamAV version is outdated:系统仓库版(如 CentOS 7 自带的 0.103)可能被官方拒绝服务;查clamscan --version,若低于1.0.0,必须源码编译或换 EPEL 仓库 -
ERROR: HTTP GET failed且确认网络通:国内服务器大概率被 DNS 污染或 TLS 握手失败;在/etc/clamav/freshclam.conf中取消注释DatabaseMirror database.clamav.net,并添加镜像行如DatabaseMirror clamav.threats.org(需确认镜像可用);同时确保libcurl版本 ≥ 7.40(rpm -q libcurl或dpkg -l | grep libcurl)
写定时扫描脚本前必须绕开的坑
直接丢个 clamscan -r / --remove 到 crontab,轻则漏扫、重则删崩系统:
- 不要扫
/proc、/sys、/dev—— 这些是虚拟文件系统,clamscan会反复尝试读取导致大量Permission denied日志刷屏,甚至触发 OOM;加--exclude=/proc --exclude=/sys --exclude=/dev -
--remove是危险操作:它会静默删除所有匹配签名的文件,包括被篡改的合法二进制(如被注入 shellcode 的/usr/bin/ssh);生产环境建议先用--infected --bell报警,人工确认后再处理 - 日志路径要绝对且可写:
-l /var/log/clamav/scan-$(date +\%F).log,否则 cron 下执行时工作目录不确定,日志可能写到 root 家目录或直接丢弃 - 如果用
clamdscan,必须在脚本开头加判断:if ! systemctl is-active --quiet clamd; then exit 1; fi,避免服务宕掉还硬扫
扫到木马后不能只靠 --remove
ClamAV 的检测基于签名,对混淆、无文件、内存驻留类木马基本无效;即使报出 Elf.Trojan.Mirai-XXXX,也只代表“这个文件匹配已知样本”,不等于它正在运行或具备危害:
- 先用
ps auxf | grep -E "(mirai|shellbot|ddgs)"看进程,再用lsof -p PID查该进程打开的文件 - 检查
/tmp、/dev/shm、/var/tmp下的可疑 ELF 文件(file /tmp/xxxx看类型,strings /tmp/xxxx | head -20看硬编码 IP 或域名) - 查登录日志:
lastb | head -20(爆破记录)、journalctl -u sshd --since "2 hours ago" | grep "Accepted"(异常登录) -
--remove删除后,务必检查该文件是否被 systemd 或 cron 自动重建(比如被写入/etc/cron.d/的持久化任务)










