在 Rocky Linux 8 上安装 ClamAV

在本教程中,我们将学习如何在 Rocky Linux 8 上安装 ClamAV。ClamAV 是一个开源防病毒引擎,用于检测木马、病毒、恶意软件、广告软件、rootkit 和其他恶意威胁。

ClamAV 的一些功能包括:

  • 内置支持各种存档格式,包括 Zip、Tar、Gzip、Bzip2、OLE2、Cabinet、CHM、BinHex、SIS 等。
  • 对几乎所有邮件文件格式的内置支持
  • 内置支持 ELF 可执行文件和便携式可执行文件,这些文件使用 UPX、FSG、Petite、NsPack、wwpack32、MEW、Upack 压缩并使用 SUE、Y0da Cryptor 等进行混淆;
  • 内置支持流行的文档格式,包括 Microsoft Office 和 Mac Office 文件、HTML、RTF 和 PDF。
  • 支持多种签名语言,例如基于哈希的签名匹配、通配符、布尔逻辑和任何以字节码语言编写的自定义规则。

ClamAV 包括一个多线程扫描器守护进程、用于按需文件扫描和自动签名更新的命令行实用程序。 它的主要用途之一是在邮件服务器上作为服务器端电子邮件病毒扫描程序。

在 Rocky Linux 8 上安装 ClamAV

在 Rocky Linux 8 上安装 EPEL Repository,它提供 ClamAV 的最新稳定版本。

dnf install epel-release

在 Rocky Linux 8 上安装 ClamAV

dnf install -y clamav clamd clamav-update

安装的 ClamAV 软件包包括:

  • clamd – Clam AntiVirus 守护进程
  • clamav – Clam Antivirus 扫描程序的最终用户工具
  • clamav-data – Clam Antivirus 扫描程序的病毒签名数据
  • clamav-devel – Clam Antivirus 扫描程序的头文件和库
  • clamav-lib – Clam Antivirus 扫描程序的动态库
  • clamav-milter – 用于 Clam Antivirus 扫描程序的 Milter 模块
  • clamav-update – Clam Antivirus 扫描程序数据文件的自动更新程序

还安装了其他 ClamAV 工具:

  • clamdscan – 一个简单的扫描客户端
  • on-access scanning – 通过一个提供实时保护 clamd 实例
  • clamdtop – 一个资源监控界面 clamd

此外,还有两个主要的 ClamAV 配置文件:

  • clamd.conf – 用于配置 ClamAV 守护进程的行为 clamd 和相关工具
  • freschclam.conf – 用于配置特征库更新工具的行为, freshclam

更新 ClamAV 签名数据库

为了使扫描工作,您需要更新病毒库。 有两种更新 ClamAV 数据库的选项:

  • clamav-freshclam: 从 Internet 更新数据库。 建议使用 Internet 访问。
  • Offline update 适用于无法直接访问 Internet 的系统。

更新签名数据库 clamav-freshclam

如果您可以访问互联网,则可以使用 clamav-freshclam 更新 ClamAV 病毒库。

要使用此方法,请停止 clamav-freshclam 服务(如果它正在运行)并执行 freshclam,病毒库更新工具。

systemctl stop clamav-freshclam

在运行 ClamAV 数据库更新之前,请确保该行 例子 被注释掉了 /etc/freshclam.conf 配置;

# Comment or remove the line below. #Example

接下来,运行数据库更新。

freshclam

如果数据库是最新的,那么您可能会得到类似于下面的输出(否则,该命令将拉取数据库更新)

ClamAV update process started at Tue Jul 20 07:44:30 2021 daily database available for update (local version: 26231, remote version: 26237) Current database is 6 versions behind. Downloading database patch # 26232... ERROR: cdiff_apply: lseek(desc, -350, SEEK_END) failed ERROR: downloadPatch: Can't apply patch WARNING: Incremental update failed, trying to download daily.cvd Time:  1m 02s, ETA:    0.0s [========================>]   54.81MiB/54.81MiB Testing database: '/var/lib/clamav/tmp.a8d880a9dd/clamav-143b07bc043cf326726dc09c22415a8d.tmp-daily.cvd' ... Database test passed. daily.cvd updated (version: 26237, sigs: 1962599, f-level: 90, builder: raynman) main database available for update (local version: 59, remote version: 61) Current database is 2 versions behind. Downloading database patch # 60... ERROR: cdiff_apply: lseek(desc, -350, SEEK_END) failed ERROR: downloadPatch: Can't apply patch WARNING: Incremental update failed, trying to download main.cvd Time:  3m 11s, ETA:    0.0s [========================>]  160.41MiB/160.41MiB Testing database: '/var/lib/clamav/tmp.a8d880a9dd/clamav-ff23841557b15f1321d3185d3f333093.tmp-main.cvd' ... Database test passed. main.cvd updated (version: 61, sigs: 6607162, f-level: 90, builder: sigmgr) bytecode.cvd database is up-to-date (version: 333, sigs: 92, f-level: 63, builder: awillia2) 

接下来,启动 clamav-freshclam 服务,因此它会随时在后台更新签名数据库。

systemctl start clamav-freshclam

检查状态;

systemctl status clamav-freshclam
● clamav-freshclam.service - ClamAV virus database updater    Loaded: loaded (/usr/lib/systemd/system/clamav-freshclam.service; disabled; vendor preset: disabled)    Active: active (running) since Tue 2021-07-20 08:32:34 EAT; 12s ago      Docs: man:freshclam(1)            man:freshclam.conf(5)            https://www.clamav.net/documents  Main PID: 2875 (freshclam)     Tasks: 1 (limit: 11388)    Memory: 4.9M    CGroup: /system.slice/clamav-freshclam.service            └─2875 /usr/bin/freshclam -d --foreground=true  Jul 20 08:32:34 rocky8.kifarunix-demo.com systemd[1]: Started ClamAV virus database updater. Jul 20 08:32:35 rocky8.kifarunix-demo.com freshclam[2875]: ClamAV update process started at Tue Jul 20 08:32:35 2021 Jul 20 08:32:40 rocky8.kifarunix-demo.com freshclam[2875]: daily.cvd database is up-to-date (version: 26237, sigs: 1962599, f-level: 90, builder: raynman) Jul 20 08:32:40 rocky8.kifarunix-demo.com freshclam[2875]: main.cvd database is up-to-date (version: 61, sigs: 6607162, f-level: 90, builder: sigmgr) Jul 20 08:32:40 rocky8.kifarunix-demo.com freshclam[2875]: bytecode.cvd database is up-to-date (version: 333, sigs: 92, f-level: 63, builder: awillia2) 

确保服务已启用以在系统启动时运行;

systemctl enable clamav-freshclam

freshclam 下载 ClamAV 数据库、CVD,并将它们放在下面, /var/lib/clamav/.

ls /var/lib/clamav/ -1
bytecode.cvd  daily.cld  freshclam.dat  main.cvd

有关更多配置选项 鲜蛤,检查配置文件, /etc/freshclam.conf.

离线数据库更新

如果您的系统无法访问 Internet,只需从 ClamAV 下载页面下载 CVD 并将它们放在 /var/lib/clamav.

将下载的 CVD 放入 ClamAV 数据库后,请务必相应地更改所有权和权限;

chown -R clamupdate: /var/lib/clamav/
chmod 644 /var/lib/clamav/*.cvd

配置 Clamd

为了使用 ClamAV,需要调整一些配置选项。

vim /etc/clamd.d/scan.conf

确保将下面的行注释掉(散列放在行首)或删除。

# Comment or remove the line below. #Example

定义守护程序将侦听的本地套接字文件的路径并调整权限。 因此,您可以取消注释这些行:

  • #LocalSocket /run/clamd.scan/clamd.sock
  • #LocalSocketMode 660

这样你的配置文件看起来像;

# Path to a local socket file the daemon will listen on. # Default: disabled (must be specified by a user) LocalSocket /run/clamd.scan/clamd.sock  ...  # Sets the permissions on the unix socket to the specified mode. # Default: disabled (socket is world accessible) LocalSocketMode 660

Save 并退出文件。

创建 Clamd Systemd 服务

要使用 systemd 控制 clamd,请通过运行以下命令创建服务文件;

cat > /etc/systemd/system/clamd.service << 'EOL' [Unit] Description = clamd scanner daemon Documentation=man:clamd(8) man:clamd.conf(5) https://www.clamav.net/documents/ After = syslog.target nss-lookup.target network.target  [Service] Type = forking ExecStart = /usr/sbin/clamd -c /etc/clamd.d/scan.conf # Reload the database ExecReload=/bin/kill -USR2 $MAINPID Restart = on-failure TimeoutStartSec=420  [Install] WantedBy = multi-user.target EOL 
systemctl daemon-reload

启动 Clamd;

systemctl enable --now clamd

检查状态;

systemctl status clamd
● clamd.service - clamd scanner daemon    Loaded: loaded (/etc/systemd/system/clamd.service; enabled; vendor preset: disabled)    Active: active (running) since Tue 2021-07-20 09:44:21 EAT; 10s ago      Docs: man:clamd(8)            man:clamd.conf(5)            https://www.clamav.net/documents/   Process: 2307 ExecStart=/usr/sbin/clamd -c /etc/clamd.d/scan.conf (code=exited, status=0/SUCCESS)  Main PID: 2308 (clamd)     Tasks: 2 (limit: 11388)    Memory: 1.1G    CGroup: /system.slice/clamd.service            └─2308 /usr/sbin/clamd -c /etc/clamd.d/scan.conf  Jul 20 09:44:19 rocky8.kifarunix-demo.com clamd[2308]: ELF support enabled. Jul 20 09:44:19 rocky8.kifarunix-demo.com clamd[2308]: Mail files support enabled. Jul 20 09:44:19 rocky8.kifarunix-demo.com clamd[2308]: OLE2 support enabled. Jul 20 09:44:19 rocky8.kifarunix-demo.com clamd[2308]: PDF support enabled. Jul 20 09:44:19 rocky8.kifarunix-demo.com clamd[2308]: SWF support enabled. Jul 20 09:44:19 rocky8.kifarunix-demo.com clamd[2308]: HTML support enabled. Jul 20 09:44:19 rocky8.kifarunix-demo.com clamd[2308]: XMLDOCS support enabled. Jul 20 09:44:19 rocky8.kifarunix-demo.com clamd[2308]: HWP3 support enabled. Jul 20 09:44:19 rocky8.kifarunix-demo.com clamd[2308]: Self checking every 600 seconds. Jul 20 09:44:21 rocky8.kifarunix-demo.com systemd[1]: Started clamd scanner daemon. 

Clamscan CLI 选项和示例用法

Clamscan 用于扫描文件和目录中的病毒。 从手册页中,clamscan 命令语法是:

clamscan [options] [file/directory/-]

下面说明了一些 clamscan 命令选项及其示例用法;

使用打印帮助信息 -h 或者 --help 选项。

clamscan -h

笔记: 带有标记的选项 [=yes/no(*)] 可以选择后跟 =是的 或者 =没有。 如果他们在没有布尔参数的情况下被调用,扫描仪将假定“是”。 星号标记给定选项的默认内部设置。

  • 扫描特定目录或文件;
clamscan /home/
clamscan /home/filename.docx
  • 扫描结束时不显示摘要。
clamscan --no-summary /home/
  • 仅打印受感染的文件 (-i, --infected);
clamscan -i /
  • 跳过打印 OK 文件 (-o, --suppress-ok-results);
clamscan -o /home/
  • 敲响病毒检测的钟声(--bell);
clamscan --bell -i /home
  • 递归扫描目录(-r, --recursive)。
clamscan --bell -i -r /home
  • Save 将报告扫描到 FILE (-l FILE, --log=FILE);
clamscan --bell -i -r /home -l home-scan.txt
  • 扫描 FILE 中逐行列出的文件 (-f FILE, --file-list=FILE)。
clamscan -i -f /tmp/scan
  • 删除受感染的文件 (--remove[=yes/no(*)])。 小心,因为这会完全删除文件。
 clamscan -r --remove /home/USER
  • 将受感染的文件移动到目录中 (--move=DIRECTORY)。 对于运行 clamscan 的用户或非特权用户,目录必须是可写的。
clamscan -r -i --move=/home/USER/infected /home/
  • 将受感染的文件复制到目录中 (–copy=DIRECTORY)。 对于运行 clamscan 的用户或非特权用户,目录必须是可写的。
clamscan -r -i --copy=/home/USER/infected /home/

clamscan 的各种用法有很长的选项列表。 咨询 man clamscan 更多细节。

ClamAV 按访问扫描

ClamAV 按访问扫描功能有助于阻止进程尝试访问恶意文件。 这种预防发生在内核空间中,因此提供比纯用户空间解决方案更强大的保护。

阅读有关 ClamAV 按访问扫描的更多信息。

ClamAV 返回代码

以下是 ClamAV 的退出返回码。

  • 0:未发现病毒。
  • 1 : 发现病毒。
  • 2 : 发生了一些错误。

限制 Clamscan CPU 使用率

clamscan 可能是 CPU 密集型的,尤其是在扫描大目录时。

要将 clamscan CPU 时间限制在特定级别,您可以使用两种工具;

  • nice: 降低 clamscan 的优先级(限制相对 CPU 时间)。
  • cpulimit: 限制绝对 CPU 时间。

要使用好命令,

nice -n 15 clamscan && clamscan -ir /

只要没有其他进程需要 cputime,clamscan 就会最大化它。 但是一旦另一个具有更高优先级的进程需要 cputime,clamscan 就会丢失它。

使用 cpulimit;

cpulimit -z -e clamscan -l 20 & clamscan -ir /

扫描整个根目录时,将 clamscan cpu 时间限制为 15%。

进一步阅读

在文档页面上阅读有关 ClamAV 的更多信息。

ClamAV 文档

在 Rocky Linux 8 上安装 Nikto Web Scanner

使用 Wazuh 和 VirusTotal 检测恶意文件