我正在编写支持 SELinux 的代码。我是这个安全模块的新手,学习曲线很陡峭。
为了让我的代码在 SELinux 环境中工作,我需要能够重新标记文件。例如,我正在挂载临时文件系统,并希望在挂载后恢复原始标签。
显然,我需要成为安装部分的 root(具有 CAP_SYS_ADMIN 功能),但是我需要成为重新标记部分的 root 吗?
在 Fedora 上,我可以重新标记自己拥有的文件,例如,我可以作为非特权用户执行以下操作:
$ touch /tmp/test
$ ls -Z /tmp/test
unconfined_u:object_r:user_tmp_t:s0 /tmp/test
$ chcon system_u:object_r:etc_t:s0 /tmp/test
$ ls -Z /tmp/test
system_u:object_r:etc_t:s0 /tmp/test
似乎没有权限重新标记不同用户拥有的文件。
但现在我在RedHat中发现了以下内容手动的:
SELinux 策略控制用户是否能够修改任何给定文件的 SELinux 上下文。
这似乎表明这种行为确实是可配置的,并且我不能依赖能够重新标记我自己拥有的文件。
编辑:
Fedora 似乎使用constraints
.
# dnf install setools-console
# seinfo --constrain
...
constrain file {relabelto create relabelfrom } (u1 == u2 or ( t1 == can_change_object_identity ));
...