如何防止 SElinux 在启动时阻止自定义 systemd 服务?

如何防止 SElinux 在启动时阻止自定义 systemd 服务?

SElinux 正在阻止我的自定义服务在启动时被 systemd 获取。

MESSAGE=SELinux 正在阻止 systemd 对文件 custom.service 进行读取访问

重新启动之前

[root@box opt]# systemctl daemon-reload
[root@box opt]# systemctl enable --now custom
[root@box opt]# systemctl status custom.service
● custom.service - foo
   Loaded: loaded (/opt/foo/bar/systemd/custom.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-10-07 12:18:27 EDT; 1min 28s ago
...
...

重启后

[root@box opt]# systemctl status custom.service
Unit custom.service could not be found.

所以我禁用了selinux并重新启动,但它似乎没有任何帮助。然后我更改了 selinux 用户、角色和服务文件类型,并再次尝试重新启动。

[root@box opt]# chcon -R -u unconfined_u -r object_r -t systemd_unit_file_t foo/bar/systemd/

还是什么都没有...然后我注意到我放置的符号链接/etc/systemd/system显示了?第二个上下文。如果我cp将服务文件/etc/systemd/system也放入该目录中,也会发生同样的事情。

[root@box opt]# ls -Z /etc/systemd/system/custom.service
? /etc/systemd/system/custom.service

有人知道这里需要做什么来解决这个问题吗?

总长DR- 即使 selinux 被禁用,SElinux 也会阻止 systemd 读取已启用的自定义 systemd 单元。

答案1

找到了解决方案。

我在宽容模式下重新启用了selinux,并且我的服务在启动后启动。我想chcon我运行的命令没有任何效果,因为 selinux 事先被禁用了。

我现在已经禁用了 selinux 并重新启动,一切似乎都正常。仍然不太明白如果 selinux 被禁用,为什么第二个上下文很重要。

# ls -Z now shows the correct context
[root@box ~]$ ls -Z /etc/systemd/system/custom.service
system_u:object_r:systemd_unit_file_t:s0 /etc/systemd/system/custom.service

相关内容