openEuler 22.03 安装配置 ClamAV 防病毒软件 · 完整操作手册

适用环境:openEuler 22.03 LTS SP4 / x86_64 / 使用官方 yum 源(含 update 源)
软件版本:ClamAV 1.0.9(1.0.9-2.oe2203sp4
完成时间:2026-09-05


目录

  1. 环境说明
  2. 安装软件包
  3. 配置病毒库自动更新(freshclam)
  4. 配置并启动 clamd 守护进程
  5. 验证安装与测试扫描
  6. 设置定时扫描
  7. 常见问题与注意事项

一、环境说明

  • 系统:openEuler 22.03 LTS SP4
  • 架构:x86_64
  • 包管理器:dnfyum 为其兼容别名,两者等价,建议统一用 dnf
  • 软件源:系统默认官方源(已包含 ClamAV 相关包,无需额外安装 EPEL)

版本提示:openEuler 22.03 SP4 源里的 ClamAV 是 1.0.9(不是老版 0.103),
配置文件名、服务名与网上大量 0.103 老教程不同,务必以本手册为准。


二、安装软件包

2.1 确认源里有包(可选验证)

# 刷新软件源缓存
dnf makecache

# 查看 ClamAV 相关可安装包
dnf list available | grep -i clamav

正常会看到 clamavclamav-dataclamav-updateclamd 等包。

2.2 执行安装(核心包 + 独立 clamd 包)

# 一次安装全部所需组件:
#   clamav           —— 扫描引擎 + clamscan 命令行工具
#   clamav-update    —— freshclam 病毒库自动更新工具
#   clamav-data      —— 初始病毒库(openEuler 特有,跳过首次漫长下载)
#   clamd            —— 常驻守护进程(供 clamdscan 调用,扫描更快)
dnf install -y clamav clamav-update clamav-data clamd

⚠️ 关键点:openEuler 1.0.9 把 clamd 拆成了独立包,不会随 clamav 自动安装,
必须显式写上 clamd,否则 which clamd 查不到守护进程。

2.3 验证安装结果

# 查看版本
clamscan --version

# 确认守护进程已安装
which clamd

# 确认病毒库已就位(clamav-data 带来的 main.cvd / daily.cvd / bytecode.cvd)
ls -l /var/lib/clamav/

三、配置病毒库自动更新(freshclam)

3.1 编辑配置文件

vi /etc/freshclam.conf

确认/调整以下关键项(去掉行首 # 并按需修改):

# 病毒库下载镜像(默认官方源即可,国内可选镜像加速)
DatabaseMirror database.clamav.net
# 国内可选镜像(二选一,任选其一启用)
# DatabaseMirror mirrors.tuna.tsinghua.edu.cn/clamav
# DatabaseMirror mirrors.ustc.edu.cn/clamav

# 每天检查更新次数(默认 12,可调低减少压力)
Checks 24

# 更新后自动通知 clamd 重载病毒库(需填真实存在的 clamd 配置文件路径)
NotifyClamd /etc/clamd.d/scan.conf

说明:NotifyClamd 默认是注释状态。若启用,路径必须填机器上真实存在
clamd 配置文件(openEuler 1.0.9 通常是 /etc/clamd.d/scan.conf,不是 /etc/clamd.conf)。

3.2 手动触发一次更新(验证网络连通)

freshclam

看到 main.cld is up to date / Database updated 即成功。

3.3 启动并设置开机自启

# 先确认服务名(openEuler 1.0.9 是 clamav-freshclam)
systemctl list-unit-files | grep -i clam

# 启动并设置开机自启
systemctl enable --now clamav-freshclam
systemctl status clamav-freshclam

四、配置并启动 clamd 守护进程

4.1 编辑 clamd 配置文件

# 确认配置文件路径(openEuler 1.0.9 是 /etc/clamd.d/scan.conf)
ls -l /etc/clamd.d/scan.conf

# 编辑
vi /etc/clamd.d/scan.conf

关键配置项(务必把 Example 行注释掉,否则 clamd 拒绝启动):

# Example                                        # ← 这行前面必须有 #,注释掉
LogFile /var/log/clamd.log                       # 日志文件
LogTime yes                                      # 日志带时间戳
LogVerbose no                                    # 不输出冗余日志
LocalSocket /run/clamd.scan/clamd.sock           # 通信 socket(必须打开,去掉 #)
LocalSocketMode 660                              # socket 权限
FixStaleSocket yes                               # 清理陈旧 socket

sed 快速处理(推荐,先备份):

cp /etc/clamd.d/scan.conf /etc/clamd.d/scan.conf.bak
sed -i 's/^Example/#Example/' /etc/clamd.d/scan.conf
sed -i 's/^#LocalSocket /LocalSocket /' /etc/clamd.d/scan.conf

4.2 启动服务(模板服务,必须带实例名 @scan)

# clamd@ 是模板服务,必须带实例名 scan
systemctl enable --now clamd@scan
systemctl status clamd@scan

⚠️ 易错点:不能写成 systemctl start clamd@,必须带 @scan 实例名,
它才会去读 /etc/clamd.d/scan.conf

4.3 重启 freshclam,消除 NotifyClamd 报错

# 打开 LocalSocket 并启动 clamd 后,重启 freshclam 让其重新读取配置
systemctl restart clamav-freshclam
systemctl status clamav-freshclam

之前日志里的报错 ERROR: NotifyClamd: No communication socket specified
就是因为 LocalSocket 没打开 + clamd 没启动导致,上述操作后即可消除。


五、验证安装与测试扫描

5.1 用 EICAR 测试文件验证引擎有效(标准做法)

# 生成无害的 EICAR 测试文件
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/eicar.txt

# 命令行扫描(应报 Eicar-Signature 或 Win.Test.EICAR)
clamscan /tmp/eicar.txt

# 走守护进程扫描(应同样报毒)
clamdscan /tmp/eicar.txt

# 测试完删除
rm -f /tmp/eicar.txt

5.2 实际扫描目录

# 递归扫描 /home,只显示感染文件
clamscan -r -i /home

# 用守护进程扫描(更快)
clamdscan /path/to/dir

六、设置定时扫描

6.1 创建扫描脚本

vi /usr/local/bin/clamav_scan.sh

脚本内容(全盘扫描版,含注释):

#!/bin/bash
# 指定用 bash 解释器执行

# 确保隔离目录存在(不存在则创建,必须在扫描前执行)
mkdir -p /var/quarantine

# 日志按日期命名,例如 /var/log/clamav_scan_20260905.log
# 注意 % 前加反斜杠转义,否则在 crontab 里会被误解
LOGFILE="/var/log/clamav_scan_$(date +\%Y\%m\%d).log"

# 全盘扫描:
#   clamscan                扫描命令
#   -r                      递归扫描子目录
#   -i                      只显示被感染文件(减少日志噪音)
#   --move=/var/quarantine  把病毒文件移到隔离目录(隔离不删除,更安全)
#   --max-filesize=200M     跳过超 200M 的大文件,加快扫描
#   --max-scansize=200M     限制单个文件解包后扫描体积
#   --exclude-dir=^/...     排除虚拟文件系统、隔离目录、病毒库本身
#   /                       扫描根目录(尽可能广)
clamscan -r -i \
  --move=/var/quarantine \
  --max-filesize=200M --max-scansize=200M \
  --exclude-dir=^/proc/ \
  --exclude-dir=^/sys/ \
  --exclude-dir=^/dev/ \
  --exclude-dir=^/run/ \
  --exclude-dir=^/var/quarantine/ \
  --exclude-dir=^/var/lib/clamav/ \
  / >> "$LOGFILE" 2>&1

6.2 赋予执行权限并手动验证

# 给脚本加执行权限
chmod +x /usr/local/bin/clamav_scan.sh

# 手动执行一次,确认脚本无误
/usr/local/bin/clamav_scan.sh

# 查看日志确认扫描正常(Scanned files 不应为 0)
tail -n 20 /var/log/clamav_scan_$(date +\%Y\%m\%d).log

6.3 配置定时任务

crontab -e
# 在文件末尾加入下面这行(每天凌晨 2 点执行)
0 2 * * * /usr/local/bin/clamav_scan.sh

时间字段含义(从左到右):

0  2  *  *  *   /usr/local/bin/clamav_scan.sh
│  │  │  │  │            └─ 要执行的脚本
│  │  │  │  └── 星期几(* = 每天)
│  │  │  └───── 月份(* = 每月)
│  │  └──────── 日期(* = 每天)
│  └─────────── 小时(2 = 凌晨 2 点)
└────────────── 分钟(0 = 整点)

6.4 确认定时任务已生效

crontab -l

七、常见问题与注意事项

7.1 版本差异是最大的坑

  • openEuler 22.03 SP4 装的是 ClamAV 1.0.9,网上大量教程是 0.103 的。
  • 差异点:配置文件路径(/etc/clamd.d/scan.conf vs /etc/clamd.conf)、
    服务名(clamd@scan vs clamav-daemon)、clamd 是否独立包。
  • 一切以 ls /etc/clam*systemctl list-unit-files | grep -i clam 的实际输出为准

7.2 clamd 是独立包

  • openEuler 1.0.9 的 clamd 守护进程在独立包中,不会随 clamav 自动装。
  • 安装时必须显式 dnf install clamd,否则 which clamd 为空。

7.3 NotifyClamd 报错

  • ERROR: NotifyClamd: No communication socket specified 的原因是
    /etc/clamd.d/scan.confLocalSocket 没打开 + clamd 服务没启动。
  • 解决:打开 LocalSocket、注释 Example、启动 clamd@scan、重启 freshclam。

7.4 扫描数据为 0

  • 若日志出现 action_setup: Failed to get realpath of /var/quarantine
    说明隔离目录没创建,导致扫描被跳过。
  • 解决:先 mkdir -p /var/quarantine,再重新执行扫描。

7.5 隔离目录必须排除

  • 全盘扫描时务必 --exclude-dir=^/var/quarantine/
    否则会把已隔离的病毒文件反复扫描、重复移动。

7.6 先扫不删,再考虑删除

  • 初装建议用 --move 隔离,观察无误报后再考虑换 --remove 直接删除。
  • --remove 有误删风险,谨慎使用。

7.7 资源开销

  • clamd 常驻约占用几百 MB 内存,扫描时 CPU/IO 升高。
  • 全盘扫描耗时长(几十分钟到数小时),务必安排在凌晨低峰。

7.8 SELinux

  • 若系统开启 enforcing 且 clamdscan 报权限错,执行:
    setsebool -P antivirus_can_scan_system 1
    setsebool -P clamd_use_jit 1
    

7.9 内网/离线环境

  • 需在有网机器用 dnf install --downloadonly --downloaddir=./pkg clamav clamav-update clamav-data clamd 下载全部 RPM,
    打包上传后 rpm -Uvh *.rpm 离线安装。
  • 病毒库手动拷贝 *.cvd/var/lib/clamav/

附:常用 clamscan 参数速查

参数含义
-r递归扫描子目录
-i只显示被感染的文件
--remove检测到病毒直接删除(慎用)
--move=/目录病毒文件移动到隔离目录(推荐)
-l <文件>记录日志
--max-filesize=N跳过超大文件
--max-scansize=N限制解包后扫描体积
--exclude-dir=^/路径/排除某目录不扫
--bell扫到病毒响铃提示

附:服务与关键文件速查表

项目
扫描命令clamscan
守护进程扫描命令clamdscan
病毒库更新命令freshclam
更新服务clamav-freshclam.service
守护进程服务clamd@scan.service
clamd 配置文件/etc/clamd.d/scan.conf
freshclam 配置文件/etc/freshclam.conf
病毒库目录/var/lib/clamav/
隔离目录/var/quarantine/
扫描脚本/usr/local/bin/clamav_scan.sh
扫描日志/var/log/clamav_scan_YYYYMMDD.log
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐