我执行了以下操作来安装 clamscan:
sudo aptitude install clamav
sudo aptitude install clamav-daemon
并验证:
sudo ps -eal | grep clam
1 S 116 4788 1 2 80 0 - 4004 pause ? 00:00:13 freshclam
1 S 116 5930 1 0 80 0 - 69984 poll_s ? 00:00:00 clamd
但是,当我尝试通过运行来扫描系统上的所有文件时
#sudo clamdscan /
我不断收到以下错误消息:
lstat() 失败:权限被拒绝。错误
但是如果我跑步
sudo clamscan /
它确实有效,但这个过程要长得多,而且不是一个好的选择。
根据我的理解,clamd 使用用户“clamav”并列在 /etc/clamav/clamd.conf 文件中。我已将用户 clamav 添加到以下组:root、adm、sudo,但它仍然不起作用。
我也尝试禁用 Apparmor,因为我读到这可能是问题所在,但没有成功。
sudo clamdscan /path/to/some_file.txt
会将请求传递给 clamd 守护进程。该守护进程在不同的用户下运行,该用户可能无法访问 /path/to/some_file.txt
但是,调用该命令的用户很可能有权访问该文件。为了将您的权限传递给守护进程,请使用
--fdpass
标志:
--fdpass
Pass the file descriptor permissions to clamd. This is useful if clamd is running as a different user as it is faster than streaming the file to clamd. Only available if connected to clamd via local(unix) socket.
在你的情况下
sudo clamdscan --fdpass /
应该可以解决问题。
可能回答太晚了...,但我在任何地方都找不到任何有用的解决方案。
如果您无法将“--fdpass”与 clamdscan 一起使用,或者您使用其他扫描请求方法(例如 samba 的 vfs_virusfilter),请检查您的 Linux 安全系统,例如 SELinux 或 AppArmor。
我的 Ubuntu 20.04 主机的工作是添加 AppArmor 配置文件的路径。
/etc/apparmor.d/usr.sbin.clamd
/path-to-allow-scan/** r,
就我而言,我的系统(Fedora 39 XFCE 虚拟机)使用 SELinux 而不是 AppArmor。为了解决我的问题,我结合使用了此方法和
本页中提到的
--stream
方法。
为了查找相关日志消息,我运行了:
sudo journalctl --grep denied
然后按
End
键滚动到末尾。
然后,为了添加 SELinux 规则以允许相关文件访问操作,我运行:
sudo audit2allow -M local << _EOF_
(pasted here log message starting with AVC avc:)
_EOF_
接下来,为了应用我刚刚创建的 SELinux 规则,我运行了:
sudo semodule -i /etc/selinux/targeted/local.pp
我还需要编辑 /etc/clamd.d/scan.conf (使用
sudoedit /etc/clamd.c/scan.conf
)并注释掉我之前未注释的 LocalSocketMode 660
行。接下来,我使用 sudo systemctl reload clamd\@scan
重新加载了 clamd 服务。 (不确定这是否有必要。)最后,我使用以下命令重新运行扫描:
clamdscan --multiscan --stream ~