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