温馨提示×

Ubuntu SELinux应用隔离原理

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

Ubuntu 上 SELinux 的应用隔离原理

一 核心机制概述

  • 强制访问控制 MAC 叠加在 DAC 之上:Linux 传统的 **DAC(用户/组/权限位)**是第一道检查;SELinux 作为 MAC 是第二道检查,即使进程以 root 身份运行,也必须被策略允许才能访问对象。这样将应用权限收敛到“最小必要”。在 Ubuntu 上,系统默认使用 AppArmor,但可安装并启用 SELinux 实现同类隔离能力。SELinux 通过在内核的 LSM(Linux Security Modules) 框架中实施策略检查来达成这一点。

二 标签 域与策略的工作方式

  • 安全上下文标签:每个进程、文件、目录、端口等都带有 安全上下文,典型格式为 user:role:type:level(可选)。其中用于访问控制的关键是 type(进程为“域”domain,文件等为“类型”type)。示例:httpd_t(进程域)、httpd_sys_content_t(只读内容文件类型)、http_port_t(端口类型)。
  • 类型强制 TE:策略以“源域-目标类型-权限”的规则描述允许关系。只有同时满足 DACSELinux 策略 时访问才被放行;否则被拒绝并记录 AVC 拒绝日志
  • 最小权限实践:常见服务会被放入专属域(如 httpd_t),只能访问与其职责匹配的 type(如内容文件 httpd_sys_content_t、日志 httpd_log_t、配置 httpd_config_t 等),从而实现进程与资源的细粒度隔离。

三 运行模式与系统开关

  • 三种模式Enforcing(强制执行,违规阻断并记录)、Permissive(仅记录不阻断,便于排错)、Disabled(完全关闭)。可用 getenforce/setenforce 查看/切换,/etc/selinux/config 配置默认模式;内核启动参数 enforcing=0selinux=0 可分别用于临时/永久调整。
  • 标签与重标记:新文件通常继承父目录标签;若系统标签紊乱,可创建 /.autorelabel 并重启以触发 自动重标记,或使用 touch /.autorelabel && reboot。这些机制保证标签体系与策略一致,从而维持隔离效果。

四 在 Ubuntu 上的启用与验证步骤

  • 安装与启用:在 Ubuntu 上安装 selinux-basics、selinux-utils 等包,按需配置 /etc/selinux/configSELINUX=enforcing|permissive,并使用 setenforce 1 切换到强制模式;随后重启相关服务/系统。
  • 常用检查命令:使用 sestatus 查看整体状态;ls -Z、ps -Z、id -Z 查看文件、进程、用户的 安全上下文;遇到访问问题时,先检查 AVC 拒绝日志 定位是标签问题还是策略规则缺失。

五 典型场景与注意事项

  • 服务最小权限示例:以 Apache 为例,进程域 httpd_t 只能按策略访问与其匹配的 type(如 httpd_sys_content_t 只读、httpd_log_t 写入、http_port_t 绑定),即使以 root 运行也无法越权访问其他类型对象,实现进程与系统资源的隔离边界。
  • 容器与多租隔离:在容器场景(如 Docker)中,SELinux 会给容器进程与卷打上如 container_t/container_file_t 等标签,限制容器只能访问被授权的卷与资源;若使用 –privileged 特权容器,会绕过 SELinux 限制,应谨慎使用。
  • 排错思路:遇到 “Permission denied” 且 DAC 正确时,优先检查对象的 安全上下文标签 与对应 策略规则 是否匹配,必要时在 Permissive 模式下收集 AVC 日志并修正标签或策略。

0