菜鸟科技网

mac spctl命令如何使用?

spctlsystem policy controller 的缩写,它是 macOS 安全架构中的一个核心命令行工具,它的主要作用是 管理和执行 Apple 的代码签名策略,以确保只有来自可信来源的软件才能在您的 Mac 上运行。

mac spctl命令如何使用?-图1
(图片来源网络,侵删)

spctl macOS Gatekeeper(网关守护程序)的“幕后指挥官”。


spctl 的核心作用

在深入命令之前,理解它的作用至关重要:

  1. 执行 Gatekeeper 策略:Gatekeeper 是 macOS 的安全功能,它会检查你尝试运行的 App 是否来自 Mac App Store 或者拥有来自 Apple 的开发者 ID。spctl 就是实现这一检查的底层工具。
  2. 管理评估策略spctl 使用“评估策略”来决定一个程序是否可以运行,这些策略定义了什么样的代码签名是可接受的。
  3. 开发者证书验证:对于非 Mac App Store 的应用,spctl 会验证其开发者签名证书是否有效、是否被吊销。
  4. 自定义安全策略:系统管理员和高级用户可以使用 spctl 来创建自己的安全规则,只允许特定文件夹里的程序运行”。

常见的 spctl 命令及使用场景

以下是 spctl 最常用的一些命令,配有解释和示例。

查看当前状态

这是最常用的命令之一,用于查看 Gatekeeper 和 spctl 的整体配置状态。

mac spctl命令如何使用?-图2
(图片来源网络,侵删)
spctl --status

可能的输出示例:

  • 状态评估(Assessment enabled)

    enabled

    这表示 Gatekeeper 处于开启状态,会检查所有应用程序。

  • 策略来源(source)

    mac spctl命令如何使用?-图3
    (图片来源网络,侵删)
    disabled

    这表示 Gatekeeper 被完全禁用(不推荐,安全风险高)。

  • 更详细的状态

    /System/Library/Security/PolicyBanner.bundle/Contents/MacOS/PolicyBanner
    assessment enabled
    runtime scopes are enforced

    这会显示更详细的信息,包括策略是否被强制执行。

管理开发者 ID

这是 spctl 最强大的功能之一,用于允许或阻止特定开发者签名的应用。

允许特定开发者

当你从某个开发者那里下载了一个应用,第一次打开时可能会被阻止,如果信任这个开发者,可以使用以下命令永久允许他签名的所有应用。

语法: spctl add <开发者ID>

示例: 假设你要允许著名开发者 Panic 的所有应用,你需要从他们的应用签名证书中找到 Team ID(通常是 10 位字母数字的组合)。

# 添加 Panic 的 Team ID (假设是 ABCDEFG123)
sudo spctl add ABCDEFG123

执行后,所有由 ABCDEFG123 这个 Team ID 签名的应用都将被允许运行,无需再在“系统设置”中手动确认。

阻止特定开发者

如果你不再信任某个开发者,或者发现某个开发者签名的应用有问题,可以阻止他。

语法: spctl remove <开发者ID>

示例:

# 移除之前添加的 Panic Team ID
sudo spctl remove ABCDEFG123

列出所有允许的开发者

如果你想查看当前已经信任的所有开发者列表:

spctl list

输出示例:

Panic, Inc. (ABCDEFG123): admited
My Awesome Company (XYZ987654): admited

管理特定应用

允许某个特定应用(即使它被阻止)

如果你确定一个被阻止的应用是安全的,可以只为这个应用创建一个例外。

语法: spctl add --type <类型> <路径>

示例: 假设你的下载目录中有一个名为 MyCoolApp.app 的应用被阻止了。

# 将 /Users/yourname/Downloads/MyCoolApp.app 添加到允许列表
sudo spctl add --type exec /Users/yourname/Downloads/MyCoolApp.app

这里的 --type exec 表示这是一个可执行文件。

禁用和启用 Gatekeeper

警告: 除非你有特殊需求(如开发测试),否则不建议完全禁用 Gatekeeper。

临时禁用 Gatekeeper

sudo spctl --master-disable

执行后,任何应用都可以运行,系统不再进行代码签名检查,你会看到输出 disabled

重新启用 Gatekeeper

sudo spctl --master-enable

执行后,Gatekeeper 会恢复到之前的设置,重新开始检查应用,你会看到输出 enabled


如何获取开发者 ID (Team ID)

在使用 spctl add 时,你需要的是开发者的 Team ID,而不是公司名称,获取方法如下:

  1. 找到该开发者签名的 .app 包。
  2. 右键点击 .app 包,选择 “显示包内容” (Show Package Contents)
  3. Contents 目录下,找到名为 _CodeSignature 的文件夹。
  4. 进入 _CodeSignature 文件夹,里面会有一个或多个 .xml 文件。
  5. 用文本编辑器打开其中一个 .xml 文件(通常是 CodeDirectoryCodeResources)。
  6. 中搜索 TeamIdentifierPrefix,后面的 10 位字母数字字符串就是 Team ID。

更简单的方法是使用命令行:

# 替换 /path/to/your/app.app 为你的应用路径
codesign -d --verbose=4 /path/to/your/app.app

在输出的 Designated => 部分,你会看到类似 identifier "com.panic.Coda" and (certificate leaf[field.1.2.840.113635.100.6.2.6] /* exists */ or certificate 1[field.1.2.840.113635.100.6.2.6] /* exists */ and certificate leaf[field.1.2.840.113635.100.6.1.13] /* exists */ and certificate leaf[subject.OU] = "ABCDEFG123") 的内容,ABCDEFG123 Team ID。


总结与最佳实践

命令 作用 使用场景
spctl --status 查看 Gatekeeper 状态 快速检查系统安全策略是否开启。
sudo spctl add <TeamID> 永久允许某个开发者的所有应用 信任一个可信赖的开发者,避免每次打开应用时都弹出确认。
sudo spctl remove <TeamID> 永久阻止某个开发者的所有应用 不再信任某个开发者,增强安全性。
spctl list 列出所有已信任的开发者 管理你的信任列表。
sudo spctl add --type exec <path> 允许单个特定应用 为一次性或临时的应用创建例外。
sudo spctl --master-disable 完全禁用 Gatekeeper 不推荐!仅用于高级调试或开发环境。
sudo spctl --master-enable 重新启用 Gatekeeper 从禁用状态恢复系统默认安全策略。

最佳实践:

  1. 优先使用 Mac App Store:这是最安全的应用来源。
  2. 谨慎使用“任何来源”:在“系统设置” >“隐私与安全性” >“安全性”中,尽量选择“App Store 和被认可的开发者”,仅在绝对必要时才选择“任何来源”。
  3. 信任开发者而非单个应用:如果你经常使用某个开发者(如 Microsoft, Adobe, Oracle)的软件,使用 spctl add 他们的 Team ID 是最方便、最安全的方式。
  4. 从官方渠道下载:始终从开发者官网或受信任的来源下载软件,避免下载被篡改的应用。
  5. spctl 是强大的工具:使用 sudo 时要格外小心,错误的命令可能会影响系统的安全性,在执行不熟悉的命令前,最好先备份或了解其确切作用。
分享:
扫描分享到社交APP
上一篇
下一篇