SELinux如何管理用户权限
导读:SELinux 用户权限管理 核心模型与关键概念 SELinux 通过给每个 Linux 用户映射一个 SELinux 用户(以 _u 结尾),并由该 SELinux 用户所关联的 角色(以 _r 结尾) 决定可进入的 域(以 _t 结尾...
SELinux 用户权限管理
核心模型与关键概念
- SELinux 通过给每个 Linux 用户映射一个 SELinux 用户(以 _u 结尾),并由该 SELinux 用户所关联的 角色(以 _r 结尾) 决定可进入的 域(以 _t 结尾),从而施加访问控制。登录后用户的 SELinux 用户身份不可更改,但角色与域可在策略允许的范围内转换。进程的安全上下文形如:user_u:user_r:user_t。系统内置常见 SELinux 用户包括:unconfined_u、guest_u、xguest_u、user_u、staff_u、sysadm_u、system_u;其中 system_u 专用于系统进程与对象,禁止分配给 Linux 用户。未受限用户仍受 可执行/可写内存检查 与 MCS/MLS 约束。
查看与映射管理
- 查看当前 Linux 用户到 SELinux 用户的映射:
- 命令:
semanage login -l(需要 root) - 示例输出:
Login Name SELinux User MLS/MCS Range Service __default__ unconfined_u s0-s0:c0.c1023 * root unconfined_u s0-s0:c0.c1023 * - 含义:未显式映射的 Linux 用户默认走 default → unconfined_u。
- 命令:
- 查看可用的 SELinux 用户及其默认角色/范围:
- 命令:
semanage user -l
- 命令:
- 将 Linux 用户映射到指定的 SELinux 用户(示例将 alice 映射为 staff_u):
- 命令:
semanage login -a -s staff_u alice
- 命令:
- 验证登录后的 SELinux 身份:
- 命令:
id -Z(应见形如:staff_u:staff_r:staff_t:…)
- 命令:
- 注意:登录会话建立后,SELinux 用户身份不会改变;如需调整,需重新登录或按策略定义的转换流程进行。
角色与权限控制
- SELinux 的权限最终由“类型强制(TE)”决定,角色是连接用户与域的桥梁。常用角色与典型能力如下(不同发行版/策略细节可能略有差异):
| 角色 | 典型域 | 关键能力/限制 |
|---|---|---|
| unconfined_r | unconfined_t | 几乎不受限;仍受 execmem/writable memory 与 MCS/MLS 检查 |
| guest_r | guest_t | 不能访问网络;可在 /tmp 与 /home 执行 |
| xguest_r | xguest_t | 可登录 X;仅允许浏览器网络访问;可在 /tmp 与 /home 执行 |
| user_r | user_t | 常规非特权用户;可在 /tmp 与 /home 执行 |
| staff_r | staff_t | 类似 user_r,且可通过 sudo 执行管理命令(角色切换但 SELinux 用户不变) |
| sysadm_r | sysadm_t | 系统管理域;需显式授权与策略支持 |
- 重要限制与布尔开关:
- guest_t、xguest_t、user_t 默认仅能运行策略允许的 setuid 程序(如 passwd);这些域默认不能运行 su/sudo,因此不能借此提权为 root。
- 默认情况下,staff_t、user_t、guest_t、xguest_t 可在其 $HOME 与 /tmp 执行程序;可通过布尔值收紧,例如将 guest_exec_content、xguest_exec_content 设为 off,阻止在可写目录执行。
- xguest_r 的网络通常限制为浏览器访问;相关布尔如 xguest_connect_network 可开关其网络能力。
- 列出与查看布尔值:
semanage boolean -l(需 root)。
常见管理操作与示例
- 将普通用户改为受限用户(示例:把 bob 映射为 user_u):
- 映射:
semanage login -a -s user_u bob - 验证:
id -Z(应见 user_u:user_r:user_t:…)
- 映射:
- 允许受限用户通过 sudo 执行管理命令(以 staff_u 为例):
- 在
/etc/sudoers或/etc/sudoers.d/中为相应用户配置允许的规则;当 staff_t 使用 sudo 时,策略可使其切换到 sysadm_r 并执行 sysadm_t 域的管理命令(是否允许、如何切换由策略与 sudoers 共同决定)。
- 在
- 收紧“在可写目录执行”的风险(示例:禁止 xguest 在可写目录执行):
- 关闭布尔:
setsebool -P xguest_exec_content off - 说明:关闭后,xguest 将无法在其有写权限的目录中执行程序,降低被恶意代码利用的风险。
- 关闭布尔:
- 排查访问被拒问题:
- 查看 SELinux 状态与布尔:
sestatus -v -b - 检查用户/角色/域映射:
semanage login -l、semanage user -l - 观察 AVC 拒绝日志(使用
ausearch -m avc -ts recent或journalctl -xe),必要时临时切换为 permissive 模式进行验证(生产环境谨慎)。
- 查看 SELinux 状态与布尔:
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: SELinux如何管理用户权限
本文地址: https://pptw.com/jishu/781868.html
