我注意到这个规则
/usr/sbin/shutdown -- gen_context(system_u:object_r:shutdown_exec_t,s0)
标签/usr/sbin/shutdown
shutdown_exec_t
何时/usr/sbin
是目录。但当/usr/sbin
是 的符号链接bin
和shutdown
位于 中时,它不会恢复相同的标签/usr/bin
。为什么?如果/usr/sbin
是 的符号链接bin
,是否有一种简单的方法可以提供应该位于/usr/sbin
正确上下文中的文件?
看起来,如果一个 inode 有 2 个硬链接,并且路径具有不同的默认文件上下文,则生成的文件上下文将根据给定的路径而有所不同restorecon
。如果我重新标记整个文件系统,它将具有什么上下文?它是确定性的吗?这样做可以吗?这样做好吗?
答案1
restorecon
不处理符号链接就像它处理文件的方式一样。根据手册页(有点旧,作为起点非常有用):
笔记
Restorecon 不遵循符号链接。
这是在错误报告中观察到的,Bug 825221:restorecon 忽略符号链接的自定义规则,并附有以下相关评论:
- 丹尼尔·沃尔什 2012-05-29 13:54:13 美国东部时间
我们刚刚在 F17 中修复了这个问题。
- 丹尼尔·沃尔什 2012-08-15 14:01:52 美国东部时间
Restorecon 正在对文件执行真实路径,因此它通过真实路径转换文件。我们这样做是为了避免符号链接攻击导致文件被错误标记。
- 卡雷尔·斯罗特 2012-08-23 06:14:05 美国东部时间
刚刚在 RHEL6.3 和 Fedora 17 上测试过。
在 RHEL6 上,restorecon 不会恢复符号链接的上下文(当符号链接是实际项目时)。在 Fedora 17 上,上下文已恢复。我相信这就是 #c6 中提到的问题。
丹,您能否确认这就是要修复的问题?谢谢。
- 米罗斯拉夫·格雷普尔 2012-08-23 09:59:41 美国东部时间
好的,我们发现了政策中的错误。我们在 RHEL6 上没有以下规则
allow setfiles_t file_type : lnk_file { read getattr relabelfrom relabelto } ;
我们刚刚
allow setfiles_t file_type : lnk_file { getattr relabelfrom relabelto } ;
所以我将这个错误切换到
selinux-policy
组件。
稍后(2015 年),在关于在符号链接上使用restorecon的一些问题,史蒂芬·斯莫利评论道
是的,它们解析为不同的 inode(符号链接是 Linux 中它自己的文件/inode,独立于目标)。符号链接SELinux 标签仅控制对符号链接的访问(即取消链接、重命名或读取它的能力),而不控制对其目标的访问(根据目标的标签进行控制)。
所以...除非有进一步的规则,符号链接(大部分)与权限无关目标你所关心的。