我尝试使用 clamav 对我的主目录和所有已安装的驱动器进行访问时病毒扫描。我发现了一些相当旧的说明这里,并进行了调整。
由于 dazuko 被 fanotify 取代,所以中的参数clamd.conf
略有不同。以下是我相关的clamd.conf
条目:
ScanOnAccess true
# ClamukoScanOnOpen true
# ClamukoScanOnExec true
OnAccessIncludePath /home
OnAccessIncludePath /mnt
OnAccessIncludePath /media
VirusEvent /opt/clamdazer %v &
如果我重新启动clamd
(通过sudo invoke-rc.d clamav-daemon restart
),日志将包含以下内容:
ERROR: ScanOnAccess: fanotify_init failed: Operation not permitted
ScanOnAccess: clamd must be started by root
我究竟做错了什么?
编辑:我尝试将“User clamav
”行更改为“User root
”,但启动clamd
将因“d”而失败ERROR: initgroups() faile
。
我发现了一些可能与此相关的错误报告:Ubuntu 错误 #1404762和 Debian 错误 #749027(我只能发布 2 个链接)。
不幸的是,我使用那里描述的解决方案没有成功。在我看来,按访问扫描目前根本不起作用。
答案1
实际上你已经在那里了。你已经完成了 clam-av 的安装,我们需要进行一些调整以使 clamd 以 root 身份运行。
由于这个帖子已经过时了。我将总结您所做的正确的事情。这只是逐步介绍如何安装 ClamAV 并使其即时访问。
首先,我们必须安装正确的版本。只有 clamav 版本 > 0.98 才具有用于按访问扫描的 ifanotify 功能。此 ifanotify 替换了已弃用的 dazuko 内核模块查看更多@ClamAV 博客由旧版 ClamAV 使用。
步骤 1 - 安装
如果你运行的是 14.04,你可以添加此 ppa 以获取最新版本
ppa:teward/clamav
然后更新apt以刷新apt缓存
sudo apt-get update
运行以下命令安装 ClamAV
sudo apt-get install clamav clamav-daemon
如果已经安装了 ClamAV,请不要忘记通过运行以下命令来更新 ClamAV 数据库
sudo freshclam
到这一步,我们的机器上已经有 ClamAV 了。但是等一下,我们需要让它进行访问时扫描,对吧?当然可以!
步骤 2 - 配置
现在打开 ClamAV 配置文件 (clamd.conf)。我使用的是 ubuntu 16.04 LTS,它位于 /etc/clamav/clamd.conf(您可以使用 nano 或 vi 来编辑该文件,但请确保您有编辑该文件的权限)。
sudo nano /etc/clamav/clamd.conf
然后您将在那里看到所有预定义的参数。
现在看看这个参数的配置文件
ScanOnAccess false
将其更改为
ScanOnAccess true
现在有两种方法可以将目录包含在访问时扫描中。第一种方法是将目录作为已安装目录包含,第二种方法是将目录作为包含目录包含。
仍然在配置文件上,为 mounted 选项添加以下参数
OnAccessMountPath /
这将包括您机器内的所有目录或路径。换句话说,它将监视并扫描您机器的所有目录。但您可以添加多个“OnAccessMountPath”,这样您就可以定义自己的目录。
OnAccessMountPath /home
OnAccessMountPath /opt
OnAccessMountPath /var
etc...
第二个你可以使用“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
然后不要忘记在配置参数的末尾添加以下参数
OnAccessPrevention false
OnAccessExtraScanning true
OnAccessExcludeUID 0
(可选但建议)您可以添加自己的脚本来处理病毒发现此类删除或移动受感染文件的事件,并进行一些记录。为此,您可以在配置文件中添加“VirusEvent”参数。您可以像我一样添加
VirusEvent /opt/clamav-utils/clamd-response
并在 /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"
该脚本将删除受感染的文件,记录日志,并将 OSD 通知发送到您的桌面。注意:如果 OSD 通知未显示,请尝试删除
sudo -u yourUserName
然后离开
DISPLAY=:0.0 notify-send "Virus Found $CLAM_VIRUSEVENT_VIRUSNAME" "$CLAM_VIRUSEVENT_FILENAME has been removed"
现在我们需要让 clamd(clamav 守护进程)以 root 身份运行。仍然在配置文件中查找此参数
User clamav
将其改为
User root
现在保存并关闭文件。接下来我们需要阻止 app armor 阻止 clamd 以 root 身份运行。
步骤 3 - 让 clamd 能够以 ROOT 身份运行
首先,我们需要通过运行此命令来安装 app armor utils
sudo apt install apparmor-utils
然后运行此命令来抱怨clamd残疾以root身份运行
sudo aa-complain clamd
只需重新启动您的机器,ClamAV 现在就应该以访问时运行。
答案2
那个设定
User root
相反,问题并没有得到解决,而是编辑服务本身以 root 身份运行:
gedit /etc/systemd/system/multi-user.target.wants/clamad.service
# then and change the user to root