该模块的功能 #
防病毒软件会把你服务器上的文件与已知恶意软件的特征目录进行比对。如果有匹配,就把它标记为已感染,以免继续传播——例如上传到公共文件夹中的恶意附件,或通过 FTP 到达的受污染文件。
clamav 模块用少量清晰的命令把 ClamAV 引擎交到你手中:查询它的状态、扫描你想要的任意路径(单个文件或整棵目录树)、决定如何处理感染文件——仅报告、将其删除,或移入可稍后恢复的安全隔离区——并用 freshclam 保持特征库最新。隔离会在不删除文件的情况下将其隔开,因此你绝不会因误操作而丢失任何东西。
扫描是用你当时拥有的特征库来检测的。如果你已经好几天没更新,请先运行 imaxe clamav update,以免漏掉近期的威胁。扫描大型目录树可能耗时并占用 CPU:把路径收窄到你真正想检查的范围。
常见任务 #
选择你想做的事。每份配方都附有写好的命令——只需把路径换成你自己的,再点击复制。
1
查看 ClamAV 是否就绪
检查引擎、模式以及你的特征库有多旧。
通过 SSH 连接到你的服务器并请求总体状态:
$ sudo imaxe clamav status只关心特征库——版本、日期和文件?使用 db:
$ sudo imaxe clamav db2
扫描一个文件夹
检查一个路径并只留下报告,不改动任何东西。
用 --recursive 分析一个目录及其全部内容。默认只报告:不删除也不移动任何东西。
$ sudo imaxe clamav scan /home --recursive只有单个文件?直接传入路径,不带 --recursive:
$ sudo imaxe clamav scan /srv/uploads/factura.pdf3
扫描并隔离感染文件
自动将所有检测为阳性的文件移入隔离区。
扫描一个路径,并用 --quarantine 把每个感染文件挪到隔离区,而不是留在原处:
$ sudo imaxe clamav scan /srv/uploads --recursive --quarantine如果你更愿意直接删除感染文件而非将其隔离,使用 --remove(不可逆,请谨慎使用):
$ sudo imaxe clamav scan /srv/uploads --recursive --remove4
查看并恢复隔离区
看看隔离了什么,必要时找回一个误报。
列出隔离区中的内容——每一项都带有其标识符、来源、特征和日期:
$ sudo imaxe clamav quarantine list是误报吗?用列表中显示的标识符把它恢复到原始路径:
$ sudo imaxe clamav quarantine restore a1b2c3d4当你确认所有被隔离的都是垃圾时,彻底清空隔离区:
$ sudo imaxe clamav quarantine purge --yes5
更新特征库
下载最新的定义以检测新出现的威胁。
运行 freshclam 以获取最新的特征库:
$ sudo imaxe clamav update之后通过版本和日期确认特征库已更新到最新:
$ sudo imaxe clamav db--remove删除会把文件永久抹除,而没有任何防病毒软件能完全避免误报。有疑虑时,请始终使用 --quarantine:它同样能有效隔离,并在你判断失误时让你恢复。
用法概要 #
imaxe clamav <subcomando> [<ruta>] [--recursive] [--quarantine|--remove] [--json]凡是扫描、移动或删除文件的子命令都需要 root 权限(使用 sudo),因为它们会读取其他用户的路径并写入系统的隔离区。为任意命令添加 --json 可获得机器可读的输出,适用于脚本。
子命令 #
| 子命令 | 功能 | 相关标志 |
|---|---|---|
| status | ClamAV 状态:engine、模式(daemon/on-demand)、freshclam 以及特征库。 | --json |
| scan | 扫描一个路径;可对感染文件进行报告、删除或隔离。 | --recursive, --remove, --quarantine, --json |
| update | 通过 freshclam 更新特征库。 | --json |
| db | 特征库信息:版本、日期和文件。 | --json |
| quarantine | 管理感染文件的隔离区(子命令分组)。 | list · restore · purge |
quarantine 分组包含三个子命令:
| 子命令 | 功能 | 相关标志 |
|---|---|---|
| quarantine list | 列出隔离区中的文件(来源、特征、日期)。 | --json |
| quarantine restore | 把隔离区中的文件恢复到其原始路径或指定目标。 | <id> [<destino>] |
| quarantine purge | 彻底删除隔离区中的所有内容。 | --yes |
参数与标志 #
| 标志 / 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| <ruta> req. | path | — | 在 scan 中,要扫描的文件或目录。 |
| <id> req. | string | — | 在 quarantine restore 中,隔离项的标识符(出现在 quarantine list 中)。 |
| <destino> | path | 原始路径 | 在 quarantine restore 中,要将文件恢复到的路径。默认为其原始位置。 |
| --recursive | bool | false | 在 scan 中,递归扫描目录。 |
| --quarantine | bool | false | 在 scan 中,把感染文件移入隔离区。 |
| --remove | bool | false | 在 scan 中,删除感染文件。不可逆;与 --quarantine 互斥。 |
| --yes | bool | false | 在 quarantine purge 中,无需询问即确认删除。 |
| --json | bool | false | 将结果以 JSON 输出到 stdout。所有子命令均可用。 |
文件与路径 #
| 路径 | 内容 |
|---|---|
| /etc/imaxe/clamav.yml | 模块配置:隔离目录以及从扫描中排除的路径。 |
| /var/lib/imaxe/clamav/quarantine | 隔离区存储:感染文件在此被隔离,可以恢复。 |
| /var/lib/clamav/ | freshclam 维护的特征库(恶意软件定义)。 |
| /var/log/imaxe/clamav.log | 每次扫描、隔离和更新的结构化日志。 |
clamav.yml 示例:
quarantine_dir: /var/lib/imaxe/clamav/quarantine
scan:
exclude:
- /proc
- /sysscan.exclude 是一份扫描会跳过的路径列表;默认为空。
退出码与日志 #
每次执行都会返回一个退出码,你可以用 echo $? 查看——便于在脚本中串联:
调试时实时跟踪日志:
$ sudo tail -f /var/log/imaxe/clamav.log故障排查 #
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 出现 INFECTED(退出码 3) | 扫描检测到一个或多个威胁。 | 查看报告;用 --quarantine 重新运行 scan 以隔离它们。 |
| 出现 UPDATE(退出码 4) | freshclam 无法下载特征库(网络故障或镜像宕机)。 | 检查服务器的外网访问并重试 clamav update。 |
| 扫描耗时太久 | 路径涵盖了过多文件或系统路径。 | 收窄路径,并在 clamav.yml 中用 scan.exclude 排除不必要的内容。 |
| 丢失了一个合法文件 | 误报被 --quarantine 移入了隔离区。 | 用 quarantine list 定位它,并用 quarantine restore <id> 找回。 |
| 状态显示特征库过旧 | 已经很久没有运行 freshclam。 | 运行 clamav update,并用 clamav db 验证。 |
ClamAV 模块遇到问题了?
把「imaxe <module> status --json」的输出发给我们,我们会尽快回复你。