当前位置: 首页 > news >正文

dac/cap/lsm

DAC 管基础,CAP 补 DAC,LSM 管全局最终决策。

DAC 先过 → CAP 兜底 → LSM 最后把关

Capability(CAP):Linux 原生特权拆分机制,不属于 LSM 框架

LSM:内核安全钩子框架,用于实现 MAC(SELinux/AppArmor 等)

DAC(Discretionary Access Control)

本质:主体客体的身份匹配 + 权限位许可,是操作系统最基础的自主权限规则。

  • 主体:进程 UID/GID
  • 客体:文件 inode 的 UID/GID、rwx、ACL
  • 特点:所有者自主决定权限,控制松散。

CAP(Capability)

本质:对 root 特权的细粒度拆分,是 DAC 检查失败时的豁免机制。

  • 不是独立权限层,而是DAC 的补丁与兜底
  • 让进程不必持有完整 root 即可绕过部分 DAC 限制
  • 核心:CAP_DAC_OVERRIDECAP_DAC_READ_SEARCH

LSM(Linux 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_OVERRIDESELinux、AppArmor、Landlock
作用基础权限隔离避免全局 root,精细化特权强制策略,最小权限、安全增强
失败处理失败则进入 CAP 检查无对应 CAP 则权限拒绝失败则直接拒绝访问

标准检查顺序(文件访问场景)

开始 ↓ DAC 检查 ├─── 通过 → 去 LSM └─── 失败 → 查 CAP ├─── 有 CAP → 去 LSM └─── 无 CAP → 拒绝 ↓ LSM 检查 ├─── 通过 → 允许 └─── 失败 → 拒绝

前置检查

  • 文件系统只读、文件不可变等基础校验(IS_RDONLY/IS_IMMUTABLE)。
  • 文件系统自定义权限钩子(如 Ext4 加密)。

DAC 检查(自主访问控制)

  • 核心:generic_permission()fs/namei.c)。
  • 流程:
    1. 匹配进程fsuid/gid与文件uid/gid,取出对应权限位(owner/group/other)。
    2. 检查 POSIX ACL(若启用)。
    3. 权限位与操作掩码(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_permission(DAC) │ │ ├── UID/GID匹配 + 权限位检查 │ │ ├── POSIX ACL检查 │ │ └── 【DAC失败 → 检查CAP_DAC_OVERRIDE】 │ └── 【DAC/CAP通过 → 继续】 └── security_inode_permission(LSM) └── 执行SELinux/AppArmor等策略检查

关键结论

  • 顺序固定DAC 优先 → CAP 覆盖(仅 DAC 失败时) → LSM 最后
  • CAP 是 DAC 的旁路:不是独立检查层,仅用于绕过 DAC 限制。
  • LSM 是最终防线:即使 DAC/CAP 都通过,LSM 仍可拒绝访问。
  • mmap 例外已修复:内核 3.15+ 统一为 DAC→CAP→LSM 顺序。
http://www.cnnetsun.cn/news/1348940.html

相关文章:

  • Rust impl关键字实战:从封装到多态的全面解析
  • 别再滥用dynamic了!C#动态类型避坑指南与性能优化技巧
  • 从零到一:基于MaxKB与Ollama构建企业级私有化智能知识库
  • LayUI树形下拉选择器实战:5分钟搞定权限管理菜单的动态加载
  • #训练营# 基于GD32E230与CH342F的便携式多功能调试工具:简易示波器+双串口+交换机Console(DB9/蓝牙)
  • CLIP-GmP-ViT-L-14开源大模型教程:CLIP-GmP变体本地化图文评估新范式
  • 图图的嗨丝造相-Z-Image-Turbo实战落地:短视频团队日更100+张风格统一渔网袜封面图方案
  • Github贡献图变身贪吃蛇:自动化工作流配置全解析
  • Flutter嵌入式ARM64 Linux应用实战:从交叉编译到真机部署
  • MusePublic在电商场景的应用:快速生成商品模特图与时尚海报
  • 快速上手:使用Docker Compose一键部署LiuJuan模型及WebUI
  • 收下这6款消除背景工具,让你的PPT、海报、电商图都能再上台阶。
  • 利用GStreamer和SRT协议实现低延迟视频推流与VLC播放实战
  • 深求·墨鉴在学术场景的应用:高效提取论文图表与公式
  • 十八、基于HC32F4A0与天空星开发板的PWM呼吸灯实战:从TimerA配置到占空比动态调节
  • OmenSuperHub:惠普OMEN游戏本专属系统优化工具
  • 产生死锁的四个必要条件
  • 避开conda限制:企业环境下Pinocchio与CasADi源码编译实战(含Docker方案)
  • 讯飞星火3.5API实战:从零搭建智能对话系统
  • 从零开始:使用Docker容器化部署n8n工作流自动化平台
  • 开源AI修图工具IOPaint:从零搭建到云端协作的全流程指南
  • Ruoyi权限管理避坑指南:为什么你的v-hasPermi不生效?8个常见问题排查
  • 从lsass.exe到密码泄露:深入理解Windows凭据存储机制与安全风险
  • QGIS实战:从县区边界到市区边界的无缝转换技巧
  • 从零开始搭建汽车电子Bootloader:UDS协议详解与常见问题排查
  • Vue父子组件通信避坑指南:用model选项实现三开关双向绑定
  • Llama-3.2V-11B-cot开发者指南:API接口设计、输入输出格式与错误处理详解
  • Qwen3-Reranker-8B内存优化:在16GB显卡上的部署方案
  • 户外设备防浪涌必看:为什么你的GDT+TVS方案总烧芯片?避坑指南
  • 基于STC15单片机与立创EDA的太阳能追光系统设计与实现