4. 访问控制模型:DAC、MAC、RBAC 原理与对比

说到设备防入侵,访问控制是绕不开的第一道门。我经常跟团队讲,你防火墙配得再花哨,如果访问控制模型选错了,那等于把钥匙挂在门口。今天咱们就把三种主流模型——DAC、MAC、RBAC——掰开揉碎了聊。

一句话先记住:DAC 是“谁的东西谁做主”,MAC 是“上级说了算”,RBAC 是“看角色不看人”。

4.1 DAC(自主访问控制)

DAC 的全称是 Discretionary Access Control。说白了,就是资源的主人自己决定谁能访问。你电脑上的文件,你想给谁读就给谁读,想删就删——这就是 DAC 的典型场景。

我在早期做内网文件共享服务器时,用的就是 DAC。每个部门建一个共享目录,部门经理自己设权限。听起来挺灵活对吧?但问题很快就来了。

DAC 的核心机制

  • 主体(Subject):发起访问的用户或进程
  • 客体(Object):被访问的资源(文件、目录、设备)
  • 权限(Access Right):读、写、执行、删除等
  • 所有权(Ownership):客体创建者自动获得所有权,可转让

我踩过的坑:有一次,某部门经理离职前把自己共享目录的所有权限都转给了实习生。结果实习生误删了整个项目文件夹。DAC 的灵活性是把双刃剑——权限可以随意传递,失控风险极高。

DAC 的优缺点

优点 缺点
实现简单,用户理解成本低 权限容易扩散,无法集中管控
灵活,适合个人桌面环境 无法防止木马程序利用用户权限
资源所有者自主决策 审计困难,权限变更无记录

4.2 MAC(强制访问控制)

MAC 的全称是 Mandatory Access Control。这玩意儿跟 DAC 完全反着来——权限不由资源主人决定,而是由系统安全策略统一强制。你想想看,军队、政府机密系统里,能让你随便传文件吗?

我记得有一次给某涉密单位做安全审计,他们用的就是 MAC。每个文件都打了标签:“绝密”“机密”“秘密”“内部”。用户也有对应的安全级别。低级别用户想读高级别文件?系统直接拒绝,连提示都不给。

MAC 的核心机制

  • 安全标签(Security Label):每个主体和客体都有固定标签
  • 格(Lattice)模型:基于“偏序关系”定义访问规则
  • Bell-LaPadula 模型:不读上、不写下(保密性)
  • Biba 模型:不读下、不写上(完整性)

注意:MAC 的配置复杂度极高。我曾经见过一个团队花了三个月才把一套 MAC 策略调通。一旦配错,要么系统崩了,要么该拦的没拦住。不是高安全场景,别轻易上 MAC。

MAC 的优缺点

优点 缺点
安全性最高,无法绕过策略 配置复杂,运维成本高
适合高保密、高完整场景 灵活性差,用户无法自主授权
防木马、防提权效果好 策略变更需要重新审批

4.3 RBAC(基于角色的访问控制)

RBAC 的全称是 Role-Based Access Control。这是目前企业里用得最多的模型。它的核心思想是:不直接给人授权,而是给角色授权,再把角色分配给用户。

我参与过一家大型电商平台的权限体系重构,用户数超过 5000 人。如果用 DAC,每个用户单独配权限,运维得疯掉。用 RBAC 之后,我们只定义了 12 个角色,覆盖了所有业务场景。嗯,这才是工程化的做法。

RBAC 的核心要素

  • 用户(User):实际的操作人员
  • 角色(Role):权限的集合,如“管理员”“审计员”“操作员”
  • 权限(Permission):对客体的操作许可
  • 会话(Session):用户激活角色的临时上下文

RBAC 的黄金法则:用户-角色-权限三层分离。角色是中间层,解耦了用户和权限的直接绑定。一个人离职了,只需移除角色关联,不用改权限本身。

RBAC 的三种扩展模型

  1. RBAC0:基础模型,用户-角色-权限三层
  2. RBAC1:引入角色继承,如“高级管理员”继承“普通管理员”的权限
  3. RBAC2:引入约束,如“一个人不能同时担任出纳和会计”

我的建议:大多数企业用 RBAC0 就够了。角色继承和约束虽然强大,但容易把权限体系搞成蜘蛛网。我曾经见过一个客户,角色继承链长达 7 层,最后谁也说不清某个用户到底有什么权限。

4.4 三种模型对比

维度 DAC MAC RBAC
控制主体 资源所有者 系统安全策略 角色管理员
灵活性 高 低 中
安全性 低 高 中高
管理复杂度 低 高 中
适用场景 个人桌面、小团队 军事、政府、金融核心 企业、云平台、SaaS
防提权能力 弱 强 中

4.5 实际选型建议

你可能会问:那我到底该用哪个?我个人的经验是分三步走:

  1. 先看安全等级:涉密系统直接上 MAC,别犹豫
  2. 再看用户规模:超过 100 人,RBAC 是首选
  3. 最后看运维能力:团队小、技术弱,DAC 凑合用,但要做好审计

避坑提醒:不要试图在一个系统里混用多种模型。我见过有人把 DAC 和 RBAC 混在一起用,结果权限冲突,用户一会儿能访问一会儿不能访问。选一种,用到底。

4.6 三种模型关系图

下面这张图展示了 DAC、MAC、RBAC 在安全性与灵活性之间的定位关系:

访问控制模型对比:安全性与灵活性 灵活性 → 安全性 → DAC 高灵活 · 低安全 MAC 低灵活 · 高安全 RBAC 中灵活 · 中高安全 选型建议 • 个人/小团队 → DAC • 涉密/高安全 → MAC • 企业/云平台 → RBAC ← 安全性优先 · 平衡区 · 灵活性优先 →

4.7 小结

三种模型没有绝对的好坏,关键看场景。DAC 适合小团队快速上手,MAC 适合高安全环境,RBAC 是企业级应用的主流选择。我个人最常用的是 RBAC,配合定期权限审计,基本能覆盖 90% 的防入侵需求。

嗯,记住一点:访问控制模型不是配完就完事的。我每季度都会做一次权限复盘,看看有没有角色膨胀、权限滥用的情况。持续校验,才能让模型真正发挥作用。