我需要使用开源软件对 Docker 容器内的文件实施防病毒按访问扫描解决方案。 Clamav On-Access 工作正常,但有一些要求和限制:
这个限制——“从主机观看时,fanotify 不适用于容器事件”,真的存在还是我只是错误配置了 ClamAV?我不太了解 fanotify 如何与命名空间一起工作,但对我来说它看起来像是内核限制。
更新:此限制有任何解决方法吗?添加
/var/lib/docker/overlay2/container_id/merged
是一种选择,因为动态容器性质 clamd.conf
需要在每个容器事件上更新。但即使添加了路径,ClamAV 也无法检测到容器中的恶意文件。
每个容器运行 ClamAV 会产生巨大的内存开销,特别是对于小型容器。
友情链接收藏:
我有一个带有补丁的 ClamAV 的解决方案。
我能够使用我发布到 clamav-devel 邮件列表的补丁来使 OnAccessIncludePath 工作:https://lists.gt.net/clamav/devel/77347#77347。
我最终得到了一个使用 fanotify 进行静态挂载的进程,以及一个使用 inotify 来监视 /var/lib/docker 临时挂载的进程。每个容器有 2 个实例仍然比 1 个实例要好得多。我做了相当多的负载测试,并且从我邮寄列表的时候起,补丁就已经投入生产了。
Sophos 不适合我,但我很快就放弃了。
是的,fanotify 仅监视其运行所在的挂载命名空间中的事件。
现在
fanotify
可以监控整个文件系统的事件,无论挂载命名空间如何。您需要使用标志 FAN_MARK_FILESYSTEM
和 FAN_MARK_ADD
(FAN_MARK_ADD | FAN_MARK_FILESYSTEM
)。从 fanotify_mark
手册页这里是片段:
FAN_MARK_FILESYSTEM (since Linux 4.20)
Mark the filesystem specified by pathname. The filesystem
containing pathname will be marked. All the contained
files and directories of the filesystem from any mount
point will be monitored.
有程序示例吗?虽然我在这里设置了,但是还是没有生效