2、访问控制模型:DAC、MAC、RBAC

好,咱们今天聊聊访问控制模型。这三个缩写——DAC、MAC、RBAC——在座舱系统里几乎是天天打交道的东西。说白了,它们就是决定「谁能碰什么」的一套规则。

我刚开始做座舱系统那会儿,总觉得这玩意儿不就是个权限开关嘛,后来踩了坑才明白,选错模型,系统可能直接崩给你看。你想想看,飞机在天上飞,座舱显示系统要是被误操作改了关键参数,那可不是闹着玩的。

2.1 自主访问控制(DAC)

DAC 的全称是 Discretionary Access Control。翻译过来就是「自主」——资源的主人说了算。

核心思想:谁创建了文件或数据,谁就有权决定谁能访问它。比如我写了一份飞行计划,我可以选择让副驾驶看,不让观察员看。

在座舱系统里,DAC 其实挺常见的。举个例子:

  • 飞行员个人设置(座椅位置、显示亮度)——只有当前飞行员能改
  • 飞行日志文件——机长可以授权副驾驶查看
  • 临时航路修改——谁改的谁负责,其他人只能读

我个人的经验:DAC 最大的好处是灵活。我在做某型飞机的电子飞行包(EFB)时,就用了 DAC 模型让机长能快速共享航图给副驾驶。但注意,灵活也意味着风险——我曾经见过一个案例,机长不小心把敏感数据共享给了所有机组人员,结果数据泄露了。

避坑指南:DAC 不适合关键安全功能。比如发动机参数、飞行控制指令这些,绝对不能交给「自主」决定。我曾经在项目中看到有人把发动机推力数据设成了「所有人可写」——嗯,那是个大坑。

2.2 强制访问控制(MAC)

MAC 的全称是 Mandatory Access Control。这个就严格多了——系统说了算,用户没得选。

核心思想:每个主体(用户、进程)和客体(文件、数据)都有一个安全标签。系统根据标签的级别来决定是否允许访问。比如「绝密」级别的数据,只有「绝密」级别的用户才能看。

在座舱系统里,MAC 是安全底线。为什么?因为座舱系统涉及飞行安全,不能靠人的自觉性。

我举个例子:

  • 飞行关键参数(空速、高度、姿态)——标签为「关键安全」,只有飞行控制模块能写
  • 导航数据库——标签为「高完整性」,只有经过签名的更新才能写入
  • 乘客娱乐系统——标签为「低安全」,不能访问任何飞行数据
安全级别 示例数据 可写主体 可读主体
绝密 飞行控制算法 飞控计算机 飞控计算机、安全审计
机密 导航数据库 导航系统、签名的更新 所有飞行系统
内部 飞行日志 机组人员 机组人员、地面维护
公开 乘客信息 客舱系统 所有人

我建议:在座舱系统里,MAC 是必须的。尤其是 ARINC 653 分区操作系统里,每个分区都有固定的安全级别,分区之间不能越界访问。我记得有一次调试,一个分区试图读取另一个分区的内存,直接被操作系统拦截了——这就是 MAC 在起作用。

为什么会这样?因为座舱系统要满足 DO-178C 的安全要求。MAC 模型能保证即使某个分区被攻破,攻击者也拿不到高安全级别的数据。

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

RBAC 的全称是 Role-Based Access Control。这个是目前最常用的模型——权限不直接给用户,而是给角色,用户通过扮演角色来获得权限。

核心思想:你是什么角色,就有什么权限。比如「机长」角色可以执行起飞操作,「副驾驶」角色只能辅助操作,「乘务员」角色根本碰不到飞行控制。

在座舱系统里,RBAC 是管理权限的利器。我参与过一个项目,座舱系统里有几十种操作权限,如果每个用户单独配,那维护成本高得吓人。用 RBAC 就简单了:

  • 定义角色:机长、副驾驶、观察员、地面维护、客舱乘务员
  • 给角色分配权限:机长有全部权限,副驾驶有部分权限,观察员只有只读权限
  • 把用户分配到角色:今天飞这趟航班的是张三机长、李四副驾驶

我个人的习惯:RBAC 的粒度要把握好。太粗了,比如「机长」什么都能干,那万一机长误操作怎么办?太细了,比如「机长」有 200 个权限,管理起来也麻烦。我一般建议按功能域划分,比如「飞行控制权限」「导航权限」「通信权限」「客舱管理权限」。

举个例子,一个典型的 RBAC 配置:

角色: 机长
  权限:
    - 飞行控制: 全部(起飞、降落、自动驾驶)
    - 导航: 全部(修改航路、切换导航源)
    - 通信: 全部(切换频率、发送消息)
    - 系统设置: 全部(校准、配置)

角色: 副驾驶
  权限:
    - 飞行控制: 部分(不能执行起飞、降落)
    - 导航: 全部
    - 通信: 全部
    - 系统设置: 只读

角色: 观察员
  权限:
    - 飞行控制: 只读
    - 导航: 只读
    - 通信: 只读
    - 系统设置: 无

我曾经踩过的坑:RBAC 的「角色继承」要小心。比如「机长」继承「副驾驶」的所有权限,再加一些额外权限。听起来合理,但如果你不小心把「副驾驶」的权限改了,机长的权限也跟着变了。我建议用扁平的角色结构,别搞太复杂的继承关系。

2.4 三种模型的对比与选择

好了,三种模型都讲完了。你可能会问:到底用哪个?

我的建议是:

  • DAC:适合非关键、需要灵活性的场景。比如个人设置、临时数据共享。但别用在安全关键功能上。
  • MAC:适合安全关键、需要强制隔离的场景。比如飞行控制、导航数据、安全审计。这是座舱系统的底线。
  • RBAC:适合权限管理复杂、需要角色划分的场景。比如机组人员权限管理、地面维护权限。这是日常操作的主力。

实际项目中,往往是三种模型混用。比如座舱系统里:

  • 核心飞行数据用 MAC 保护,谁都不能乱改
  • 机组人员操作权限用 RBAC 管理,不同角色不同权限
  • 个人设置用 DAC,飞行员自己说了算

我最后说一句:选模型之前,先搞清楚你的安全需求。座舱系统里,安全永远是第一位的。灵活性和易用性可以往后放。你想想看,飞机在天上,系统出个权限漏洞,那后果...嗯,我不说你也懂。

好,这一章就到这儿。下一章咱们聊聊「安全审计与日志管理」,看看怎么把谁干了什么都记下来。