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 的三种扩展模型
- RBAC0:基础模型,用户-角色-权限三层
- RBAC1:引入角色继承,如“高级管理员”继承“普通管理员”的权限
- RBAC2:引入约束,如“一个人不能同时担任出纳和会计”
我的建议:大多数企业用 RBAC0 就够了。角色继承和约束虽然强大,但容易把权限体系搞成蜘蛛网。我曾经见过一个客户,角色继承链长达 7 层,最后谁也说不清某个用户到底有什么权限。
4.4 三种模型对比
| 维度 | DAC | MAC | RBAC |
|---|---|---|---|
| 控制主体 | 资源所有者 | 系统安全策略 | 角色管理员 |
| 灵活性 | 高 | 低 | 中 |
| 安全性 | 低 | 高 | 中高 |
| 管理复杂度 | 低 | 高 | 中 |
| 适用场景 | 个人桌面、小团队 | 军事、政府、金融核心 | 企业、云平台、SaaS |
| 防提权能力 | 弱 | 强 | 中 |
4.5 实际选型建议
你可能会问:那我到底该用哪个?我个人的经验是分三步走:
- 先看安全等级:涉密系统直接上 MAC,别犹豫
- 再看用户规模:超过 100 人,RBAC 是首选
- 最后看运维能力:团队小、技术弱,DAC 凑合用,但要做好审计
避坑提醒:不要试图在一个系统里混用多种模型。我见过有人把 DAC 和 RBAC 混在一起用,结果权限冲突,用户一会儿能访问一会儿不能访问。选一种,用到底。
4.6 三种模型关系图
下面这张图展示了 DAC、MAC、RBAC 在安全性与灵活性之间的定位关系:
4.7 小结
三种模型没有绝对的好坏,关键看场景。DAC 适合小团队快速上手,MAC 适合高安全环境,RBAC 是企业级应用的主流选择。我个人最常用的是 RBAC,配合定期权限审计,基本能覆盖 90% 的防入侵需求。
嗯,记住一点:访问控制模型不是配完就完事的。我每季度都会做一次权限复盘,看看有没有角色膨胀、权限滥用的情况。持续校验,才能让模型真正发挥作用。