clamav 是运行在 Unix/Linux 系统的杀毒软件。功能很强大。
上层概念
freshclam用来更新 clamav 病毒数据库。数据库放置在/var/lib/clamav/,且文件的用户和用户组都是clamav。clamd是 clamav daemon 进程,它会读取配置文件/etc/clamav/clamd.conf。clamd不会自动查毒。clamdtop是clamd进程的监控程序。查看 clamd 线程池。clamdscan通知clamd进程进行查毒。通常执行clamdscan --fdpass <文件或目录>。clamscan与clamd无关,直接根据当前命令参数执行查毒,因此也不会读取配置文件/etc/clamav/clamd.conf。通常执行sudo clamscan -ri /。clamconf显示或生成 clamav 的配置文件。clamonacc是 on-access 扫描服务,当文件变化会立刻扫描。依赖clamd。配置文件/etc/clamav/clamd.conf里以OnAccess开头的都是相关配置项。
clamonacc Access denied
如果 /etc/clamav/clamd.conf 配置的是 User clamd,那么扫描时会报错 Access denied。
运行 clamdscan 和 clamonacc 命令都需要加上 --fdpass 参数。
需要手动创建 /root/quarantine
/lib/systemd/system/clamav-clamonacc.service 写了 ExecStart=/usr/sbin/clamonacc -F --fdpass --log=/var/log/clamav/clamonacc.log --move=/root/quarantine。
--move 参数的作用是把被病毒感染的文件移动到指定目录。如果 /root/quarantine 目录没创建,会报错。
注意 /root/quarantine 目录的 user 和 group 跟 clamav-clamonacc 进程的 user 对齐。
创建病毒文件来测试
创建 EICAR 标准反病毒测试文件。
mkdir eicar && cd eicar
curl -O https://secure.eicar.org/eicar.com \
-O https://secure.eicar.org/eicar.com.txt \
-O https://secure.eicar.org/eicar_com.zip \
-O https://secure.eicar.org/eicarcom2.zip然后尝试扫描病毒 clamdscan ./*,显示出 Win.Test.EICAR_HDB-1 FOUND 就说明扫出病毒。扫完后尝试 cat eicar.com。
clamdscan 扫不出病毒,但 clamscan 可以
用 clamdscan -v --fdpass $path 看看那个病毒文件是不是 excluded 的。当前 clamav 有个 bug 会把 excluded 的文件也输出 OK。