在 Ubuntu 12.04 上配置 clamdscan 扫描系统上的所有文件

问题描述 投票:0回答:3

我执行了以下操作来安装 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,因为我读到这可能是问题所在,但没有成功。

ubuntu ubuntu-12.04
3个回答
23
投票

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 /
应该可以解决问题。


0
投票

可能回答太晚了...,但我在任何地方都找不到任何有用的解决方案。

如果您无法将“--fdpass”与 clamdscan 一起使用,或者您使用其他扫描请求方法(例如 samba 的 vfs_virusfilter),请检查您的 Linux 安全系统,例如 SELinux 或 AppArmor。

我的 Ubuntu 20.04 主机的工作是添加 AppArmor 配置文件的路径。

/etc/apparmor.d/usr.sbin.clamd

/path-to-allow-scan/** r,

0
投票

就我而言,我的系统(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 ~
© www.soinside.com 2019 - 2024. All rights reserved.