--- title: "SE Linux Enforcing Mode" type: concept tags: - Security - Linux - MAC - Access Control sources: - public-cloud-learning-sessions-eks-optimization-part-2-of-3-running-containers-w last_updated: 2026-04-24 --- # SE Linux Enforcing Mode SE Linux(Security-Enhanced Linux)是美国国家安全局(NSA)开发的 Linux 内核安全模块,通过强制访问控制(MAC,Mandatory Access Control)机制,在传统的自主访问控制(DAC,Discretionary Access Control)之上增加了一层细粒度的安全策略。 ## DAC vs MAC | 维度 | DAC(传统 Linux 权限) | MAC(SE Linux) | |------|----------------------|----------------| | 控制方式 | 所有者自主决定 | 系统统一策略强制执行 | | 粒度 | 用户/组/其他 + rwx | 主体标签 + 客体标签 + 策略规则 | | 绕过风险 | root 可修改任何权限 | 即使 root 也受策略约束 | | 配置难度 | 简单(chmod/chown) | 复杂(需要策略编写) | ## 关键概念 - **主体(Subject)**:进程,通常具有特定的安全上下文(如 `system_u:system_r:container_file_t`) - **客体(Object)**:文件、目录、端口、进程等系统资源 - **安全上下文(Security Context)**:格式为 `user:role:type[:level]` 的标签字符串 - **策略规则(Policy Rules)**:定义哪些主体可以对哪些客体执行哪些操作的规则集合 - **Enforcing 模式**:强制执行策略,违反策略的操作被拒绝并记录 - **Permissive 模式**:仅记录违反策略的操作,不实际阻止 ## Bottlerocket 中的 SE Linux Bottlerocket OS 默认启用 SE Linux enforcing 模式: - **容器隔离**:每个容器运行在独立的安全上下文中,防止容器逃逸后影响宿主机或其他容器 - **最小权限原则**:即使容器内获得 root 权限,其操作仍受 SE Linux 策略限制 - **与容器运行时集成**:containerd、docker 等容器运行时通过 SE Linux 标签隔离不同容器的工作负载 ## 常见 SE Linux 标签 | 标签 | 用途 | |------|------| | `unconfined_t` | 不受限制的进程 | | `container_file_t` | 容器管理的文件(如 volume 挂载点) | | `svirt_sandbox_file_t` | SELinux 虚拟沙箱文件标签 | | `admin_t` | 系统管理员类型 | ## 与其他安全机制的协同 - **与 AppArmor**:AppArmor 是 SE Linux 的替代方案,Ubuntu 默认使用 AppArmor - **与 seccomp**:seccomp 限制进程可调用的系统调用,SE Linux 控制对系统对象的访问 - **与 capabilities**:Linux capabilities 将 root 特权拆分为多个独立能力,SE Linux 在此基础上进一步限制能力的使用场景 ## 故障排查 SE Linux enforcing 模式下,常见故障表现为"Permission denied"即使文件权限看起来正确: ```bash # 查看文件的安全上下文 ls -Z /path/to/file # 查看进程的 SE Linux 上下文 ps -Z # 临时切换为 Permissive 模式(调试用) setenforce 0 # 查看 SE Linux 拒绝日志 ausearch -m avc -ts recent ```