背景:
项目现场有一个服务器需要作国家二级等保整改,有一个高风险选项是需要安装防恶意代码软件,所以就考虑安装clamAV来实现。现场使用cnetos7服务器,且无外网,只能离线安装。
如果有外网直接执行以下命令就行了。

# ubuntusudo apt install clamav clamav-daemon -y# centossudo yum install clamav clamav-update -y

离线部署实现:
1、去官网下载对应的软件包,centos就下载 .rpm软件包。
https://www.clamav.net/downloads

2、将下载的软件包上传到服务器后使用rpm命令进行安装,软件包里面已经将相关依赖这些打包好了,直接安装就行。

rpm -ivh --prefix=/usr/local/clamav clamav-1.0.3.linux.x86_64.rpm

安装成功后clamav的相关文件就被放到了/usr/local/clamav下

3、设置PATH变量

echo PATH=/usr/local/clamav/bin:/usr/local/clamav/sbin:$PATH > /etc/profile.d/path.sh

4、使用
clamav常用的命令有以下:
clamscan 命令:通用,不依赖服务,命令参数较多,执行速度稍慢,安装好clamav服务后就可以直接用。

clamdscan 命令:是一个搭配clamd常驻服务的扫毒工具,功能非常类似clamscan,执行效率较高,可用的参数较少(因为部分功能是由 clamd 控制的)。例如递归扫描不用带 -r ,默认会递归扫描子目录

freshclam:执行这个命令就会根据配置文件将病毒库下载到指定的位置,默认应该是/usr/local/share/clamav。

直接使用clamscan命令进行测试时,提示缺少相关库文件,但是clamav的安装目录里面又是存在对应文件的,所以要更新ldconfig

5、更新ldconfig

echo "/usr/local/clamav/lib64/" | sudo tee -a /etc/ld.so.conf.d/clamav.confldconfig

再次测试,提示缺少病毒库。因为是离线环境。所以就搭建一个有外网的机器,使用freshclam下载病毒库后拷贝过来。

将病毒库解压到指定目录下,默认是放在/usr/local/share/clamav下的。

再次测试就正常了

因为不需要进行频繁的扫描或扫描大量文件,只是偶尔执行扫描,那么 clamscan 可能已经足够了。

如果是希望进行频繁的扫描或扫描大量文件,那么使用 clamdscan 和 clamd 守护进程可能是一个更有效的选择。

配置clamd守护进程就需要修改clamd的配置文件。

两个配置文件:
clamd.conf:clamd 守护进程的配置文件。当你使用 clamdscan(而不是 clamscan)命令时,该命令实际上会与后台运行的 clamd 守护进程进行交互来执行扫描。因此,clamdscan 的行为会受到 clamd.conf 文件中的配置的影响。这个文件包含了与守护进程行为、日志记录、扫描选项等相关的设置。

freshclam.conf:ClamAV 病毒数据库更新工具 freshclam 的配置文件。当你使用 freshclam 命令来更新你的病毒数据库时,该命令会根据这个配置文件来运行。这个文件包含了与更新源、更新频率、代理设置、日志记录等相关的设置。

clamd配置:
1、先创建存放日志、socket和pid的文件目录,并创建对应的日志文件。

2、/usr/local/clamav/etc这个目录下有两个配置文件模板,可以根据这两个模板创建配置文件。

# 进入/usr/local/clamav/etc目录cp -a clamd.conf.sample clamd.confcp -a freshclam.conf.sample freshclam.conf

3、修改配置文件

# 注释掉Example这一行LogFile /usr/local/clamav/logs/clamd.logLogFileMaxSize 20MPidFile /usr/local/clamav/clamd.pidDatabaseDirectory /var/lib/clamavLocalSocket /usr/local/clamav/socket/clamd.socket

DatabaseDirectory就是指定病毒库的存放位置

如果需要实时更新病毒库,freshclam.conf也需要进行配置

[root@CentOS7 etc]# cat freshclam.conf | grep -Ev '^#|^$'DatabaseDirectory /var/lib/clamavUpdateLogFile  /usr/local/clamav/logs/freshclam.logPidFile  /usr/local/clamav/pid/freshclam.pidDatabaseMirror database.clamav.netChecks 24

Checks 24表示1h检查一次,一天24h,默认是2h检查一次病毒库更新没,更新了就直接拉取到本地。
DatabaseDirectory指定使用freshman命令下载的病毒库存放位置。

创建clamav用户

groupadd clamavuseradd -g clamav -s /bin/false -c "Clam Antivirus" clamav

更改目录权限:

chown -R clamav:clamav /usr/local/clamav 

全部配置好后进行测试:
提示配置文件是在/usr/local/etc下面找的,所以需要将配置文件软链接到这个下面。

软连接:

[root@CentOS7 ~]# # 软链接源文件要使用绝对路径[root@CentOS7 ~]# ln -s /usr/local/clamav/etc/freshclam.conf  /usr/local/etc/[root@CentOS7 ~]# ln -s /usr/local/clamav/etc/clamd.conf  /usr/local/etc/

再次进行测试:
提示没有病毒库,就需要先使用 生成病毒库或者将离线的病毒库拷贝到这个目录下

在线生成病毒库:

再次进行测试:
clamd正常运行,再打开一个窗口测试clamdscan。

最后将freshclam和clamd交给systemd进行托管,freshclam用于定时更新病毒库,当 clamd 守护进程启动并在后台运行时,它会加载病毒签名数据库到内存中。这使得病毒扫描请求(如通过 clamdscan 命令)能够迅速地与这些内存中的签名进行比较,大大提高了扫描效率。

clamd的systemd文件:

# centos7的systemd文件是放在/usr/lib/systemd/system/# ubuntu的systemd文件时放在/lib/systemd/system/
vim /usr/lib/systemd/system/clamd.service[Unit]Description=Clam AntiVirus userspace daemonDocumentation=man:clamd(8) man:clamd.conf(5) https://docs.clamav.net/# Check for database existenceConditionPathExistsGlob=/var/lib/clamav/main.{c[vl]d,inc}ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc}[Service]type=simpleExecStart=/usr/local/clamav/sbin/clamd --foreground=true# Reload the databaseExecReload=/bin/kill -USR2 $MAINPIDStandardOutput=syslogTimeoutStartSec=420[Install]WantedBy=multi-user.target

测试是否能正常启动,启动成功

freshclam的systemd文件

vim  /usr/lib/systemd/system/freshclam.service[Unit]Description=ClamAV virus database updaterDocumentation=man:freshclam(1) man:freshclam.conf(5) https://docs.clamav.net/# If user wants it run from cron, don't start the daemon.# ConditionPathExists=!/etc/cron.d/clamav-updateWants=network-online.targetAfter=network-online.target[Service]ExecStart=/usr/local/clamav/bin/freshclam -d --foreground=true[Install]WantedBy=multi-user.target

启动检查:

clamscan和clamdscan区别说明:
clamscan 和 clamdscan 都是 ClamAV 的扫描工具,但它们的工作方式略有不同:

clamscan:
独立运行: clamscan 是一个独立的命令行扫描工具,每次执行都会启动一个新的进程。
效率: 由于它每次运行时都需要加载病毒数据库,所以相对较慢,特别是在扫描大量文件或多次扫描时。
配置: clamscan 不依赖 clamd.conf,所有的配置都是基于命令行参数。

clamdscan:
依赖守护进程: clamdscan 与后台运行的 clamd 守护进程进行交互来执行扫描。这意味着病毒数据库已经被 clamd 加载并保持在内存中。
效率: 由于不需要每次都重新加载病毒数据库,clamdscan 的扫描速度通常更快。
配置: clamdscan 的行为会受到 clamd.conf 文件中的配置的影响。

总的来说,如果你需要进行频繁的扫描或扫描大量文件,那么使用 clamdscan 和 clamd 守护进程可能是一个更有效的选择。但如果你只是偶尔执行扫描,那么 clamscan 可能已经足够了。

https://blog.csdn.net/leiwuhen92/article/details/125934412
https://blog.ncyupu.com/os/centos/2023/06/06/213.html