SELinux 文件标记和 SELinux 上下文

SELinux 上下文(Context)

SELinux 上下文包含其他信息,例如 SELinux 用户、角色、类型和级别。
关于进程、Linux 用户和文件的访问控制决策基于此上下文信息。
访问控制基于以下信息:

  • SELinux 用户:Linux 用户映射到 SELinux 用户。
  • 角色:RBAC 的一个属性,充当域和 SELinux 用户之间的中介
  • 类型:定义进程域的 TE 属性
  • 级别:可选信息; MLS 和 MCS 的一个属性

SELinux 文件标记(SELinux File Labeling)

所有文件、目录、设备和进程都有与之关联的安全上下文(或者标签)。
对于文件,此上下文存储在文件系统的扩展属性中。
SELinux 的问题通常源于文件系统被错误标记。
如果我们看到包含 file_t 的错误消息,这通常是一个很好的指标,表明我们在文件系统标签方面存在问题。

有几种方法可以重新标记文件系统:

  • 创建 /.autorelabel 文件并重新启动。
  • SELinux GUI 中的状态视图提供了在下次重新启动时重新标记的选项。
  • 三个命令行实用程序,restorecon、setfiles 和 fixfiles,重新标记文件。

更改上下文文件类型

KVM 虚拟机磁盘镜像默认创建在 /var/lib/libvirt/images 目录中。
SELinux 要求镜像文件应用 virt_image_t 标签。
我们可以使用“ls -dZ”命令来确认此标签已应用于 /var/lib/libvirt/images 目录:

# ls -dZ /var/lib/libvirt/images
drwx--x--x. root root system_u:object_r:virt_image_t:s0 /var/lib/libvirt/images

我们可以为虚拟机镜像使用不同的目录,但我们需要先将新目录添加到 SELinux 策略并重新标记它。
以下步骤用于将 /kvmimages 目录添加到目标 SELinux 策略并重新标记该目录:

# semanage fcontext -a -t virt_image_t "/kvmimages(/.*)?"

上面的命令通过在以下文件中添加一行来将 /kvmimages 目录添加到 SELinux 策略中:

# cat /etc/selinux/targeted/contexts/files/file_contexts.local
/kvmimages(/.*)?    system _u:object_r:virt_image_t:s0

我们仍然需要在目录和目录中的所有文件上设置新的安全上下文。
我们可以使用以下任何命令来更改 /kvmimages 目录中的 SELinux 上下文:

  • fixfiles :修复文件系统上的安全上下文
  • restorecon :重置一个或者多个文件的安全上下文
  • setfiles :初始化一个或者多个文件的安全上下文

这些命令中的每一个都会读取 /etc/selinux/targeted/contexts/files 目录中的文件。
以下示例显示了运行 restorecon 命令之前的 SELinux 上下文:

# ls -dZ /kvmimages
drwx--x--x. root root system_u:object_r:unlabeled_t:s0 /var/lib/libvirt/images

请注意,SELinux 类型设置为 unlabeled_t 。
以下示例运行 restorecon 命令以更改 /etc/selinux/targeted/contexts/files/file_contexts.local 文件中定义的类型:

# restorecon -R -v /kvmimages
# ls -dZ /var/kvmimages
drwx--x--x. root root system_u:object_r:virt_image_t:s0 /kvmimages

还有一些 SELinux 布尔值会在由 libvirt 启动时影响 KVM。
其中两个布尔值如下所列:

  • virt_use_nfs : 允许 virt 管理 NFS 文件。
  • virt_use_samba : 允许 virt 管理 CIFS 文件。

当分别使用 NFS 或者 SAMBA 共享来存储虚拟机磁盘镜像时,需要启用这些布尔值。
还有其他影响 KVM 的 SELinux 布尔值。
其中一些列出如下:

# getsebool -a | grep virt
staff_use_svirt --> off
unprivuser_use_svirt --> off
virt_read_qemu_ga_data --> off
virt_rw_qemu_ga_data --> off
virt_sandbox_use_all_caps --> on
virt_sandbox_use_audit --> on
virt_sandbox_use_fusefs --> off
virt_sandbox_use_mknod --> off
virt_sandbox_use_netlink --> off
virt_sandbox_use_sys_admin --> off
virt_transition_userdomain --> off
virt_use_comm --> off
virt_use_execmem --> off
virt_use_fusefs --> off
virt_use_nfs --> on
virt_use_rawip --> off
virt_use_samba --> off
virt_use_sanlock --> off
virt_use_usb --> on
virt_use_xserver --> off
on  it road.com

查看 SELinux 上下文信息

查看有关文件的 SELinux 上下文信息
要从命令行查看文件系统上下文信息,请使用“ls -Z”命令:

# ls -Z
-rw-------. root root system_u:object_r:admin_home_t:s0 anaconda-ks.cfg
-rw-r--r--. root root system_u:object_r:admin_home_t:s0 initial-setup-ks.cfg

查看有关进程的 SELinux 上下文信息
要查看有关进程的 SELinux 上下文信息,请使用“ps -Z”命令:

# ps -Z
LABEL                              PID TTY          TIME CMD
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 6617 pts/0 00:00:00 sudo
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 6623 pts/0 00:00:00 su
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 6624 pts/0 00:00:00 bash
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 8188 pts/0 00:00:00 ps

查看用户的 SELinux 上下文信息
要查看与 Linux 用户关联的 SELinux 上下文,请使用“id -Z”命令:

# id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

SELinux 上下文使用以下语法显示:

user:role:type:level
日期:2020-09-17 00:14:41 来源:oir作者:oir