clamscan 通过 ClamAV 扫描文件
clamav
安装
package
debain
clamav
1 | sudo apt install clamav |
建议安装:
clamav-docs libclamunrar9
下列【新】软件包将被安装:
clamav clamav-base clamav-freshclam libclamav9 libllvm3.9 libmspack0 libtfm1
安装后出现进程
1
clamav 10856 1 0 10:57 ? 00:00:00 /usr/bin/freshclam -d --foreground=true
/etc/clamav 没有 clamd.conf 配置文件
没有 clamconf 命令
clamav-daemon
1 | sudo apt install clamav-daemon |
建议安装:
clamav-docs daemon
下列【新】软件包将被安装:
clamav-daemon clamdscan
安装后出现进程
1
clamav 15402 1 10 11:22 ? 00:00:11 /usr/sbin/clamd --foreground=true
/etc/clamav 出现 clamd.conf 配置文件
有 clamconf 命令
docker
宿主机创建目录用于 socket 映射
1 | sudo mkdir -p /var/lib/clamav/sockets |
启动命令
1 | docker run -it --rm \ |
进入容器
1 | docker exec -it clamav sh |
镜像是使用alpine制作的,不能使用 bash
退出容器重启
1 | docker restart clamav |
clamscan 配置 socket 为 /var/lib/clamav/sockets/clamd.sock
卸载
1 | sudo apt remove clamav-daemon |
文件目录
log file
/var/log/clamav/clamav.log
下载后自动创建
1 | -rw-r----- 1 clamav adm 0 7月 7 17:45 clamav.log |
database directory
/var/lib/clamav
下载后自动创建
1 | -rw-r--r-- 1 clamav clamav 293670 7月 7 17:45 bytecode.cvd |
- 没有socket
config
/etc/clamav/clamd.conf
/etc/clamav/freshclam.conf
下载后自动创建
1 | -rw-r--r-- 1 root root 1994 7月 7 17:45 clamd.conf |
socket
/var/run/clamav
启动 clamd 之后会出现
1 | srw-rw-rw- 1 clamav clamav 0 7月 7 18:47 clamd.ctl= |
配置
clamd
detail
LocalSocket
ubuntu 上为 /var/run/clamav/clamd.ctl
docker 中为 /run/clamav/clamd.sock
ConcurrentDatabaseReload
1 | ConcurrentDatabaseReload no |
ClamAV 0.103.0 新增
yes default
非阻塞数据库重新加载【默认】,不阻塞数据扫描,数据库更新时会临时消耗两倍的内存
禁用该功能,则数据库更新时会阻塞数据扫描,直到数据库更新完成
ExitOnOOM
1 | ExitOnOOM yes |
out of memory 时退出 clamd 进程
freshclam
detail
UpdateLogFile
1 | UpdateLogFile /var/log/clamav/freshclam.log |
TestDatabases no
- 限制内存使用
Checks 12
- 限制检查更新次数
ScriptedUpdates yes
- 脚本跟新,仅更新差异部分
命令
# /usr/bin 目录下
clamconf
一个工具,用于检查或生成ClamAV配置文件,并收集帮助远程调试问题可能需要的附加信息
1 | clamconf -g freshclam.conf > freshclam.conf |
在 /etc/clamav 目录下创建时,需要先切换到 root 用户(
sudo su
)。临时sudo不行创建的是 example 配置文件。全部配置都是注释的,用来了解配置。
安装 clamav-daemon 时会自动创建一个 clamd.conf,是配置好的
clamscan
一个命令行程序,用于扫描文件或目录,不需要 clamd 守护进程
clamdscan
一个通过clamd扫描文件和目录的命令行程序
需要先启动 clamd 否则报错
ERROR: Could not connect to clamd on LocalSocket /var/run/clamav/clamd.ctl: Connection refused
clamdtop
一个用于监视clamd的命令行GUI
clamsubmit
freshclam
签名数据库(cvd)升级工具
由Cisco-Talos签名并发布的压缩的ClamAV特征库归档文件
# /usr/sbin 目录下
clamd
守护进程
一个多线程守护进程,侦听网络套接字或unix套接字上的扫描请求。clamd的客户端应用包括clamdtop、clamdscan、clamave -milter和clamonacc。
通过 sudo 启动,否则无法访问日志文件
ERROR: Can’t open /var/log/clamav/clamav.log in append mode (check permissions!).
ERROR: Can’t initialize the internal logger
查看版本
1 | clamdscan --version |
服务管理
/lib/systemd/system 目录下
- clamav-daemon.service
- clamav-freshclam.service
病毒数据库
.cvd
文件
应用
测试病毒文件
https://www.eicar.org/download-anti-malware-testfile/ 下载测试病毒文件
1 | X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H* |
上传文档扫描
对上传到 Cloud Storage 的文档进行自动恶意软件扫描
clamscan
启动clamav
1 | clamd // 启动扫描守护进程 |
配置
socket
1 | // 使用本地socket 【推荐】 |
配置环境变量
CLAMAV_SOCKET=”/var/run/clamav/clamd.ctl”
需要在配置文件中看一下不同运行环境下socket的地址。docker 中为 /run/clamav/clamd.socket
如果通过 docker 镜像启动 clamav,则socket地址为 /var/lib/clamav/sockets/clamd.sock
clamscan/clamdscan
使用二进制的时候,如果文件名包含空格,则在命令行执行的时候会报错(找不到文件)
1
2
3
4# 文件路径,字符串格式不会转义,可以正常保存文件
".../path/to/upload/file/261_560/3d100.png (1).jpg"
# 但是拼接到命令行执行时,会将空格转义,导致找不到文件
/usr/bin/clamdscan --no-summary --fdpass --multiscan .../path/to/upload/file/261_560/3d100.png\\ (1).jpg