我在 Redhat Enterprise Linux 8 上有一个以 unconfined_service_t SELinux 类型运行的守护进程:
# ps -eZ | grep savd
system_u:system_r:unconfined_service_t:s0 693 ? 00:00:00 savd
它正在尝试使用 insmod 加载 Linux 内核模块。
SELinux(处于强制模式)正在阻止它:
type=AVC msg=audit(1566572669.301:24): avc: denied { module_load } for pid=815 comm="insmod" path="/opt/sophos-av/talpa/current/talpa_syscallhook.ko" dev="xvda2" ino=48087622 scontext=system_u:system_r:unconfined_service_t:s0 tcontext=system_u:object_r:usr_t:s0 tclass=system permissive=0
我尝试设置 domain_kernel_load_modules 以允许所有域加载内核模块:
setsebool -P domain_kernel_load_modules 1
为了防止我误解了,我0
也尝试了,并重新启动,但无论如何加载内核模块都被阻止了。
audit2allow 建议为其创建一个规则,但我认为 domain_kernel_load_modules 会允许所有进程加载内核模块,所以我不明白为什么它不起作用?
我是否可以获得不受限制的服务来加载内核模块而无需创建额外的策略?
如果重要的话,这是一个 AWS 实例 VM。
答案1
包含内核模块的文件具有安全上下文system_u:object_r:usr_t:s0
。这不是内核模块的预期类型。这让我认为您的安装出了问题,因为 Sophos 在安装时应该设置正确的安全上下文。这可能是一个错误。
无论如何,正确的类型是modules_object_t
。您可以尝试更改文件类型作为解决方法,直到 Sophos 修复该问题。(您也应该向他们报告。)
chcon -t modules_object_t /opt/sophos-av/talpa/current/talpa_syscallhook.ko