在Redhat 8上,基于audit.log中生成的以下SELINUX拒绝日志(注意,为了保密起见,我已将原始日志的部分部分替换为三个点):
type=AVC msg=audit(...): avc: denied { read} for pid=1 comm="systemd" name="pcsd.service" dev="dm-0" ino=... scontext=system_u:system_r:init_t:s0 tcontext=system_u:object_r:unlabeled_t:s0 tclass=lnk_file permissive=1
我尝试使用以下命令生成自定义策略:
sepolicy generate --application -n init /usr/lib/systemd/systemd
上述命令成功生成以下文件:
init.fc init.if init.pp init_selinux.spec init.sh init.te
当我尝试运行
init.sh
时,它失败并出现以下错误:
/usr/sbin/semodule -i init.pp
libsemanage.semanage_direct_install_info: Overriding init module at lower priority 100 with module at priority 400.
Failed to resolve typeattributeset statement at /var/lib/selinux/targeted/tmp/modules/100/abrt/cil:73
/usr/sbin/semodule: Failed!
对于为什么我会收到此错误有什么想法吗?
蒂亚
SELinux 模块存储允许 SELinux 模块优先。
虽然
semodule
使用的默认优先级是 400,但策略包中使用的优先级是 100。
使用更高的优先级,您可以使用同名的修改后的模块覆盖现有模块。
现在,您尝试用较低优先级的模块覆盖具有较高优先级的模块。
你的错误中,
semodule
在abrt策略包中抱怨了这个问题,并给出了对应的通用中间语言行号作为参考。
要获取 CIL 文件中的失败行,请找到 abrt.pp 文件并调用 pp 编译器来获取 CIL 代码。 pp 编译器位于名为 hll 的高级语言基础结构文件夹中。
例如
/recipe-sysroot-native/usr/libexec/selinux/hll/pp ./refpolicy/abrt.pp > abrt.txt
现在您可以检查 abrt.txt 中给定的行号,看看哪一行与您的 init.pp 冲突。