# 浅聊macOS中的Gatekeeper保护

- Link: https://www.xuepaijie.com/html/skill/coup/689.html
- Published: 2016-09-26T15:01:24+08:00
- Author: Admin

自从美洲狮开始，Apple引进了一个叫Gatekeeper的技术，用来保护系统免收外来Apps对系统
安全的破坏，这也是Apple所作出的技术上对付曾经爆发的被闪回感染的事件，详见苹果的官方
文档。

这个设置在System Preferences中的Security中给普通用户一个直观而简单的设置选项：

![Gatekeeper](https://www.xuepaijie.com/wp-content/uploads/2019/01/04b5d88fa75ebefd0ecda6b1141e3a17.
jpg)

在这里，给了用户两个苹果认为适合的安全选项，“所有Mac App商店下载的软件”都是认为安全
的，或者“Mac App商店下载以及特定的开发者的软件”被认可安全，因为每个在苹果注册的
开发人员都有一个特定的开发人员ID，并可以通过xcode环境对自己开发／发布的软件进行数字
签名，Mac系统可以读取／验证每个软件中的这个数字签名是否有效。

Gatekeeper看上去挺美，可是之通过上面的方式进行配置，是不适用企业环境的，或者说那
两个选项在企业环境中不够灵活。

首先，我们在部署或者重新安装系统的时候，目前普遍的方式都是核心系统影像+软件安装包
的形式。而核心影像最安全通用的方法也是直接从OS X的安装dmg文件获得，管理员没有机会
定Gatekeeper。

其次，每个企业环境不同，应用软件来源多种多样，不说旧的版本和获得渠道，就说即便是
新软件，每个人都可以从开发者那里直接购买，一是因为从App商店购买的软件都是Apps，有
好多限制，比如强制适用沙箱技术等；而来第三方开发者完全可以不用向Apple交开发员年费
而开发Apple软件，对于这些开发商不能排除在外。

另外，管理员还需要把适合自己企业环境的安全措施，随时部署到内部，所以也需要灵活的
工具来管理。
所以需要有一个有效工具，苹果提供了一个命令行工具叫spctl。

通过这个工具，管理员可以灵活地添加自己的规则(rules)，或者打开或者关闭这个功能。

    ```shell;
    关闭: sudo spctl --master-disable

    打开: sudo spctl --master-enable

    添加一个规则：sudo spctl --add --label "Good Apps" /Applications/Good.app
    sudo spctl --add --label "Bad Apps" /Applications/Bad.app
    禁止一个规则：sudo spctl --disable --label "Bad Apps" /Applications/Good.app

    准许一个规则：sudo spctl --disable --label "Good Apps"

    删除一个规则：sudo spctl --remove --label "Good Apps"

    检查状态：sudo spctl --status
    ```

这些规则存放在一个数据库中/var/db/SystemPolicy，系统还存放了一个最原始的系统数据
库/var/db/.SystemPolicy-default，以便管理员可以从头开始配置。
