温馨提示×

Ubuntu SELinux如何支持多用户

小樊
51
2025-09-21 02:49:57
栏目: 智能运维

SELinux对Ubuntu多用户的支持机制与配置
SELinux(Security-Enhanced Linux)通过强制访问控制(MAC)模型,在Ubuntu系统中为多用户环境提供更细粒度的安全隔离。其核心设计是通过安全上下文(Security Context)角色-based访问控制(RBAC),确保不同用户的进程和资源相互隔离,防止单个用户的未授权操作影响其他用户或系统安全。

1. SELinux用户与Linux用户的映射:隔离基础

SELinux中的SELinux用户(如user_ustaff_u)与Linux系统用户(如lisatestuser)是分离的。多个Linux用户可映射到同一个SELinux用户,但SELinux用户决定了用户能承担的角色和访问权限范围。

  • 配置命令:使用semanage login命令将Linux用户映射到SELinux用户。例如,将用户lisa映射到staff_u(允许更多权限),将users组的用户映射到user_u(限制更多):
    sudo semanage login -a -s staff_u lisa      # 单个用户映射
    sudo semanage login -a -s user_u %users     # 组用户批量映射(%表示组)
    
  • 生效要求:修改映射后,需强制注销相关用户(pkill -KILL -u lisa)使新映射生效,同时重置用户主目录上下文(restorecon -RF /home/lisa)以避免上下文冲突。

2. 角色与权限控制:限制用户行为边界

SELinux通过**角色(Role)**进一步限制SELinux用户的权限。每个SELinux用户关联一个或多个角色(如user_rstaff_r),角色定义了用户能执行的进程域(Domain)。例如:

  • user_u用户通常关联user_r角色,只能运行普通用户进程(如bashfirefox);
  • staff_u用户可关联staff_r角色,允许运行部分管理任务(如sudo)。
  • 查看角色分配:使用semanage login -l查看用户与SELinux用户的映射及角色:
    sudo semanage login -l
    # 输出示例:Login Name           SELinux User         MLS/MCS Range        Service
    # __default__            user_u               s0                   *
    # lisa                   staff_u              s0-s0:c0.c4          *
    

3. 安全上下文:资源访问的最小权限

每个文件、目录和进程都有安全上下文(格式:USER:ROLE:TYPE:LEVEL[:CATEGORY]),其中USER对应SELinux用户,ROLE对应角色,TYPE定义资源类型(如user_home_t表示用户家目录)。SELinux通过比较进程上下文与资源上下文,决定是否允许访问。

  • 设置文件上下文:使用semanage fcontext添加自定义上下文规则,用restorecon恢复默认上下文。例如,限制用户user1只能访问/home/user1/documents目录:
    sudo semanage fcontext -a -t user_home_t "/home/user1/documents(/.*)?"  # 添加规则
    sudo restorecon -Rv /home/user1/documents                               # 恢复上下文
    
  • 查看上下文:使用ls -Z查看文件/目录上下文,ps -eZ查看进程上下文。

4. 多租户隔离:敏感度与类别控制

对于需要更严格隔离的多租户环境(如托管多个客户的服务器),可通过**敏感性(sensitivity)类别(category)**实现。例如:

  • 将不同租户的进程分配到不同敏感性级别(如s0s1),通过MLS(多级安全)策略限制低敏感性进程访问高敏感性资源(遵循“禁止向上读取、禁止向下写入”原则);
  • 用**类别(c0.c4)**划分租户,同一租户的进程和资源分配相同类别,不同租户的类别不同,确保进程无法跨租户访问资源。
  • 配置示例:将users组用户映射到staff_u,并限制敏感性范围为s0-s0:c0.c4
    sudo semanage login -m -s staff_u -r "s0-s0:c0.c4" %users
    

5. 日志与故障排查:解决权限问题

当用户因SELinux策略被拒绝访问时,需通过日志定位问题:

  • 查看拒绝日志:使用ausearch命令过滤AVC(访问控制拒绝)消息:
    sudo ausearch -m avc -ts recent  # 查看近期拒绝事件
    
  • 生成修复策略:使用audit2allow根据日志生成自定义策略(谨慎使用,避免过度放宽权限):
    sudo ausearch -m avc -ts recent | audit2allow -M mypolicy  # 生成策略模块
    sudo semodule -i mypolicy.pp                             # 安装模块
    

通过以上配置,SELinux在Ubuntu中实现了多用户的安全隔离:不同用户通过SELinux用户映射到不同角色,进程和资源的上下文限制了访问范围,多租户环境可通过敏感度和类别进一步隔离。这种机制既保证了多用户的正常使用,又提升了系统的整体安全性。

0