DAC 管基础CAP 补 DACLSM 管全局最终决策。DAC 先过 → CAP 兜底 → LSM 最后把关CapabilityCAPLinux 原生特权拆分机制不属于 LSM 框架LSM内核安全钩子框架用于实现 MACSELinux/AppArmor 等DACDiscretionary Access Control本质主体客体的身份匹配 权限位许可是操作系统最基础的自主权限规则。主体进程 UID/GID客体文件 inode 的 UID/GID、rwx、ACL特点所有者自主决定权限控制松散。CAPCapability本质对 root 特权的细粒度拆分是 DAC 检查失败时的豁免机制。不是独立权限层而是DAC 的补丁与兜底让进程不必持有完整 root 即可绕过部分 DAC 限制核心CAP_DAC_OVERRIDE、CAP_DAC_READ_SEARCHLSMLinux Security Module本质内核提供的强制访问控制MAC框架钩子是权限检查的最终防线。提供安全策略扩展接口无论 DAC/CAP 是否通过LSM 都可最终拒绝实现SELinux、AppArmor、Landlock 等核心对比维度DAC自主访问控制CAP能力LSM安全模块全称Discretionary Access ControlCapabilityLinux Security Module本质传统 UGO/rwx、ACL超级权限细粒度拆分强制访问控制MAC框架检查顺序最先检查DAC 失败时才检查兜底最后检查最终防线控制权文件所有者可自由分配权限系统 / 管理员分配进程能力安全策略强制管控用户无法绕过代表实现文件权限位、POSIX ACLCAP_DAC_OVERRIDE等SELinux、AppArmor、Landlock作用基础权限隔离避免全局 root精细化特权强制策略最小权限、安全增强失败处理失败则进入 CAP 检查无对应 CAP 则权限拒绝失败则直接拒绝访问标准检查顺序文件访问场景开始 ↓ DAC 检查 ├─── 通过 → 去 LSM └─── 失败 → 查 CAP ├─── 有 CAP → 去 LSM └─── 无 CAP → 拒绝 ↓ LSM 检查 ├─── 通过 → 允许 └─── 失败 → 拒绝前置检查文件系统只读、文件不可变等基础校验IS_RDONLY/IS_IMMUTABLE。文件系统自定义权限钩子如 Ext4 加密。DAC 检查自主访问控制核心generic_permission()fs/namei.c。流程匹配进程fsuid/gid与文件uid/gid取出对应权限位owner/group/other。检查 POSIX ACL若启用。权限位与操作掩码mask匹配校验。结果DAC 不通过 → 进入 CAP 能力覆盖检查。CAP 能力覆盖Capability Override仅在DAC 失败时触发。关键能力CAP_DAC_OVERRIDE完全绕过文件 DAC 检查读 / 写 / 执行。CAP_DAC_READ_SEARCH仅允许目录读 / 搜索绕过对应 DAC 限制。逻辑capable_wrt_inode_uidgid(..., CAP_DAC_OVERRIDE)→ 具备则直接通过返回 0。LSM 检查强制访问控制入口security_inode_permission()security/security.c。触发时机DAC CAP 均通过后才执行 LSM 钩子如 SELinux/AppArmor。逻辑遍历所有注册的 LSM 模块执行策略检查任一模块拒绝则返回-EACCES。完整调用链以open为例sys_openat └── may_open └── inode_permission ├── 文件系统自定义权限如Ext4 └── __inode_permission ├── do_inode_permission │ ├── generic_permissionDAC │ │ ├── UID/GID匹配 权限位检查 │ │ ├── POSIX ACL检查 │ │ └── 【DAC失败 → 检查CAP_DAC_OVERRIDE】 │ └── 【DAC/CAP通过 → 继续】 └── security_inode_permissionLSM └── 执行SELinux/AppArmor等策略检查关键结论顺序固定DAC 优先 → CAP 覆盖仅 DAC 失败时 → LSM 最后。CAP 是 DAC 的旁路不是独立检查层仅用于绕过 DAC 限制。LSM 是最终防线即使 DAC/CAP 都通过LSM 仍可拒绝访问。mmap 例外已修复内核 3.15 统一为 DAC→CAP→LSM 顺序。