预设置只读文件系统squashfs上的文件的扩展属性的方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/keheinash/article/details/78507063

出于安全考虑,有时候我们会在嵌入式系统中使用可读的文件,比如romfs和squashfs,这类文件系统一旦烧录并且挂载后,整个分区都是不可写的,即使是重新挂载,指定RW属性也无法修改这一特性。

由于这个特性,我们无法通过SELinux 的策略去设置文件系统上文件的安全属性,因为策略都是在文件系统挂载完毕才生效的,此时虽然系统会尝试去标记文件的安全上下文,但是安全上下文是文件扩展属性的一部分,修改安全上下文相当于修改文件的扩展属性,只读文件系统无法进行这样子的操作。

那么在SELinux中,只读文件系统上文件的安全上下文是如何定义的呢?需要用到fs_use_xattr语句,这个语句有两个作用:一是规定文件系统上的文件使用扩展属性作为文件的安全上下文;二是规定文件系统本身的安全上下文。

设置文件系统squashfs上的文件的扩展属性方法

那么同样地,我们需要找出预设置文件系统上文件的扩展属性的方法,下面说明如何预设置squashfs文件系统上文件的扩展属性。

squashfs对应的打包工具是mksquashfs,其中有一个默认选项xattr:
这里写图片描述

只要预先设置好每个文件的安全上下文,使用mksquashfs打包时自然就会把文件的扩展属性带上。
然后在SELinux的策略中,加上下面的语句,只要设置文件的扩展属性,就会优先使用扩展属性中的安全上下文:
这里写图片描述

fs_use_xattr的作用

可以看到fs_use_xattr后面还跟着一个安全上下文,这个安全上下文具体其实就是用在上面提到的fs_use_xattr的第二个作用:规定文件系统本身的安全上下文。

使用文件系统前必须进行挂载,挂载的时候需要指定文件系统类型。在SELinux中,挂载也是一种可以进行控制的访问操作,在挂载文件系统这个场景下,squashfs的安全上下文就是目标安全上下文,因此fs_use_xattr中规定的安全上下文是用在需要对某种类型的文件系统进行操作时,作为客体(文件系统类型)的安全上下文。

只读文件系统的文件没有预设置扩展属性时,文件的默认安全上下文会是什么?

如果对只读文件系统上的文件,我们没有在打包烧录前就设置好文件的安全上下文,那么烧录到target后,这些文件的安全上下文会是什么?答案是取决于策略中的sid unlabeled语句定义的安全上下文。SELinux预留了27项利用sid策略语句设置初始安全上下文的主体和客体。其中,当系统中有主体/客体没有默认的安全上下文时,比如对squashfs文件系统上的文件,我们不预先设置安全上下文,当烧录到target上后,由于其只读属性,SELinux也无法对这些文件标记安全上下文,此时文件的安全上下文就使用sid unlabeled后定义的安全上下文进行标记,如下面的例子,没有默认安全上下文的主体/客体的安全上下文会全部被标记为system_u:object_r:unlab_t。
这里写图片描述
这27项不能多页不能少,否则编译SELinux策略时会报错。

猜你喜欢

转载自blog.csdn.net/keheinash/article/details/78507063