添加semanage fcontext规则未生效,为何需restorecon触发?
问题原因及解释
你的问题核心在于SELinux的上下文规则存储和自动应用机制的本质区别:
semanage fcontext -a命令只是将路径规则添加到SELinux的默认上下文数据库(存储在/etc/selinux/[policy]/contexts/files/file_contexts.local),它并不会主动将规则应用到任何现有或新创建的文件/目录上。- 当你手动创建
domains目录时,新目录的上下文是继承父目录/home/test的上下文(user_home_t)——普通用户shell进程创建文件时,会默认沿用父目录的安全上下文类型,SELinux内核不会自动去匹配你新增的fcontext规则来设置新文件标签。 restorecon命令的作用就是主动扫描文件路径,匹配fcontext数据库中的规则,并将文件上下文重置为默认值,所以执行它之后,domains目录的上下文才会被设置为你定义的httpd_user_content_t。
如果想要新创建的domains或public_html目录自动应用规则,有两种可选方式:
- 每次创建后手动执行
restorecon -Rv /home/test/domains - 利用SELinux的
filetrans规则(需编写自定义policy模块),让系统在特定目录下创建指定名称的目录时自动应用目标上下文。
内容的提问来源于stack exchange,提问作者user21794452
相关产品推荐
相关产品推荐

