在CentOS 7中安装和配置ClamAV的简单步骤

时间:2020-02-23 14:40:32  来源:igfitidea点击:

ClamAV是一种开放源代码的防病毒工具。
其基本用法是用于检测基于Linux的计算机上的病毒,恶意软件和恶意软件。
来自病毒,特洛伊木马和其他形式的恶意软件的威胁是真实存在的。
它们的数量和复杂度都呈指数增长,防病毒软件不得不采用复杂的检测方法。
虽然不能保证系统不会成为这些不必要的代码的受害者,但是在使用Internet和共享文件,实施常识性安全策略以及使用最新的防病毒程序时要谨记保护我们

本文将向我们展示如何在CentOS 7和CentOS 8上安装和配置ClamAV。
我还为Ubuntu添加了一些技巧。

1.安装ClamAV软件包

要在CentOS 7上安装ClamAV,我们需要安装并启用EPEL存储库。

# yum install epel-release

我们可以访问clamav官方以获取在其他发行版上安装ClamAV的详细信息。

然后,我们可以使用其所有有用的工具安装ClamAV:

# yum -y install clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd

以下是安装成功后来自我的服务器的摘录。

以下是我的CentOS 7环境中的clamav rpm列表

# rpm -qa | grep -i clamav
clamav-0.102.4-1.el7.x86_64
clamav-data-0.102.4-1.el7.noarch
clamav-filesystem-0.102.4-1.el7.noarch
clamav-update-0.102.4-1.el7.x86_64
clamav-lib-0.102.4-1.el7.x86_64
clamav-devel-0.102.4-1.el7.x86_64

2.手动更新feshclam数据库

要第一次更新数据库,我们需要运行freshclam来手动更新数据库,并检查配置是否成功设置:

# freshclam
ClamAV update process started at Tue Nov 6 15:51:59 2016
WARNING: Can't query current.cvd.clamav.net
WARNING: Invalid DNS reply. Falling back to HTTP mode.
Reading CVD header (main.cvd): OK (IMS)
main.cvd is up to date (version: 58, sigs: 4566249, f-level: 60, builder: sigmgr)
Reading CVD header (daily.cvd): OK
Downloading daily-25006.cdiff [100%]
Downloading daily-25092.cdiff [100%]
Downloading daily-25093.cdiff [100%]
Downloading daily-25094.cdiff [100%]
Downloading daily-25095.cdiff [100%]
daily.cld updated (version: 25095, sigs: 2143057, f-level: 63, builder: neo)
Reading CVD header (bytecode.cvd): OK
bytecode.cvd is up to date (version: 327, sigs: 91, f-level: 63, builder: neo)
Database updated (6709397 signatures) from database.clamav.net (IP: 104.16.186.138)

这将在内部添加或者更新现有的数据库文件

# ls -l /var/lib/clamav/
total 442156
-rw-r--r-- 1 clamupdate clamupdate    296388 Sep  5 17:16 bytecode.cvd
-rw-r--r-- 1 clamupdate clamupdate 334600704 Sep  5 14:44 daily.cld
-rw-r--r-- 1 clamupdate clamupdate 117859675 Nov 25  2019 main.cvd

3.配置Freshclam数据库的自动更新

根据不同的分发,配置" freshclam"数据库的自动更新的方法可能会有所不同。
我在CentOS7,CentOS 8和Ubuntu中看到了不同的行为。

3.1:在带有/etc/clamav/freshclam.conf的Ubuntu上

在Ubuntu计算机的/etc/clamav/freshclam.conf文件中,我们将在末尾看到以下几行:

# Check for new database 24 times a day
Checks 24
DatabaseMirror db.local.clamav.net
DatabaseMirror database.clamav.net

因此,从本质上讲,这意味着在Ubuntu上,ClamAV将每小时检查一次更新。

3.2:在具有cron作业的CentOS 7上

使用clamav-update-0.102.4-1.el7.x86_64,我可以找到一个cron作业文件,该文件负责对freshclam数据库进行定期更新。

# cat /etc/cron.d/clamav-update
## Adjust this line...
MAILTO=root
## It is ok to execute it as root; freshclam drops privileges and becomes
## user 'clamupdate' as soon as possible
0  */3 * * * root /usr/share/clamav/freshclam-sleep

左侧第二栏中的" */3"表示ClamAV将每3小时检查一次更新。

如果愿意,可以更改"检查更新的默认时间",但是我们还需要在/etc/sysconfig/freshclam文件中更改设置。

假设我们希望CentOS每小时也检查一次ClamAV更新。
在cron作业文件中,将*/3更改为*
(我们无需执行**/1,因为星号本身已经指示该作业将每小时运行一次。
)

然后,在/etc/sysconfig/freshclam文件中,查找以下行:

# FRESHCLAM_MOD=

取消注释该行,并添加两次更新之间所需的分钟数。
要将其设置为1小时,使其与cron作业匹配,它将如下所示:

FRESHCLAM_MOD=60

要禁用自动更新,我们可以修改

# FRESHCLAM_DELAY=

取消注释此行并将禁用添加到此值:

FRESHCLAM_DELAY=disabled

3.3:在具有systemd clamav-freshclam.service的CentOS 8上

在带有clamav-update-0.102.4-1.el8.x86_64的CentOS 8中,我观察到以下文件丢失了

  • /usr/share/clamav/freshclam-sleep

  • /etc/cron.d/clamav-update

  • /etc/sysconfig/freshclam

在CentOS 8中,开发人员可能希望我们使用/usr/lib/systemd/system/clamav-freshclam.service来处理Freshclam数据库的自动更新。
如果检查此服务单元文件的内容

[Unit]
Description=ClamAV virus database updater
Documentation=man:freshclam(1) man:freshclam.conf(5) https://www.clamav.net/documents
# If user wants it run from cron, don't start the daemon.
ConditionPathExists=!/etc/cron.d/clamav-freshclam
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/bin/freshclam -d --foreground=true
StandardOutput=syslog
[Install]
WantedBy=multi-user.target

我们有一个条件

# If user wants it run from cron, don't start the daemon.
ConditionPathExists=!/etc/cron.d/clamav-freshclam

因此,如果/etc/cron.d/clamav-freshclam存在,那么用户将无法启动该守护程序。
我们可以在此Red Hat Bugzilla中找到更多详细信息,开发人员似乎已故意这样做,因此在RHEL/CentOS中继续前进,我们可以期望仅看到服务单元文件。

但是,使用CentOS 8编写的该服务单元文件不能很好地开发来处理ClamAV数据库的自动更新。

使用cron,我们有一个配置为执行自动更新的计时器。
类似地,在systemd中,我们应该为clamav-freshclam.service提供一个等效的clamav-freshclam.timer文件,但是我的节点中没有此文件。

因此,我决定使用以下内容创建我自己的systemd计时器单元文件/etc/systemd/system/clamav-freshclam.timer。

# cat /etc/systemd/system/clamav-freshclam.timer
[Unit]
Description=ClamAV virus database updater
After=network-online.target
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target

"不过还有一个问题。
"

现有的clamav-freshclam.service被配置为在前台作为守护程序启动。
当我进行测试时,计时器从不工作,即它无法执行freshclam守护程序。
原因是因为守护程序始终处于运行状态

# ps -ef | grep freshclam
clamupd+    4874       1  0 17:14 ?        00:00:00 /usr/bin/freshclam -d --foreground=true
root        4907    2074  0 17:14 pts/1    00:00:00 grep --color=auto freshc

因此,如果守护程序已经在运行,则显然计时器将无法再次启动服务以启动自动更新。
因此,我决定修改此单位文件,并创建了自己的文件,在该文件中我只是执行freshclam而没有任何参数,就像我在终端上更新数据库那样:

# cat /etc/systemd/system/clamav-freshclam.service
[Unit]
Description=ClamAV virus database updater
Documentation=man:freshclam(1) man:freshclam.conf(5) https://www.clamav.net/documents
# If user wants it run from cron, don't start the daemon.
ConditionPathExists=!/etc/cron.d/clamav-freshclam
Wants=network-online.target
After=network-online.target
[Service]
ExecStart=/usr/bin/freshclam
StandardOutput=syslog
[Install]
WantedBy=multi-user.target

接下来启用并启动clamav-freshclam.timer
"我们不需要启动并启用该服务,因为计时器可以解决这一问题。
"

# systemctl enable clamav-freshclam.timer --now

这样我们就完成了,检查计时器的状态:

clamav-freshclam.timer的服务状态

验证可用的计时器列表,并检查下次执行clamav-freshclam.timer的时间。
因此,我们的clamav-freshclam.timer被配置为在Sun 2017-09-06 00:00:00接下来启动服务。

列出可用的systemd计时器

服务执行后,我们应该在journalctl中看到类似于以下的日志

clamav数据库正在更新

4.配置/etc/clamd.d/scan.conf

ClamAV的配置文件位于/etc/clamd.d/scan.conf中。
执行扫描的默认用户是clamscan,它在我们安装clamav rpm后立即创建

# id clamscan
uid=982(clamscan) gid=979(clamscan) groups=979(clamscan),980(virusgroup)

但是我们将其更改为root用户,搜索

User clamscan

注释此行并添加新行

User root

我们可以将所有其他配置选项保留为默认值,然后启动服务:

5.配置并启动clamd.service

我们有一个示例服务文件/usr/lib/systemd/system/clamd @ .service,我们需要将其复制到系统服务文件夹中。

我将这个文件复制到/etc/systemd/system/clamd.service中。
我希望我们熟悉不同的systemd服务文件位置,以便我们能理解为什么我更喜欢该位置而不是/usr/lib/systemd/system

# cp -ap /usr/lib/systemd/system/[email protected] /etc/systemd/system/clamd.service

接下来,从/etc/systemd/system/clamd.service中的Description和ExecStart选项中将%i替换为scan.conf

启用并启动clamd服务

# # systemctl enable clamd.service --now
Created symlink /etc/systemd/system/multi-user.target.wants/clamd.service → /etc/systemd/system/clamd.service

检查状态以确保服务处于活动状态并正在运行:

6.使用clamdscan配置定期扫描(可选)

如果我们希望配置任何目录的自动扫描,则可以执行此步骤,因为默认情况下,我们将必须启动手动扫描。

我们将创建一个新的systemd服务单元文件:

# cat /etc/systemd/system/clamdscan-home.service
[Unit]
Description=ClamAV virus scan
Requires=clamd.service
After=clamd.service
[Service]
ExecStart=/usr/bin/clamdscan /home
StandardOutput=syslog
[Instal]
WantedBy=multi-user.target

要执行定期扫描,我们还需要一个映射计时器单位文件。
其中我添加了时间值18:40以开始扫描:

# cat /etc/systemd/system/clamdscan-home.timer
[Unit]
Description=Scan /home directory using ClamAV
[Timer]
OnCalendar=18:40:00
Persistent=true
[Install]
WantedBy=timers.target

接下来启用并启动计时器

# systemctl enable clamdscan-home.timer --now
Created symlink /etc/systemd/system/timers.target.wants/clamdscan-home.timer → /etc/systemd/system/clamdscan-home.timer.

我们不需要启动服务单元文件,因为它将由计时器文件控制。

现在我们在18:40PM监视journalctl日志

Sep 05 18:40:05 server.example.com systemd[1]: Started ClamAV virus scan.
Sep 05 18:40:17 server.example.com clamdscan[10901]: /home: OK
Sep 05 18:40:17 server.example.com clamdscan[10901]: ----------- SCAN SUMMARY ----------
Sep 05 18:40:17 server.example.com clamdscan[10901]: Infected files: 0
Sep 05 18:40:17 server.example.com clamdscan[10901]: Time: 11.725 sec (0 m 11 s)

7.使用clamscan执行手动扫描

为了对当前文件夹进行测试扫描,我们运行以下命令:

# clamscan --infected --remove --recursive ./
----------- SCAN SUMMARY ----------
Known viruses: 6702413
Engine version: 0.100.2
Scanned directories: 7
Scanned files: 9
Infected files: 0
Data scanned: 0.01 MB
Data read: 0.00 MB (ratio 2.00:1)
Time: 25.439 sec (0 m 25 s)

其中

  • infected:仅打印受感染的文件

  • remove:删除受感染的文件

  • recursive:提供目录中的所有子目录也将被扫描