> 技术文档 > SELinux 用户,如何查看u之前的是unconfind_u还是system_u

SELinux 用户,如何查看u之前的是unconfind_u还是system_u

SELinux 安全上下文结构

user : role : type : level例子1:system_u : system_r : unconfined_t : s0-s0 : c0.c1023例子2:unconfined_u : unconfined_r : unconfined_t : s0第一位:SELinux 用户(user):system_u、unconfined_u、staff_u、SELinux 定义的安全用户(不是 Linux 普通用户)第二位:角色(role):system_r、unconfined_r 定义可以执行的域转换第三位:类型(type):unconfined_t、httpd_t SELinux 中最核心的访问控制单位第四位:级别(level):s0、s0-s0:c0.c1023 MLS/多级安全级别(常用于军用系统)

在 SELinux 安全上下文中:

  • system_u:表示系统服务进程使用的安全用户,例如 init、systemd、udevd。

  • unconfined_u:是一个“无限制”的用户,通常给普通用户进程使用(默认 root 登录就是它)。

  • staff_u:是更严格受控的用户(如 RHEL 中 staff 用户)。

查看上下文方法

# 查看进程上下文ps -eZps -Z -p # 查看文件上下文:ls -Z /path/to/file例子:ps -Z#看到:unconfined_u:unconfined_r:unconfined_t:s0 1234 pts/0 00:00:00 bash# 说明你当前 bash 是在 unconfined_u 下运行的,而系统服务(如 systemd)则是:system_u:system_r:init_t:s0 1 ? 00:00:01 systemd

例子:

u:object_r:rootfs:s0 tmpu:object_r:updater_file:s0 updateru:object_r:vendor_file:s0 vendor
uid=1000(username) gid=1000(username) groups=1000(username) context=u:object_r:rootfs:s0

在这个例子中,u之前的是 unconfined_u,如果是 system_u,那么 context 中会显示 system_u

id命令的几个参数

-n 打印名称而不是数字 ID(与 -Ggu 一起使用)
-G 仅显示组 ID
-g 仅显示有效组 ID
-r 显示真实 ID 而非有效 ID
-u 仅显示有效用户 ID