如何从非 SELinux 系统读取/更改已安装 ext4 映像上的 SELinux 上下文?

如何从非 SELinux 系统读取/更改已安装 ext4 映像上的 SELinux 上下文?

我有一个不支持 SELinux 的 Linux 系统 (Arch Linux)。我不想在我的系统上配置此类支持。现在,我有一个 ext4 卷映像,已知它的文件上设置了一些 SELinux 上下文。我需要读取并更改某些文件的上下文。当我安装这个图像和ls -lZ它时,我得到一个?而不是上下文。

如果我没有在系统范围内启用 SELinux,如何访问和更改文件的 SELinux 上下文?如果这是不可能的,那么哪个是最小的 SELinux 配置,它不会影响整个系统,但允许我更改已安装映像中的上下文?

答案1

SELinux 上下文存储在文件的扩展属性 ( xattr, man 5 attr) 中。core/attr软件包中提供了用于使用它们的工具。

可以使用 检索属性,包括 SELinux 上下文getfattr。但有一个警告:默认情况下getfattr仅列出user.命名空间中的属性;我们需要的属性selinux位于security命名空间中。因此,我们需要传递-m -选项来请求所有名称空间的属性(-d即转储值和名称):

$ getfattr -m - -d bin/sh
# file: bin/sh
security.selinux="u:object_r:system_file:s0"

为了更改 selinux 上下文,我使用了setfattr需要 root 权限的工具:

$ sudo setfattr -n security.selinux -v u:object_r:shell_exec:s0 bin/sh
$ getfattr -m - -d bin/sh
# file: bin/sh
security.selinux="u:object_r:shell_exec:s0"

相关内容