我使用 将文件设置为特定类型semanage fcontext
,并且使用restorecon
确实正确设置了文件类型。但是,重新启动后,类型会恢复为默认类型。如果我restorecon
再次运行,它会更新为正确的类型。此文件存在于 下/run/
,有没有办法让此权限更改在重新启动后保持不变?
我跑了semanage fcontext -a -t httpd_sys_content_t /var/run/myfile
答案1
您已将文件放入 中,/run
但semanage fcontext
命令引用 中的路径/var/run
。虽然在现代系统上这是 中的符号链接/run
,但如果您直接在 中创建文件/run
,则该路径永远不会匹配。尝试修复该问题;它应该是/run
而不是/var/run
。
答案2
SELinux fcontext 配置用于设置默认selinux filecontext,由 restorecon 应用。
setype: _default
它也可能被其他程序应用,例如当 Ansible 使用具有/指定的复制任务创建文件时seuser: _default
。
当文件/目录由 systemd tmpfiles 创建时也会发生类似情况。
然而,当你的 fcontext 规则匹配的文件是由一些不关心 SELinux 默认文件上下文的服务创建的,那么父目录是继承的:
新文件将继承创建它们的目录所指定的类型。
来源:https://access.redhat.com/articles/6999267#file-context-10
除了让你的程序查找和应用默认的 SELinux 文件上下文之外,你还可以执行以下操作之一:
- 通过
/run
Systemd 的RuntimeDirectory=
指令或 systemd临时文件配置,为该目录创建一个 fcontext 规则/var/run/yourserve
,并将您的服务配置为创建/run/yourservice/myfile
而不是/run/myfile
。一般来说,这也应该更安全。 - 声明文件名转换在您的自定义 SELinux 策略模块中。