我目前在 Centos 6.9 上遇到 ClamAV 和 freshclam 的问题。
我有最新的 Clam 引擎 0.99.2,并且有可用的互联网连接。 即使我在
# freshclam -v
之前运行 # clamscan
命令(它只返回有关 freshclam.conf 不安全权限的安全警告),clamAV 也会向我返回此警告:
LibClamAV Warning: **************************************************
LibClamAV Warning: *** The virus database is older than 7 days. ***
LibClamAV Warning: *** Please update it IMMEDIATELY! ***
LibClamAV Warning: **************************************************
所以我的问题是:我如何知道上次更新何时完成?或者确保病毒库是最新的?
PS:我已经用 eicar 测试文件测试了 clamscan,它检测到了它。
clamscan --version
显示签名的版本和日期,例如
$ clamscan --version
ClamAV 0.101.4/25613/Fri Oct 25 11:00:25 2019
其中
25613
是签名版本,后面是签名日期
您有 2 个问题:
host -t txt current.cvd.clamav.net; perl -e 'printf "%d\n", time;'
这将告诉您 clamav 何时提供最后一次更新。
首先您需要了解为什么会收到安全警告。如果您在这里发布警告,也许我们会有更好的机会帮助您。
那么我建议您查看日志
/var/log/clamav/freshclam.log
此外,如果您启用了 selinux,则必须运行以下命令:
setsebool -P antivirus_can_scan_system 1
。如果万一错误是这样的 During database load : LibClamAV Warning: RWX mapping denied: Can't allocate RWX Memory: Permission denied
那么显然你的解决方案就是我上面提到的命令。
这就是我对你问题的第二部分所做的:确保病毒数据库是最新的?
我的系统处于离线状态,因此无法查询 clamav 站点的最新病毒定义数据库,但我可以使用此 linux 命令轻松检查当前 cvd 文件的日期。
strings /var/lib/clamav/daily.cvd|head -1|cut -c1-28
ClamAV-VDB:31 Jul 2019 04-17
编辑:正如乔纳森(Jonathon)善意提到的那样,sigtool 是检查 clamav dat 文件签名的好方法:
sigtool --info daily.cvd
File: daily.cvd
Build time: 28 Aug 2019 04:24 -0400
Version: 25555
Signatures: 1739106
Functionality level: 63
Builder: raynman
...
使用以下脚本检查 ClamAV 是否具有最新版本的数据库:
#!/usr/bin/env bash
set -eo pipefail
_local_version=$(freshclam -V)
_remote_version=$(host -t txt current.cvd.clamav.net)
local_version=$(echo "$_local_version" | awk -F '/' '{ print $2 }')
remote_version=$(echo "$_remote_version" | awk -F ':' '{ print $3 }')
echo "Local version: $local_version" >&2
echo "Remote version: $remote_version" >&2
if [[ "$local_version" == "$remote_version" ]]; then
echo "ClamAV is up to date" >&2
else
echo "ClamAV not up to date, local version is $local_version, available is: $remote_version" >&2
exit 1
fi
将其另存为
clamav-check-if-up-to-date.sh
。如果数据库已过期,它将返回退出代码 1;如果数据库是最新的,它将返回退出代码 0。
您不能相信
TXT
记录的日期。但是,您可以信任 TXT
记录中的数据库版本。
所以,正确的答案是使用 @bogdan 和 @falko-menge 答案的部分内容:
首先,“我的机器上是什么版本的 clamav 数据库?” (在此示例中为 25904):
$ clamscan --version
ClamAV 0.102.4/25904/Mon Aug 17 08:02:24 2020
现在,“clamav.net 上可用的最新版本是什么?” (在本例中,也是 25904):
@ ✓ $ host -t txt current.cvd.clamav.net; perl -e 'printf "%d\n", time;'
current.cvd.clamav.net descriptive text "0.102.4:59:25904:1597879740:1:63:49191:331"
但是,该
TXT
记录显示了 25904 实际创建时间的错误时间:-(
@ ✓ $ epoch_to_rfc_3339 1597879740
2020-08-19T18:29:00