本文由 简悦 SimpRead转码, 原文地址 latenightsw.com
MacOS Catalina 引入新的安全措施,以及包含嵌入代码的脚本库,如......。
MacOS Catalina 引入了新的安全措施,包含 Cocoa 框架等嵌入式代码的脚本库会受到影响。幸运的是,有一个简单但并不明显的解决方案。
这类脚本库的例子有 Myriad Tables Lib 或 BridgePlus,问题源于它们无法被公证。我们先来看看这个问题是如何表现出来的。
如果你在升级前已经安装了这样的库,应该不会有问题;Gatekeeper 检查仅限于第一次 "启动"。但假设你下载了一个这样的库,并把它放在 ~/Library/Script Libraries 文件夹中。当你第一次尝试运行使用该库的脚本时,你会看到一个警告对话框,提示 "由于无法验证开发者",因此无法打开该库。有两个选择:取消和移到垃圾桶(在我的本地是Bin)。
如果按 "取消 "键,会再次出现相同的对话框。然后,您可以再次点击 "取消"。(第二次出现的对话框像是一个错误)。
如果你打开安全与隐私中的系统偏好设置,并点击常规选项卡,你会在通常允许你控制哪些应用程序被允许的单选按钮下方看到一些额外的文字。在这些文字的旁边会有一个新按钮,即无论如何都要打开。
如果你按下 "无论如何都要打开 "*按钮并返回脚本,这一次当你运行脚本时,你会看到一个更详细的对话框,其中多了一个按钮: 打开。
点击打开按钮,问题就解决了。
你可能会问,为什么现在有必要这样做,为什么只影响包含捆绑框架等代码的库。原因是 Catalina 现在希望任何 code 文件或包含代码的捆绑包都经过公证。这里的代码是指可执行代码,不包括 AppleScript 代码(以及用其他脚本语言编写的代码),这意味着 Gatekeeper 会忽略不含代码的 .scptd
文件。
因此,Gatekeeper 将这些特殊的 .scptd
文件视为需要公证的捆绑包,但公证程序(尚未)允许对它们进行公证。
使问题更加复杂的是,脚本库中的任何代码或框架本身都可以被公证。这与概述的行为并无区别,因此你可能会问,为什么脚本库不与经过公证的框架一起发布。毕竟,使用增强的运行时对其进行代码签名(这是公证所要求的),意味着你知道代码已经过恶意软件扫描。这无疑至少提供了一些额外的安全性。
遗憾的是,如果随后将这些库嵌入到应用程序中,答案就会变得复杂。
假设您有一个使用Myriad Tables Lib的应用程序,您想通过电子邮件发送给同事。您可以在应用程序的 /Contents/Resources/Script Libraries 文件夹中嵌入该库的副本,然后发送。
如果您有开发者账户,可能会在发送前对应用程序进行公证。但如果你没有,当收件人第一次尝试运行它时,他们就会收到类似于上面第一个对话框的提示。如果他们信任你,就可以绕过 Gatekeeper,方法是在 Finder 中按住 Control 键单击应用程序,然后从上下文中选择 "打开"。随后的对话框将允许他们运行应用程序。(在这种情况下,批准范围包括应用程序及其嵌入库)。
但是,如果应用程序的某些部分(而不是全部)是代码签名的,Gatekeeper 会以不同的方式处理:唯一的选项是取消和移至垃圾桶。据推测,当应用程序中只有部分内容经过代码签名时,Gatekeeper 会假设最坏的情况,即有人做了某种篡改。
因此,如果这些库确实包含经过公证的框架,那么只有对软件进行代码签名的用户才能将其成功嵌入应用程序(公证通常会取代现有的代码签名,从而使所有代码都由同一身份签名)。
可以说,安全形势仍在不断发展。