openEuler22.03-ClamAV防病毒软件安装操作
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
目录
一、环境说明
- 系统:openEuler 22.03 LTS SP4
- 架构:x86_64
- 包管理器:
dnf(yum为其兼容别名,两者等价,建议统一用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
正常会看到 clamav、clamav-data、clamav-update、clamd 等包。
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.confvs/etc/clamd.conf)、
服务名(clamd@scanvsclamav-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.conf里LocalSocket没打开 + 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 |
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)