温馨提示×

Ubuntu SELinux用户权限管理

小樊
39
2025-11-24 19:08:39
栏目: 智能运维

Ubuntu 上的 SELinux 用户权限管理

一 核心概念与工作机制

  • SELinux 在 Ubuntu 上提供 强制访问控制 MAC,与传统的 DAC(rwx/ACL) 并行工作;访问是否放行取决于 安全上下文策略规则 的同时满足。安全上下文格式为:USER:ROLE:TYPE[LEVEL[:CATEGORY]],常用命令如 ls -Z / ps -Z / id -Z 可查看。SELinux 的 用户(USER) 与 Linux 系统用户不同,它用于 MAC 标记与授权;角色(ROLE) 用于约束用户可进入的 域(TYPE),而真正的访问许可主要由 类型强制 TE 规则授予,RBAC 起到“限制谁能进入哪些域”的作用。常见映射示例:root 登录常见为 root:sysadm_r:sysadm_t普通用户常见为 user_u:user_r:user_t;登录会话的 SELinux 用户身份在切换用户时保持不变,便于审计与约束。

二 启用与基础配置

  • Debian/Ubuntu 上,SELinux 通常未预装,需先安装并启用:
    • 安装组件:sudo apt-get install selinux-basics selinux-policy-default
    • 启用 SELinux(安装器会提示执行):sudo selinux-activate
    • 配置模式:编辑 /etc/selinux/config,设置 SELINUX=enforcing(或 permissive 用于排错;disabled 需重启且不建议)
    • 如安装器未自动配置引导,可在 /etc/default/grubGRUB_CMDLINE_LINUX 中添加 security=selinux,执行 sudo update-grub 后重启
    • 运行时切换:sudo setenforce 1(Enforcing)或 sudo setenforce 0(Permissive);getenforce 查看当前模式,sestatus 查看详细状态
  • 提示:从 Disabled 切换到 Enforcing/Permissive 通常需要重启;生产环境建议先在 Permissive 下观察日志再切到 Enforcing

三 用户映射与角色权限控制

  • 管理 Linux 用户到 SELinux 用户的映射(决定该登录会话的 SELinux 用户身份):
    • 查看映射:sudo semanage login -l
    • 新增映射(将系统用户 dev_user 映射为 user_u,默认 MLS/MCS 范围 s0):sudo semanage login -a -s user_u dev_user
    • 修改/删除:sudo semanage login -m -s staff_u dev_usersudo semanage login -d dev_user
  • 管理 SELinux 用户及其允许的角色(决定该 SELinux 用户可承担的角色集合):
    • 查看:sudo semanage user -l
    • 新增 SELinux 用户(示例:名称为 tcxa_u,前缀 user 表示登录用户类,允许角色 system_r,MLS/MCS 范围 s0):sudo semanage user -a -L s0 -r "s0" -P user -R system_r tcxa_u
    • 删除:sudo semanage user -d tcxa_u
  • 角色与域的关系及切换:
    • 常见角色:user_r、staff_r、sysadm_r、system_r、unconfined_r;常见登录类 SELinux 用户:root、staff_u、sysadm_u、system_u、unconfined_u、user_u
    • 角色切换:用户只有在被允许的角色集合中,才能通过 newrole/runcon 等方式切换角色;可用 seinfo -r <role> -x 查看某角色可进入的域集合,以评估权限边界。

四 常见运维任务与排错

  • 文件/进程上下文查看与修复:
    • 查看:ls -Z /pathps -Z -C <proc>id -Z
    • 修复目录默认上下文:sudo restorecon -Rv /opt/webapps
    • 临时修改(谨慎):sudo chcon -t httpd_sys_content_t /var/www/html/index.html
  • 动态策略与端口管理:
    • 布尔值(服务特性开关,加 -P 持久化):getsebool -a | grep httpdsudo setsebool -P httpd_can_network_connect on
    • 端口类型:sudo semanage port -l | grep http_port_tsudo semanage port -a -t http_port_t -p tcp 8080
  • 日志分析与最小权限策略生成:
    • 查看拒绝日志:sudo ausearch -m AVC -ts recent
    • 生成并加载本地策略模块:grep "avc: denied" /var/log/audit/audit.log | audit2allow -M mypolicy && sudo semodule -i mypolicy.pp
  • 故障排查要点:
    • 同时检查 DAC(rwx/ACL)SELinux(上下文/策略);优先用 Permissive 模式验证是否为 SELinux 导致
    • 谨慎使用 chcon,优先通过 semanage fcontext + restorecon 持久修复上下文
    • 修改策略/映射前备份 /etc/selinux 与关键配置,变更后逐步回归 Enforcing

0