Files
nexus/wiki/concepts/Gatekeeper.md

2.4 KiB
Raw Blame History

Gatekeeper

macOS 的安全机制,用于验证应用程序是否来自已识别的开发者可信来源。

Overview

Gatekeeper 是 macOS 的应用安全验证系统,旨在保护用户免受恶意软件的侵害。它会检查应用程序的来源和签名状态,拒绝运行未授权的软件。

How It Works

Gatekeeper 会在用户尝试运行从互联网下载的应用程序时触发验证流程:

  1. 检查应用是否来自 App Store
  2. 检查是否有有效的 Developer ID 签名
  3. 检查是否被标记为已隔离quarantined

Quarantine Attribute

macOS 使用扩展属性Extended Attributes来标记从互联网下载的文件

  • com.apple.quarantine:标记文件来自互联网下载
  • com.apple.metadata:包含下载来源 URL 等元数据

Removing Quarantine

# 递归移除 quarantine 属性(适用于目录)
xattr -rd com.apple.quarantine /path/to/application/

# 验证(无输出表示解除成功)
xattr /path/to/application/binary

# 查看 quarantine 状态
xattr -l /path/to/application/binary

Gatekeeper Modes

# 查看当前 Gatekeeper 状态
spctl --status

# 允许所有来源(不推荐,存在安全风险)
sudo spctl --master-disable

# 查看应用状态
spctl --assess --verbose /path/to/application

Use Cases

  • Homebrew:安装后需解除 quarantine 才能运行
  • FRP:从 GitHub 下载的二进制文件需解除限制
  • 第三方工具:任何未签名的可执行文件

Security Considerations

方法 安全性 适用场景
Developer ID 签名 最高 正式发布的软件
App Store 仅限 App Store 应用
解除 quarantine 自托管工具/开发环境

Best Practices

  1. 仅对可信来源解除限制:如 GitHub Release 官方二进制文件
  2. 使用 -r 递归参数:确保目录内所有文件解除限制
  3. 验证文件完整性:下载后检查 SHA256 校验和
  4. 保持 Gatekeeper 开启:除非完全了解风险,否则不要禁用
  • launchd — macOS 服务管理器
  • frp — 需要解除 Gatekeeper 才能运行
  • Mac Mini M4 — 需要处理 Gatekeeper 问题

References

  • Apple Support: Safely open apps on your Mac
  • man xattr
  • man spctl