你笑了

你的笑,是星星跳跃浪花的笑

0%

clamscan

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
2
3
4
5
6
docker run -it --rm \
--name clam \
--mount type=bind,source=/var/lib/clamav,target=/var/lib/clamav \
--mount type=bind,source=/var/lib/clamav/sockets,target=/run/clamav \
--mount type=bind,source=/path/to/upload/file,target=/path/to/upload/file \
clamav/clamav:stable_base

进入容器

1
2
3
docker exec -it clamav sh
# 修改配置文件 /etc/clamav/clamd.conf 将 LocalSocket 修改为以下地址
LocalSocket /var/lib/clamav/sockets/clamd.sock

镜像是使用alpine制作的,不能使用 bash

退出容器重启

1
docker restart clamav

clamscan 配置 socket 为 /var/lib/clamav/sockets/clamd.sock

卸载

1
2
3
4
5
6
7
sudo apt remove clamav-daemon
sudo apt autoremove

sudo rm -rf /var/lib/clamav
sudo rm -rf /etc/clamav/
sudo rm -rf /var/log/clamav/
sudo rm -rf /var/run/clamav

文件目录

log file

/var/log/clamav/clamav.log

下载后自动创建

1
2
-rw-r-----  1 clamav adm       0 7月   7 17:45 clamav.log
-rw-r----- 1 clamav clamav 1603 7月 7 17:45 freshclam.log

database directory

/var/lib/clamav

下载后自动创建

1
2
3
4
-rw-r--r--  1 clamav clamav    293670 7月   7 17:45 bytecode.cvd
-rw-r--r-- 1 clamav clamav 59017537 7月 7 17:45 daily.cvd
-rw-r--r-- 1 clamav clamav 69 7月 7 17:45 freshclam.dat
-rw-r--r-- 1 clamav clamav 170479789 7月 7 17:45 main.cvd
  • 没有socket

config

/etc/clamav/clamd.conf

/etc/clamav/freshclam.conf

下载后自动创建

1
2
3
4
5
-rw-r--r--   1 root   root  1994 7月   7 17:45 clamd.conf
-r--r--r-- 1 clamav adm 682 7月 7 17:45 freshclam.conf
drwxr-xr-x 2 root root 4096 5月 13 00:40 onerrorexecute.d/
drwxr-xr-x 2 root root 4096 5月 13 00:40 onupdateexecute.d/
drwxr-xr-x 2 root root 4096 5月 13 00:40 virusevent.d/

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
2
3
clamconf -g freshclam.conf > freshclam.conf
clamconf -g clamd.conf > clamd.conf
clamconf -g clamav-milter.conf > clamav-milter.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
2
3
clamdscan --version
clamscan --versin
ClamAV 0.103.6/26577/Sun Jun 19 16:06:45 2022

服务管理

/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 的文档进行自动恶意软件扫描

https://cloud.google.com/architecture/automating-malware-scanning-for-documents-uploaded-to-cloud-storage?hl=zh-cn#architecture

clamscan

启动clamav

1
2
clamd // 启动扫描守护进程
freshclam -d // 启动更新病毒数据库进程

配置

socket

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// 使用本地socket 【推荐】
clamdscan: {
socket: process.env.CLAMAV_SOCKET,
multiscan: true,
}
// 最终配置
{
removeInfected: false,
quarantineInfected: false,
scanLog: null,
debugMode: false,
fileList: null,
scanRecursively: true,
clamscan: {
path: "/usr/bin/clamscan",
scanArchives: true,
db: null,
active: true,
},
clamdscan: {
socket: "/var/run/clamav/clamd.ctl",
host: false,
port: false,
timeout: 60000,
localFallback: true,
path: "/usr/bin/clamdscan",
configFile: null,
multiscan: true,
reloadDb: false,
active: true,
bypassTest: false,
},
preference: "clamdscan",
}
  • 配置环境变量

    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