最直接有效的方式是使用 semanage login -l 命令,因为该命令显示 linux 用户名到 selinux 用户及其 mls/mcs 范围的映射关系,而 semanage user -l 仅列出策略中预定义的 selinux 用户类型(如 unconfined_u、system_u),不反映实际登录绑定。

要查看当前系统的 SELinux 用户映射,最直接有效的方式是使用 semanage login -l 命令,而不是 semanage user -l。
为什么用 login 而不是 user?
semanage user 管理的是 SELinux 内部定义的“用户身份”(如 unconfined_u、staff_u),这些是策略中预置的角色容器,不直接对应 Linux 登录用户;而实际登录控制依赖的是“登录映射”(login mapping),即把 Linux 用户名(如 root、alice)绑定到某个 SELinux 用户及其 MLS/MCS 范围。因此,semanage login -l 才是查看“谁映射到谁”的权威命令。
执行查看命令
以 root 权限运行:
# semanage login -l
输出示例:
Login Name SELinux User MLS/MCS Range Service
__default__ unconfined_u s0-s0:c0.c1023 *
root unconfined_u s0-s0:c0.c1023 *
alice staff_u s0-s0:c0.c1023 *
说明:
-
Login Name是 Linux 用户名或通配符(如__default__表示未显式配置的用户) -
SELinux User是该登录名被映射到的 SELinux 用户身份 -
MLS/MCS Range是多级安全或多类别安全范围,影响数据隔离粒度 -
Service字段通常为*,表示适用于所有服务上下文
补充:想看 SELinux 用户本身的定义?
如果确实需要列出 SELinux 用户(而非映射关系),可用:
# semanage user -l
但注意:该命令显示的是策略中定义的 SELinux 用户类型(如 system_u、user_u),不包含任何 Linux 用户名信息,也不反映实际登录行为。日常排查权限问题时,优先关注 login -l 的结果。
验证映射是否生效
可结合 id -Z 查看当前用户的完整 SELinux 上下文:
$ id -Z
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
其中第一个字段(unconfined_u)就是由 semanage login 映射决定的 SELinux 用户。











