在我的
/home/backend
目录下,有多个Golang项目。
我用过
sudo semanage fcontext -a -t bin_t "/home/backend(/.*)?"
和
sudo restorecon -Rv /home/backend
将所有目录及其子目录/文件的默认上下文设置为“bin_t”。手动创建的任何新文件(使用文本编辑器)的上下文都设置为
bin_t
。 但是,每当我运行 go build
创建构建时,新生成的构建的上下文都会设置为 user_tmp_t
。根据 this,新创建的文件应该与父文件具有相同的上下文,因此它应该是 bin_t。
为什么会出现这种情况?
如此处所述,转换优先于继承。
所以我猜测有一个过渡匹配。 可能是那些(不确定):
$ grep user_tmp_t /etc/selinux/targeted/contexts/files/file_contexts.homedirs
/home/[^/]+/tmp -d unconfined_u:object_r:user_tmp_t:s0
/home/[^/]+/\.tmp -d unconfined_u:object_r:user_tmp_t:s0
/run/user/[0-9]+ -d unconfined_u:object_r:user_tmp_t:s0
/tmp/gconfd-[^/]+ -d unconfined_u:object_r:user_tmp_t:s0
如果您不希望您的主目录继承这种 user home 目录规则,我建议您应该为您的应用程序使用专用路径。 像
/opt/backend
这样的东西可能是合适的。 (如果有 backend
用户,则将其设为 backend
用户的家)