Files
nexus/wiki/concepts/SE-Linux-Enforcing.md

75 lines
3.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 LinuxSecurity-Enhanced Linux是美国国家安全局NSA开发的 Linux 内核安全模块通过强制访问控制MACMandatory Access Control机制在传统的自主访问控制DACDiscretionary Access Control之上增加了一层细粒度的安全策略。
## DAC vs MAC
| 维度 | DAC传统 Linux 权限) | MACSE 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
```