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
查看 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