我有一个不支持 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"