本文解释SEAndroid策略里面的DAC和MAC。
DAC
在 SELinux 出现之前,Linux 上的使用的安全模型是 DAC( Discretionary Access Control 自主访问控制)。
- DAC 的核心思想:进程理论上所拥有的权限与执行它的用户的权限相同
- 例如,以 root 用户启动 Browser,那么 Browser 就有 root 用户的权限,在 Linux 系统上能干任何事情
显然,DAC 管理太过宽松,只要想办法在系统上获取到 root 权限就可以了。
MAC
所以后面有了 SELinux,在 DAC 之外,SELinux设计了一种新的安全模型,叫 MAC(Mandatory Access Control 强制访问控制)。
- MAC 的核心思想也很简单:任何进程想在 SELinux 系统上干任何事情,都必须在《安全策略文件》中赋予权限
- 即要求系统对每一项访问都进行严格的限制和验证,具体的限制和验证策略(policy)由开发者给出, 即需要明确的指明某个进程可以访问哪些资源(文件、网络端口,属性等)
MAC可以明显弥补DAC的缺陷。如可限制Root权限,即使你有root权限(将军),如果无法通过MAC验证(圣旨授权),那么一样的无法真正执行相关的操作。
另外MAC对每一项权限进行了更加完整的细化,可限制用户对资源的访问行为。在Linux Kernel,所有的MAC机制都是搭建在Linux Security Modules(LSM)基础上,目前SELinux已经成了事实上的行业标准。
Linux 系统会先做 DAC 检查,如果没有通过 DAC 权限检查,则操作直接失败。通过 DAC 检查之后,再做 MAC 权限检查。