如何在 v14.04 中使用 Clamav 扫描访问

hak*_*ako 4 clamav

我尝试使用 clamav 对我的主目录和所有安装的驱动器进行访问病毒扫描。我在这里找到了一些相当旧的说明,并对其进行了调整。

由于dazuko被fanotify取代,clamd.conf中的参数略有不同。这是我的相关 clamd.conf 条目:

ScanOnAccess true
# ClamukoScanOnOpen true
# ClamukoScanOnExec true
OnAccessIncludePath /home
OnAccessIncludePath /mnt
OnAccessIncludePath /media
VirusEvent /opt/clamdazer %v &
Run Code Online (Sandbox Code Playgroud)

如果我重新启动 clamd(通过“sudo invoke-rc.d clamav-daemon restart”),日志将包含以下内容:

ERROR: ScanOnAccess: fanotify_init failed: Operation not permitted
ScanOnAccess: clamd must be started by root
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

编辑:我试图将“User clamav”行更改为“User root”,但随后 clamd 的启动将失败并显示“ERROR: initgroups() failed”。

我发现了一些可能与此处相关的错误报告:Ubuntu Bug #1404762和 Debian Bug #749027(我只能发布 2 个链接)。

不幸的是,我没有成功使用那里描述的解决方案。在我看来,按访问扫描目前根本不起作用。

Tri*_*nto 7

其实你已经在那里了。您已经完成了 clam-av 的安装,我们需要进行一些调整以使 clamd 以 root 身份运行。

由于该线程已经老化。我将总结你所做的正确的事情。这只是逐步说明如何安装 ClamAV 并使其可访问。

首先我们必须安装正确的版本。只有 clamav 版本 > 0.98 具有用于访问时扫描的 ifanotify 功能。这个 ifanotify 替换了已弃用的 dazuko 内核模块,查看更多@ClamAV旧版 ClamAV 使用的博客


第 1 步 - 安装

如果您在 14.04 上运行,您可以为最新版本添加此 ppa

ppa:teward/clamav
Run Code Online (Sandbox Code Playgroud)

然后更新apt刷新apt缓存

sudo apt-get update
Run Code Online (Sandbox Code Playgroud)

运行以下命令安装 ClamAV

sudo apt-get install clamav clamav-daemon
Run Code Online (Sandbox Code Playgroud)

如果 ClamAV 已经安装,请不要忘记通过运行更新 ClamAV 数据库

sudo freshclam
Run Code Online (Sandbox Code Playgroud)

在这一步,我们的机器上已经有了 ClamAV。但是等等,我们需要让它进行访问扫描,对吗?当然!


第 2 步 - 配置

现在打开 ClamAV 配置文件 (clamd.conf)。我使用的是 ubuntu 16.04 LTS,它位于 /etc/clamav/clamd.conf(您可以使用 nano 或 vi 来编辑文件,但请确保您具有编辑文件的权限)。

sudo nano /etc/clamav/clamd.conf
Run Code Online (Sandbox Code Playgroud)

然后您将在那里看到所有预定义的参数。

现在查看这个参数的配置文件

ScanOnAccess false
Run Code Online (Sandbox Code Playgroud)

将其更改为

ScanOnAccess true
Run Code Online (Sandbox Code Playgroud)

现在有两个选项可以包含按访问扫描的目录。第一个包含挂载的目录,第二个包含目录。

还是在配置文件上,为mounted选项添加如下参数

OnAccessMountPath /
Run Code Online (Sandbox Code Playgroud)

这将包括您机器内的所有目录或路径。换句话说,它会监视并扫描您所有的机器目录。但是您可以添加多个“OnAccessMountPath”,由此您可以定义自己的。

OnAccessMountPath /home
OnAccessMountPath /opt
OnAccessMountPath /var
etc...
Run Code Online (Sandbox Code Playgroud)

第二个您可以使用“OnAccessIncludePath”包含更具体的目录

OnAccessIncludePath /home/{youruser}/Desktop
OnAccessIncludePath /home/{youruser}/Documents
OnAccessIncludePath /home/{youruser}/Downloads
OnAccessIncludePath /home/{youruser}/Emulation
OnAccessIncludePath /home/{youruser}/Music
OnAccessIncludePath /home/{youruser}/Pictures
OnAccessIncludePath /home/{youruser}/Public
OnAccessIncludePath /home/{youruser}/Video
Run Code Online (Sandbox Code Playgroud)

然后别忘了在配置参数的最后加上如下参数

OnAccessPrevention false
OnAccessExtraScanning true
OnAccessExcludeUID 0
Run Code Online (Sandbox Code Playgroud)

(可选但推荐)您可以添加自己的脚本来处理病毒发现此类删除或移动受感染文件时的事件,并做一些日志。为此,您可以在配置文件中添加“VirusEvent”参数。你可以像我一样添加

VirusEvent /opt/clamav-utils/clamd-response
Run Code Online (Sandbox Code Playgroud)

并在 /opt/clamav-utils 下或您喜欢的任何位置创建一个名为“clamd-response”的新 bash 文件。

这里是clamd-response的脚本

#!/bin/sh

echo "$(date) - $CLAM_VIRUSEVENT_VIRUSNAME > $CLAM_VIRUSEVENT_FILENAME" >> /var/log/clamav/infected.log
rm $CLAM_VIRUSEVENT_FILENAME
sudo -u yourUserName DISPLAY=:0.0 notify-send "Virus Found $CLAM_VIRUSEVENT_VIRUSNAME" "$CLAM_VIRUSEVENT_FILENAME has been removed"
Run Code Online (Sandbox Code Playgroud)

该脚本将删除受感染的文件、记录日志并将 OSD 通知发送到您的桌面。注意:如果 OSD 通知没有出现,请尝试删除

sudo -u yourUserName
Run Code Online (Sandbox Code Playgroud)

然后离开

DISPLAY=:0.0 notify-send "Virus Found $CLAM_VIRUSEVENT_VIRUSNAME" "$CLAM_VIRUSEVENT_FILENAME has been removed"
Run Code Online (Sandbox Code Playgroud)

现在我们需要让 clamd(clamav 守护进程)以 root 身份运行。还在配置文件上找这个参数

User clamav
Run Code Online (Sandbox Code Playgroud)

改成

User root
Run Code Online (Sandbox Code Playgroud)

现在保存并关闭文件。接下来我们需要防止应用程序装甲阻止 clamd 以 root 身份运行。


第 3 步 - 以 ROOT 身​​份运行蛤蜊能力

首先,我们需要通过运行此命令来安装应用程序装甲工具

sudo apt install apparmor-utils
Run Code Online (Sandbox Code Playgroud)

然后运行此命令以抱怨以 root 身份运行的 clamd 残疾

sudo aa-complain clamd
Run Code Online (Sandbox Code Playgroud)

只需重新启动您的机器,ClamAV 现在应该以访问方式运行。