欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

sudo spctl --master-disable 是 能够显示任何来源,,,还需要在设置里面设置一下,,,,如何用代码 实现 不需要在设置里面实现允许任何来源 我自己亲自做的 AG chatgpt 有大用 有大大用

下面的代码是我自己亲自做的,实现允许任何来源 OK 有大用


sudo spctl --master-disable

sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO  #禁用 GKAutoRearm 的重置功能吧

   
sudo xattr -r -d com.apple.quarantine "/Applications/LuxAI.app"   #删除 隔离 (quarantine) 属性,仅对此APP直作用    
sudo spctl --add --label "TrustedApp" /Applications/LuxAI.app     #增加标签,仅对此app起作用    
sudo spctl --enable --label "TrustedApp"    
   
# 3. 强制立即生效(不重启也能应用)    
sudo killall Finder    
sudo killall SystemUIServer    





经测试: 在macos 13 上

  #sudo spctl --master-disable  #没有输出,说明 OK 的吧

  #sudo spctl --status   #可以看到 assessments disable  


经测试: 在macos 15.6 上

 #sudo spctl --master-disable  # Globally disable the assessment system needs to be confirmed in system setting  (全局禁用评估系统需要在系统设置中确认) 

  #sudo spctl --status   #仍然看到 assessments enabled





sudo spctl --master-disable 是 能够显示任何来源,,,还需要在设置里面设置一下,,,,如何用代码 实现 不需要在设置里面实现允许任何来源

你说的情况我理解了 👍

macOS 里执行

sudo spctl --master-disable    



确实会把「安全性与隐私」→「通用」→「允许从以下位置下载的 App」里面的 「任何来源」 打开。
但是在 系统偏好设置 UI 里还需要点一次允许(比如第一次运行某个未签名的 app 时,会出现「已阻止」提示,必须点「仍要打开」)。


核心原因

这是 Gatekeeper 的双层保护机制:

  1. spctl --master-disable 修改的是 全局策略(是否显示「任何来源」选项)。

  2. 首次运行时的隔离属性(com.apple.quarantine 标记)还是存在于文件本身上。
    所以即使你打开了「任何来源」,下载的 .app 文件如果有 quarantine 标记,依然会被拦截,必须在设置里点允许。


解决方法(代码层面)

如果你想做到 不用去设置里点允许,可以在安装或运行前移除应用的隔离属性:

# 移除 quarantine 标记  -d delete删除   sudo xattr -d com.apple.quarantine /path/to/YourApp.app      



或者批量移除  -r 是 recursive 递归  , -d  是 delete: # OK 有大用 有大大用

sudo xattr -r -d com.apple.quarantine /Applications/YourApp.app    




一次性自动化方案

你可以把两个步骤合并成脚本:

#!/bin/bash # 打开任何来源 sudo spctl --master-disable # 移除应用隔离属性 APP_PATH="/Applications/YourApp.app" if [ -d "$APP_PATH" ]; then    sudo xattr -r -d com.apple.quarantine "$APP_PATH" fi    



保存为 allow_anywhere.sh,然后:

chmod +x allow_anywhere.sh ./allow_anywhere.sh    




👉 总结:

  • spctl --master-disable 只是让系统允许「任何来源」

  • 真正避免弹出「仍要打开」确认,需要额外用 xattr -d com.apple.quarantine 去掉下载的 app 隔离标记。

要不要我帮你写一个 通用脚本,能对整个 /Applications 扫描并自动清理掉所有 quarantine 标记?


执行 sudo xattr -r -d com.apple.quarantine /Applications/YourApp.app 后 重启生失效

对,你遇到的情况其实是 Gatekeeper 的“策略缓存”+ Quarantine 标记重置,所以即使你用

sudo xattr -r -d com.apple.quarantine /Applications/xxx.app    



删掉隔离标记,重启后又“失效”。原因主要有几个:


🔎 原因分析

  1. 某些 App 是通过安装包 pkg 安装的

  • pkg 脚本会在安装后再次写入 com.apple.quarantine 标记。

  • 所以你清理掉,重启或重新验证时它又被加回去了。

  • Gatekeeper 缓存没有刷新

    • macOS 会用 spctl 的安全策略缓存来判断 App 是否被允许。

    • 光删掉 xattr 并不会刷新缓存。

  • 系统完整性保护 (SIP) / TCC 策略

    • 在 macOS Catalina 之后,有些系统目录的应用会被 SIP 强制保护。


    ✅ 解决方案

    除了删除 quarantine 属性,还需要刷新 Gatekeeper 的缓存,让系统真正信任这个 App。

    1. 移除 Quarantine 属性

    sudo xattr -r -d com.apple.quarantine /Applications/YourApp.app    



    2. 让 spctl 显式允许

    sudo spctl --add --label "TrustedApp" /Applications/YourApp.app sudo spctl --enable --label "TrustedApp"    



    这样会把应用加到 Gatekeeper 信任列表里,不会因为重启失效。

    3. 验证是否已信任   assess  是评估的意思

    spctl --assess --verbose=4 /Applications/YourApp.app    



    如果输出包含 accepted,说明系统已经允许。


    📌 总结

    • 只用 xattr -d 删除 quarantine → 会重启后失效

    • 正确做法 = xattr -d 清除隔离 + spctl --add 把应用加入 Gatekeeper 信任名单


    要不要我帮你写一个通用的 自动脚本?比如给定 /Applications 路径,自动批量清理 quarantine 并加入 Gatekeeper 信任,这样以后装的 app 就不会再要你点「允许」了。



      


    sudo spctl --master-disable 是 能够显示任何来源,,,还需要在设置里面设置一下,,,,如何用代码 实现 不需要在设置里面实现允许任何来源

    在macOS上,sudo spctl --master-disable 命令确实会启用“任何来源”选项(在GUI设置中显示该选项)。但如果你希望直接允许所有来源的软件运行而无需用户在GUI中手动勾选,可以通过组合以下方法实现:


    方法1:使用 spctl 直接添加全局规则  

    bash    
    # 启用"任何来源"选项(显示在GUI中) sudo spctl --master-disable # 添加全局规则,允许所有应用程序(无需GUI交互) 似乎下面一行代码有问题 sudo spctl --add --label "All" --path / --global    


    说明

    • --master-disable 确保GUI中显示“任何来源”选项。

    • --global 参数直接修改系统级策略,允许所有应用运行(绕过GUI确认)。


    方法2:直接修改系统配置文件

    macOS的应用程序许可策略存储在 /var/db/SystemPolicy 文件中,但直接修改可能风险较高。更安全的方式是通过 defaults 命令修改配置:

    bash    
    # 禁用Gatekeeper(谨慎使用,会降低安全性) sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO sudo defaults write /Library/Preferences/com.apple.security RSKAutoRearm -bool NO    



    方法3:完全禁用Gatekeeper(不推荐)

    bash    
    # 彻底禁用Gatekeeper(仅限测试环境) sudo systemextensionsctl developer on sudo csrutil disable  # 需在恢复模式下执行    


    警告:这会显著降低系统安全性,仅用于开发或测试。


    注意事项

    1. 需要管理员权限:所有命令需以 sudo 执行。

    2. 重启生效:部分更改可能需要重启。

    3. 安全性风险:允许“任何来源”会增加恶意软件风险,建议仅在开发时使用。

    4. 系统版本差异:macOS 10.15+ (Catalina) 及更高版本对系统完整性保护更严格。


    完整脚本示例  

    bash    
    #!/bin/bash # 启用"任何来源"并添加全局规则 sudo spctl --master-disable
    # 下面这一行代码似乎有问题 sudo spctl --add --label "All" --path / --global # 可选:禁用Gatekeeper自动重置 sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO echo "已允许任何来源的应用程序,无需GUI确认。"    


    运行后,所有应用(包括未签名的)将可直接运行。



    sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO

    sudo defaults write /Library/Preferences/com.apple.security RSKAutoRearm -bool NO 这两行区别


    在 macOS 的 Gatekeeper 安全机制中,GKAutoRearm 和 RSKAutoRearm 这两个 defaults 设置有不同的作用。它们的区别如下:


    1. GKAutoRearm (GateKeeper Auto Rearm)

    • 作用:控制 Gatekeeper 是否自动重置为默认的安全策略。

    • 默认值YES(即 Gatekeeper 会定期自动重新启用,恢复 Apple 的默认安全限制)。

    • 禁用效果

      bash            
      sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO            

         

      • 阻止 Gatekeeper 自动恢复默认策略(如 spctl --master-enable 状态)。

      • 如果你用 spctl --master-disable 启用了 允许“任何来源”,并设置 GKAutoRearm NO,则系统不会自动恢复默认的“App Store 和被认可开发者”选项。

    • 适用场景

      • 防止 macOS 自动重置 Gatekeeper 策略,确保你手动修改的 spctl 规则(如允许“任何来源”)持久生效。


    2. RSKAutoRearm (Runtiime System Kext Auto Rearm)

    • 作用:控制 内核扩展(Kext) 和 系统扩展(System Extensions) 的自动重置行为。

    • 默认值YES(定期自动重新锁定,要求用户重新授权)。

    • 禁用效果

      bash            
      sudo defaults write /Library/Preferences/com.apple.security RSKAutoRearm -bool NO            

         

      • 防止 macOS 自动恢复对 内核扩展(Kext) 和 系统扩展(System Extensions) 的严格限制。

      • 适用于开发者调试 Kext 或 System Extensions,避免频繁弹窗要求授权。

    • 适用场景

      • 在开发或测试需要加载自定义内核扩展(如虚拟化、驱动开发)时,避免 macOS 自动重新启用安全限制。


    主要区别

    配置项影响范围典型用途
    GKAutoRearm            Gatekeeper(普通应用程序运行策略)防止系统自动恢复“App Store 和被认可开发者”选项
    RSKAutoRearm            内核扩展(Kext)和系统扩展(System Extensions)防止系统自动恢复对系统级驱动/扩展的限制

    何时需要一起使用?

    • 如果你同时需要:

    1. 允许任意来源的 App 运行(不受 Gatekeeper 限制)。

    2. 允许加载自定义内核/系统扩展(如开发驱动或虚拟化软件)。

  • 则可以同时禁用两者:

    bash            
    sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO sudo defaults write /Library/Preferences/com.apple.security RSKAutoRearm -bool NO            

       


  • 注意事项

    1. 安全性风险:禁用这些自动重置机制会降低 macOS 的安全性,仅建议在开发或测试环境中使用。

    2. 需要 SIP 部分禁用:某些操作(如完全禁用 Gatekeeper)可能需要先关闭 macOS 的 系统完整性保护(SIP)(通过恢复模式执行 csrutil disable)。

    3. 重启可能生效:部分更改需重启后才能生效。

    如果你只是希望允许安装未签名的普通应用程序(如破解软件),通常只需关注 GKAutoRearm。而 RSKAutoRearm 更多用于底层开发场景。


    GKAutoRearm 是什么简写,RSKAutoRearm 是什么简写

    在 macOS 的安全机制中,GKAutoRearm 和 RSKAutoRearm 是两个关键配置参数,它们的简写含义如下:


    1. GKAutoRearm

    • 全称GateKeeper Auto Rearm
      (Gatekeeper 自动重置机制)

    • 作用

      • 控制 Gatekeeper 是否定期自动恢复到默认安全策略(即重新启用 Apple 的默认应用签名验证)。

      • 默认值为 YES,即 Gatekeeper 会定期(约 30 天)自动恢复严格模式(仅允许 App Store 和受信任开发者签名的应用)。

    • 禁用效果

      bash            
      sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO            

         

      • 阻止 Gatekeeper 自动重置,使手动修改的策略(如 spctl --master-disable 允许“任何来源”)持久生效。


    2. RSKAutoRearm

    • 全称Runtime System Kext Auto Rearm
      (运行时系统内核扩展自动重置机制)

    • 作用

      • 控制 内核扩展(Kext) 和 系统扩展(System Extensions) 的安全策略是否自动重置。

      • 默认值为 YES,即 macOS 会定期重新锁定内核扩展的加载权限(要求用户重新授权)。

    • 禁用效果

      bash            
      sudo defaults write /Library/Preferences/com.apple.security RSKAutoRearm -bool NO            

         

      • 阻止系统自动恢复对内核扩展的严格限制,避免频繁弹窗授权(适用于驱动程序开发或虚拟化软件调试)。


    关键区别

    简写全称影响范围典型用途
    GKAutoRearm            GateKeeper Auto Rearm普通应用程序运行策略(Gatekeeper)允许未签名应用持久化运行
    RSKAutoRearm            Runtime System Kext Auto Rearm内核/系统扩展(Kext/Driver)开发驱动或系统级工具时避免重复授权

    为什么需要区分?

    • Gatekeeper 针对普通应用(如 .app 文件),而 内核扩展 涉及系统底层(如硬件驱动、虚拟化组件)。

    • macOS 对两者分开管理,前者通过 spctl,后者通过内核权限策略。


    附:相关术语解释

    • Gatekeeper:macOS 的安全功能,限制仅运行来自 App Store 或受信任开发者的应用。

    • Kext(Kernel Extension):macOS 的内核模块(如驱动程序),高权限组件。

    • System Extensions:macOS 10.15+ 推出的替代 Kext 的现代扩展机制(如 VPN、虚拟化工具)。

    如果需要彻底绕过安全限制(如企业部署或开发测试),通常需同时禁用这两者并关闭 SIP(System Integrity Protection)。



    sudo spctl --add --label "All" --path / --global  详解    这个代码似乎有问题,就不看了

    sudo spctl --add --label "All" --path / --global 详解

    这条命令用于修改 macOS 的 Gatekeeper 安全策略,作用是向系统添加一个全局规则,允许所有位置(/路径)的应用程序运行。下面详细分解这个命令的每个部分:

    命令组成解析

    1. sudo

    • 以管理员权限执行命令(需要输入密码)

  • spctl

    • 系统策略控制工具(System Policy Control Tool)

    • macOS 用于管理应用程序安全策略的核心工具

  • --add

    • 添加一个新的策略规则

  • --label "All"

    • 为新规则指定一个标签/名称(这里命名为"All")

    • 这个标签可以是任何字符串,用于标识规则

  • --path /

    • 指定规则适用的路径

    • /表示根目录,即应用到整个文件系统

  • --global

    • 将规则添加到全局策略域(global policy domain)

    • 影响整个系统的所有用户

    实际效果

    这条命令创建了一条全局规则:

    • 允许从任何位置(整个文件系统)运行任何应用程序

    • 相当于完全禁用 Gatekeeper 的位置检查功能

    注意事项

    1. 安全性风险

    • 这会显著降低系统安全性

    • 允许运行任何位置的未签名/恶意软件

    • 只建议在受控的开发环境使用

  • 与其它命令的关系

    • 不同于--master-disable(后者只是显示"任何来源"选项)

    • 这个命令直接添加允许规则,无需用户交互

  • 验证规则

    • 查看已添加规则:spctl --list --global

    • 删除这条规则:sudo spctl --remove --label "All" --global

  • 系统版本影响

    • 在macOS 10.15(Catalina)及更高版本中可能受到SIP(System Integrity Protection)限制

    • 部分情况下需要在恢复模式中先禁用SIP

    使用场景

    主要用于:

    • 企业环境批量部署内部应用

    • 开发测试环境

    • 需要完全禁用Gatekeeper的特殊情况

    通常普通用户只需要spctl --master-disable即可,不建议轻易使用这条全局规则命令。


    重启后
    sudo spctl --add --label "All" --path / --global   会失效吗    这个代码似乎有问题,就不看了

    在 macOS 中,使用 sudo spctl --add --label "All" --path / --global 添加的 全局 Gatekeeper 规则 是否会在 重启后失效,取决于多个因素:


    1. 正常情况下:不会失效(永久生效)

    • --global 规则存储在系统级配置中,通常位于:

      /var/db/SystemPolicy
      

         

      • 这些规则是跨重启持久化的,除非被其他机制覆盖。

    • 如果仅执行了 spctl --add --global,没有其他干扰,这条规则会长期有效。


    2. 可能导致失效的情况

    以下情况可能导致添加的规则被重置:

    (1) GKAutoRearm 自动重置(默认 30 天)

    • macOS 默认会每隔 30 天 自动执行 Gatekeeper 重新锁定(Auto Rearm)

      • 如果 GKAutoRearm 是 YES(默认值),系统可能会恢复默认策略,删除你的自定义规则。

      • 解决方案:禁用自动重置:

        bash                
        sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO                

               

    (2) 手动或脚本执行 spctl --master-enable

    • 如果运行:

      bash            
      sudo spctl --master-enable            

         

      • 这会恢复 Apple 默认策略,可能会清除你的 --global 规则。

    (3) macOS 系统更新

    • OS 更新(如 10.15 → 11.0)可能会重置安全策略。

    • Xcode 或命令行工具更新 也可能影响规则。

    (4) SIP 重新锁定

    • 系统完整性保护(SIP) 如果被重新启用(csrutil enable),可能会还原系统安全策略。


    3. 检查规则是否仍然有效

    bash    
    # 查看所有全局规则 sudo spctl --list --global # 如果看到类似以下输出,则规则仍生效:  All path=/ [global]    


    • 如果 All 规则丢失,则已被系统或某个机制清除了。


    4. 如何确保规则永久生效?

    bash    
    # 1. 添加全局规则 sudo spctl --add --label "All" --path / --global # 2. 禁用 Gatekeeper 自动重置 sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO # 3. 可选:禁用 SIP(需在恢复模式执行) csrutil disable # 4. 验证规则是否加载 sudo spctl --list --global    


    • 这样规则几乎不会因系统策略自动失效。


    5. 建议

    • 开发环境:可以放心使用,规则通常不会自动消失。

    • 生产环境:不建议完全禁用 Gatekeeper,改用签名或 spctl --master-disable 更安全。


    总结

    条件是否失效原因
    仅执行 --add --global            ❌ 不失效持久存储
    GKAutoRearm=YES(默认)            ✅ 可能 30 天后失效自动重置
    手动 --master-enable            ✅ 失效恢复默认策略
    macOS 更新            ✅ 可能失效系统更新还原配置
    SIP 重新启用            ✅ 可能失效安全策略恢复

    如果希望 100% 确保不失效,必须 禁用 GKAutoRearm,并避免手动重置 Gatekeeper。


      sudo spctl --master-disable  

     Globally disable the assessment system needs to be confirmed in system setting  (全局禁用评估系统需要在系统设置中确认) 

    是的,sudo spctl --master-disable 这条命令确实会在 macOS 上 全局禁用 Gatekeeper 的评估系统,让系统允许运行来自 "任何来源"(Anywhere) 的应用程序。

    但执行后,仍然需要 手动进入系统设置确认,才能真正生效。这是因为苹果为了安全考虑,要求用户 主动授权修改 这项敏感的安全设置。


    1. 命令作用

    bash    
    sudo spctl --master-disable    


    • 功能:关闭 macOS Gatekeeper 对应用来源的强制检查(允许未签名的 APP 运行)。

    • 效果

      • 在 系统设置 > 隐私与安全性 > 允许从以下位置下载的 App 里,会显示 "任何来源" 选项(默认隐藏)。

      • 但不会自动勾选它,仍需用户手动点击确认。


    2. 为什么需要手动确认?

    苹果的安全策略要求:

    • 任何修改 Gatekeeper 全局策略 的行为,都必须 由用户手动授权,避免恶意软件悄悄修改设置。

    • 即使 --master-disable 被执行,系统也会弹窗或在设置界面要求用户确认。


    3. 如何用代码 "完全绕过" 手动确认?

    如果希望在 命令行直接生效,不需要进入系统设置确认,可以结合以下方法:

    方法 1:使用 defaults 直接禁用 Gatekeeper 自动重置  OK 有大用

    bash    
    # 1. 启用 "任何来源" 选项(但仍然需要手动确认) sudo spctl --master-disable # 2. 禁止 Gatekeeper 自动恢复默认策略(避免30天后失效) sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO # 3. 强制立即生效(不重启也能应用) sudo killall Finder sudo killall SystemUIServer    


    ✅ 效果:通常 GKAutoRearm NO 会使 spctl --master-disable 立即生效,不再需要手动确认。


    方法 2:直接添加全局允许规则(更激进)

    bash    
    # 直接允许所有路径的 App 运行(完全绕过 Gatekeeper) sudo spctl --add --label "All" --path / --global    


    ✅ 效果

    • 完全绕过 Gatekeeper,所有 App(包括未签名的)都能运行。

    • 不会触发系统设置确认,因为这是一个独立的策略规则。


    方法 3:完全禁用 Gatekeeper(极端方法,不推荐)

    bash    
    # 1. 进入恢复模式(Recovery Mode),关闭 SIP csrutil disable # 2. 彻底禁用 Gatekeeper sudo systemextensionsctl developer on    


    ⚠️ 警告

    • 这会 极大降低系统安全性,仅用于特殊测试环境。

    • 普通用户不要使用,可能导致恶意软件感染。


    4. 验证是否生效  # 检查 Gatekeeper 状态(应显示 "assessments disabled") OK 有大用

    bash    
    # 检查 Gatekeeper 状态(应显示 "assessments disabled") spctl --status # 查看全局规则(如果使用了 `--add --global`) spctl --list --global    


    如果 spctl --status 显示 "assessments disabled",说明 Gatekeeper 已禁用。


    5. 总结

    方法是否需要手动确认安全性影响适用场景
    spctl --master-disable            ✅ 需要普通用户临时运行未签名 App
    GKAutoRearm NO + --master-disable            ❌ 不需要开发者长期禁用 Gatekeeper
    spctl --add --global            ❌ 不需要企业/测试完全绕过检查
    完全禁用 SIP + Gatekeeper            ❌ 不需要极低特殊开发环境

    推荐

    1. 大多数用户只需 spctl --master-disable + 手动确认(最安全)。

    2. 开发者可用 GKAutoRearm NO 避免频繁修改。

    3. 不要 在生产环境使用 --global 或 完全禁用 Gatekeeper。

    如果你只是偶尔需要运行未签名的 App,手动确认一下也无妨,毕竟安全第一! 🚀


    sudo spctl --add --label "All" --path / --global 

    spctl: option '--global' is ambiguous

    你遇到的错误 spctl: option '--global' is ambiguous 表明 --global 选项在你的 macOS 版本中可能 不兼容 或 拼写方式已变更


    原因

    • 在 不同版本的 macOS 中,spctl 的命令语法可能略有不同。

    • --global 可能被更改为 --global-policy 或 --no-scan 等选项。

    • 你的系统可能使用的是 新版/旧版 spctl,导致参数识别问题。


    解决方案

    1. 尝试替代写法(推荐)

    bash    
    # 方法 1: 使用 `--global-policy`(某些 macOS 版本) sudo spctl --add --label "All" --path / --global-policy # 方法 2: 使用 `--no-scan`(某些 macOS 版本) sudo spctl --add --label "All" --path / --no-scan    


    2. 删除 --global 直接添加规则

    bash    
    # 如果仍然报错,直接省略 `--global`(部分版本允许) sudo spctl --add --label "All" --path /    


    ⚠️ 但这样可能 只对当前用户生效,而不是全局。

    3. 改用 --master-disable(推荐)

    如果你的目标仅仅是 允许未签名 App 运行,改用:

    bash    
    # 启用 "任何来源"(但仍然需要手动进入系统设置确认) sudo spctl --master-disable # 禁用 Gatekeeper 自动重置(阻止自动恢复) sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO    



    验证是否生效

    bash    
    # 查看当前规则列表 sudo spctl --list # 检查 Gatekeeper 状态 spctl --status    


    • 如果 spctl --status 显示 "assessments disabled",说明 Gatekeeper 已关闭。


    哪些 macOS 版本可能受影响?

    • macOS 10.15 (Catalina) 及以上 可能修改了 spctl 语法。

    • macOS 13 (Ventura) 及以上 安全性增强,可能限制 --global 规则。


    总结

    问题解决方案
    --global 报错改用 --global-policy 或 --no-scan            
    仍然不生效使用 spctl --master-disable + GKAutoRearm NO            
    仅限当前用户直接 spctl --add --label "All" --path /            
    通常最安全的方式spctl --master-disable + 手动确认

    如果你的目标是 永久允许任何 App 运行,建议:

    1. --master-disable + GKAutoRearm NO(推荐)

    2. 如果必须强制添加全局规则,尝试 --global-policy 或 --no-scan

    如果仍有问题,请说明你的 macOS 版本,我可以提供更精确的解决方案


     sudo spctl --add -label "All"--path /--global-disable

    System Policy Basic Usage:

    spctl --assess[-type type][-v]path ...# assessment

    spctl --status #assessment system status

    spct1 --global-disable | disable-status

    Developer Mode Usage:

    spctl developer-mode <action>

    enable-terminal

    Add Terminal as a developer tool.

    Kernel Extension User Consent Usage:

    spctl kext-consent <action> ** Modifications only available in Recovery 0s **

    status

    Print whether kernel extension user consent is enabled or disabled.

    enable

    Enable reguiring user consent for kernel extensions.

    disable

    Disable requiring user consent for kernel extensions

    add <team-id>

    Insert a new Team Identifier into the list allowed to load kernel extensions without user consent.

    list

    Print the list of Team Identifiers allowed to load without user consent.

    remove <team-id>

    Remove a Team Identifier from the list allowed to load kernel extensions without user consent.

    看起来你尝试使用 spctl --add 命令时出现了问题,并且系统返回了 spctl 的基本用法信息(而不是执行你的命令)。这可能是因为命令格式不正确或 macOS 版本限制。让我们解决这个问题。


    问题分析

    你的命令:

    bash    
    sudo spctl --add -label "All"--path /--global-disable    


    有多个问题:

    1. 参数格式错误

    • 缺少空格(-label 应该是 --label--path /--global-disable 中间缺少空格)

  • --global-disable 不是有效参数(应该是 --global 或 --global-policy

  • 你的 macOS 版本的 spctl 可能不支持这种方式添加全局规则。


  • 正确解决方案

    方法 1:使用 --master-disable(推荐)

    bash    
    # 启用 "任何来源" 选项(但仍需手动确认) sudo spctl --master-disable # 阻止 Gatekeeper 自动恢复默认策略 sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO    


    ✅ 效果

    • 在 系统设置 > 隐私与安全性 中会显示 "任何来源" 选项。

    • 需要手动勾选一次,之后不会再被重置。


    方法 2:尝试正确的 --add 命令

    bash    
    # 正确格式(注意空格和参数名) sudo spctl --add --label "All" --path / --global    


    如果仍然报错,可能是你的 macOS 版本不支持 --global,可以尝试:

    bash    
    # 某些版本可能需要 `--global-policy` sudo spctl --add --label "All" --path / --global-policy # 或者直接省略 `--global`(仅对当前用户生效) sudo spctl --add --label "All" --path /    



    方法 3:完全禁用 Gatekeeper(极端方法,不推荐)

    bash    
    # 进入恢复模式(Recovery Mode),关闭 SIP csrutil disable # 彻底禁用 Gatekeeper sudo systemextensionsctl developer on    


    ⚠️ 警告

    • 这会极大降低系统安全性,仅限开发/测试环境使用。


    验证是否生效

    bash    
    # 检查 Gatekeeper 状态 spctl --status # 查看已添加的规则 spctl --list    


    如果显示 assessments disabled 或看到 All 规则,则说明成功。


    如果你仍然看到 "Basic Usage" 帮助信息

    说明你的命令格式仍然不正确,或者你的 macOS 版本不支持 --add --global。可以尝试:

    bash    
    # 确保所有参数正确分隔 sudo spctl --add --label "All" --path / --global # 或者 sudo spctl --add --label "All" --path / --global-policy    


    如果还是不行,可能是你的 macOS 版本限制,建议改用 --master-disable


    总结

    方法适用场景备注
    spctl --master-disable            通用方法需手动确认一次
    spctl --add --global            某些 macOS 版本可能报错
    完全禁用 SIP + Gatekeeper            极端测试环境不安全

    推荐使用 --master-disable + GKAutoRearm NO,这是最稳定且安全的方式! 


    sudo xattr -d com.apple.quarantine /path/to/YourApp.app 详解

    sudo xattr -d com.apple.quarantine /path/to/YourApp.app 是一条 macOS 命令,用于移除应用程序的 隔离属性(quarantine flag)。以下是对该命令的详细解析:


    命令作用

    该命令用于:

    1. 移除 macOS 对应用程序的 "隔离标记"com.apple.quarantine 属性)。

    2. 解决 "无法打开,因为来自不受信任的开发者" 问题,避免 Gatekeeper 拦截。

    3. 使应用程序 无需手动在 "系统设置 > 隐私与安全" 中点击 "仍要打开"


    命令详解

    1. xattr

    • xattr(Extended Attributes)是 macOS 的文件扩展属性管理工具。

    • 可用于 查看、添加、删除、修改 文件的额外属性(如 quarantine flag)。

    2. -d

    • -d(delete):删除指定属性。

    3. com.apple.quarantine

    • com.apple.quarantine 是 macOS 给 外部下载的文件 添加的标记。

    • 当用户首次打开该文件时,系统会检查 代码签名,如果未签名或来源不明,则会被 Gatekeeper 拦截。

    • 删除该标记后,Gatekeeper 不再拦截,应用程序可以直接运行。

    4. /path/to/YourApp.app

    • 目标应用程序的路径。

    • 示例:

      bash            
      sudo xattr -d com.apple.quarantine /Applications/MyApp.app            

         

    5. sudo

    • 管理员权限执行(因为某些应用程序的扩展属性需要 root 权限修改)。


    使用场景

    • 运行未签名/破解版软件:直接绕过 Gatekeeper 拦截。

    • 开发者测试未签名的应用:避免每次运行都要手动确认。

    • 解决 "应用程序已损坏" 问题:某些情况下,删除 quarantine 属性可以帮助解决问题。


    示例

    1. 移除单个 App 的隔离属性

    bash    
    sudo xattr -d com.apple.quarantine /Applications/Telegram.app    


    2. 检查是否成功移除

    bash    
    xattr -l /Applications/Telegram.app    


    • 如果没有返回 com.apple.quarantine,说明已移除。

    3. 批量移除多个 App 的隔离属性

    bash    
    sudo xattr -dr com.apple.quarantine /Applications/    


    • -r:递归处理目录下的所有文件。


    注意事项

    1. 安全性风险

    • 移除 quarantine 属性会 禁用 Gatekeeper 安全检查,可能使恶意软件更容易运行。

    • 建议仅用于可信来源的应用程序(如自己开发的软件或官方下载的破解工具)。

  • 与 spctl --master-disable 的区别

    • spctl --master-disable 全局允许 "任何来源",但仍需手动确认。

    • xattr -d com.apple.quarantine 仅针对特定 App,无需任何手动确认。

  • macOS 版本影响

    • 适用于 macOS 10.12 (Sierra) 及以上版本

    • 某些新版 macOS 可能会加强保护(如 Notarization 要求),此时需 额外处理签名


    替代方案

    1. 右键 + "打开" 临时绕过

    • 按住 Control 键点击 App,选择 "打开",可临时允许运行(仍需手动确认一次)。

    2. spctl --master-disable(全局允许)

    bash    
    sudo spctl --master-disable    


    • 全局允许所有未签名的 App 运行(仍需手动在 系统设置 > 安全与隐私 勾选 "任何来源")。

    3. 重新签名 App

    bash    
    codesign --force --deep --sign - /Applications/YourApp.app    


    • 适用于开发者自行签名 App,使其符合 Gatekeeper 要求。


    总结

    方法适用场景效果
    xattr -d com.apple.quarantine            单个 App直接移除隔离标记,无弹窗
    右键 "打开"            临时运行需手动确认一次
    spctl --master-disable            全局设置需手动在系统设置确认
    重新签名            开发者长期合规解决方案

    推荐

    • 如果是 自己开发的 App → 用 codesign 签名。

    • 如果是 第三方可信 App → 用 xattr -d 移除隔离属性。

    • 如果要 长期允许所有 App → spctl --master-disable

    谨慎使用,避免安全风险! ?


    不重新签名 App 会怎么样

    如果不重新签名 macOS 应用程序(即使用未签名或签名失效的 App),可能会遇到以下 安全限制和运行问题,具体取决于系统版本和安全设置:


    1. Gatekeeper 拦截(默认情况)

    现象

    • 首次运行时弹出警告:

      "无法打开 [App名称],因为无法验证开发者。"
      "您的安全设置仅允许安装来自 App Store 和被认可开发者的应用。"            

    原因

    • macOS 的 Gatekeeper 会检查 App 的代码签名:

      • ✅ 有效签名(来自 Apple 认证开发者)→ 允许运行

      • ❌ 未签名/签名失效 → 默认拦截

    解决方案

    • 手动右键点击 App → "打开"(临时允许一次)。

    • 或使用 xattr -d com.apple.quarantine 移除隔离属性(绕过警告)。


    2. macOS 10.15 (Catalina) 及更高版本:公证(Notarization)要求

    现象

    • 即使签名有效,但未经过 Apple 公证(Notarization),运行时仍可能提示:

      "[App名称] 已损坏,无法打开。应将其移到废纸篓。"            

    原因

    • 从 macOS 10.15 开始,Apple 要求 所有新分发的 App 必须经过公证(由 Apple 服务器审核)。

    • 未公证的 App 会被标记为不安全。

    解决方案

    • 临时方案:sudo xattr -d com.apple.quarantine [App路径]

    • 长期方案:提交 Apple 公证(需开发者账号)。


    3. 部分功能受限

    未签名的 App 可能无法正常使用以下功能:

    • 系统权限请求(如摄像头、麦克风、磁盘访问)可能被拒绝。

    • 部分 API 调用受限(如某些系统扩展、沙盒外操作)。

    • macOS 可能阻止其访问敏感数据(如钥匙串)。


    4. 用户信任度降低

    • 用户看到 "未经验证的开发者" 警告时,可能放弃使用该 App。

    • 企业或正式环境下,管理员可能强制禁用未签名 App 的运行。


    5. 无法通过自动更新分发

    • 如果使用 Sparkle 等更新框架,未签名的 App 可能无法自动更新(因签名校验失败)。


    不重新签名的替代方案

    如果无法重新签名,可以通过以下方式临时解决问题(但仍有安全风险):

    方法 1:移除隔离属性

    bash    
    sudo xattr -d com.apple.quarantine /Applications/YourApp.app    


    方法 2:全局禁用 Gatekeeper

    bash    
    sudo spctl --master-disable  # 允许"任何来源"(需手动在系统设置确认)    


    方法 3:强制运行(按住 Control 键 + 右键打开)

    • 临时绕过 Gatekeeper,但每次更新后需重复操作。


    推荐做法

    场景最优解决方案
    个人使用            用 xattr -d 移除隔离属性
    开发者测试            自行签名(codesign --force --sign -
    正式分发            申请 Apple 开发者账号,签名 + 公证

    总结

    • 未签名的 App 仍可运行,但会面临 Gatekeeper 拦截、功能限制和用户信任问题

    • 长期解决方案 仍是重新签名或公证,否则每次 macOS 更新可能重新触发安全限制。

    • 如果只是临时使用,可移除 quarantine 属性或禁用 Gatekeeper,但需承担安全风险。


    如何查看签名

    在 macOS 上,可以通过以下方法检查应用程序(.app)或可执行文件的 代码签名 状态,包括签名是否有效、开发者身份和证书信息。


    方法 1:使用 codesign 命令(推荐)

    1. 检查签名基本信息

    bash    
    codesign -dv /path/to/Application.app    


    输出示例

    Executable=/Applications/Safari.app/Contents/MacOS/Safari
    Identifier=com.apple.Safari
    Format=app bundle with Mach-O universal (x86_64 arm64)
    CodeDirectory v=20500 size=857 flags=0x0(...)
    Signature size=4661
    Authority=Software Signing
    Authority=Apple Code Signing Certification Authority
    Authority=Apple Root CA
    Signed Time=2023年5月25日 上午10:44:36
    Info.plist entries=39
    TeamIdentifier=not set
    Sealed Resources version=2 rules=13 files=277
    Internal requirements count=1 size=184
    


    关键信息

    • Authority:签名证书颁发机构(如 Apple Development/Developer ID)。

    • TeamIdentifier:开发者团队 ID(企业或个人账号)。

    • 如果未签名,会显示:

      /path/to/App.app: code object is not signed at all
      

         


    2. 验证签名是否完整

    bash    
    codesign --verify -vv /path/to/Application.app    


    正常情况:无输出(表示签名有效)。
    如果签名损坏

    /path/to/App.app: invalid signature (code or signature have been modified)
    



    3. 查看详细签名证书链

    bash    
    codesign -dvvv /path/to/Application.app    


    输出示例(重点关注 Authority 部分):

    Authority=Developer ID Application: John Doe (ABCDE12345)
    Authority=Developer ID Certification Authority
    Authority=Apple Root CA
    



    方法 2:使用 spctl(Gatekeeper 评估)

    检查 Gatekeeper 是否信任该应用

    bash    
    spctl --assess -vv /path/to/Application.app    


    • 如果输出 accepted:签名有效且被 Gatekeeper 信任。

    • 如果输出 rejected:签名无效或未公证(macOS 10.15+ 要求)。


    方法 3:使用 pkgutil(检查安装包签名)

    适用于 .pkg 安装包:

    bash    
    pkgutil --check-signature /path/to/Installer.pkg    


    输出示例

    Package "Installer.pkg":
       Status: signed by a developer certificate issued by Apple
       Certificate Chain:
        1. Developer ID Installer: Company Name (ABCD123456)
           ...
    



    方法 4:右键手动检查(GUI 方式)

    1. 右键点击 .app 文件 → "显示包内容"

    2. 进入 Contents/_CodeSignature/ 目录:

    • 如果存在 CodeResources 文件,说明已签名。

  • 或右键点击 App → "获取信息" → 查看 "通用" 部分是否有签名信息。


  • 常见问题

    1. 如果应用未签名?

    • codesign -dv 输出
      code object is not signed at all

    • 解决方案

      • 自行签名(需开发者证书):

        bash                
        codesign --force --deep --sign - /path/to/App.app                

               

      • 或通过 xattr -d com.apple.quarantine 绕过 Gatekeeper(不推荐长期使用)。

    2. 如果签名无效?

    • 可能原因

      • 文件被修改(如破解版软件)。

      • 证书已过期/被吊销。

    • 解决方案

      • 重新下载官方版本。

      • 如果是开发者,更新证书并重签名。

    3. 公证(Notarization)状态检查

    macOS 10.15+ 要求第三方应用必须经过 Apple 公证:

    bash    
    stapler validate /path/to/Application.app    


    • 如果未公证:Gatekeeper 仍可能拦截。


    总结

    命令用途适用场景
    codesign -dv            查看签名基本信息检查是否已签名、开发者身份
    codesign --verify            验证签名完整性检测是否被篡改
    codesign -dvvv            查看详细证书链确认签名证书来源
    spctl --assess            检查 Gatekeeper 信任状态判断是否会被系统拦截
    pkgutil --check-signature            检查安装包签名验证 .pkg 文件
    • 推荐流程

    1. 用 codesign -dv 检查签名是否存在。

    2. 用 codesign --verify 确认是否有效。

    3. 用 spctl --assess 测试是否能通过 Gatekeeper。

    适用于调试未签名应用、验证软件来源安全性或排查安装问题!


    sudo xattr -r -d com.apple.quarantine /Applications/YourApp.app 执行后 ,如何验证  OK 有大用


    你执行了:

    sudo xattr -r -d com.apple.quarantine /Applications/YourApp.app    



    这是在 移除应用的隔离属性(com.apple.quarantine)。验证是否真的移除了,可以用以下几种方法:


    ✅ 方法一:直接查看扩展属性

    xattr /Applications/YourApp.app    



    • 如果没有输出,说明已经没有任何扩展属性(包括 com.apple.quarantine)。

    • 如果还看到 com.apple.quarantine,说明没有成功移除。


    ✅ 方法二:只检查 quarantine 属性

    xattr -p com.apple.quarantine /Applications/YourApp.app    



    • 如果返回 没有这样的扩展属性 (No such xattr),就表示已经去掉了。

    • 如果还输出了一串东西(类似 0081;...),说明还存在。


    ✅ 方法三:递归检查整个 app 包

    xattr -lr /Applications/YourApp.app | grep quarantine    



    • 没有任何输出 → 彻底移除了。

    • 如果还能搜到 com.apple.quarantine,说明 App 包里的某些文件还没去掉。


    ✅ 方法四:实际验证

    双击运行应用,如果 系统不再提示“来自不明开发者” 或 “已损坏,无法打开”,基本就证明 quarantine 已移除。


    要不要我帮你写一个一键验证的命令(比如直接输出“已移除”或“还存在”)?


    xattr -p 其中-p 什么意思

    在 macOS 的 xattr 命令里:

    • -p (print) 的意思是 打印指定扩展属性的值

      xattr -p com.apple.quarantine /Applications/YourApp.app            

             


             

      就是打印 /Applications/YourApp.app 这个文件(或目录)上 com.apple.quarantine 这个属性的值。


    举个例子:

    1. 如果文件还带有隔离属性:

      $ xattr -p com.apple.quarantine /Applications/YourApp.app 0081;64f8b6da;Safari;...            

             


             

      (这串东西记录了下载来源、时间戳、应用名等信息)        

    2. 如果属性已经移除:

      $ xattr -p com.apple.quarantine /Applications/YourApp.app xattr: /Applications/YourApp.app: No such xattr: com.apple.quarantine            

             


             


    也就是说,-p 主要是用来读取并显示某个属性值,而不是列出所有属性(列出所有属性用 xattr 或 xattr -l)。

    要不要我把 xattr 的常用参数(-l-d-w 等)给你整理一个速查表?

    xattr -lr 其中 -lr 是什么意思

    好问题 👍

    在 macOS 的 xattr 命令里:

    • -l :long format(长格式显示),会把属性名和属性值都列出来。
      (不用 -l 时,只显示属性名)

    • -r :recursive(递归),会递归地进入目录,列出所有子文件/子目录的扩展属性。


    举例:

    假设 /Applications/YourApp.app 里有很多文件:

    xattr -r /Applications/YourApp.app    



    👉 只会列出属性名,例如:

    /Applications/YourApp.app: com.apple.quarantine /Applications/YourApp.app/Contents/MacOS/YourApp: com.apple.quarantine    



    xattr -lr /Applications/YourApp.app    



    👉 会同时显示属性名和值,例如:

    /Applications/YourApp.app: com.apple.quarantine 0001;64f8b6da;Safari;... /Applications/YourApp.app/Contents/MacOS/YourApp: com.apple.quarantine 0001;64f8b6da;Safari;...    




    所以 xattr -lr 就是 递归列出并显示所有扩展属性及其值

    要不要我帮你写一个命令,可以一键检查整个 App 包里是否还有 com.apple.quarantine 属性,并只输出“有/没有”?


    如何判断 quarantine   已经被移除

    在 macOS 上,判断一个文件或应用程序的 com.apple.quarantine 属性是否已被移除,可以通过以下方法检查。quarantine 属性是 macOS 用来标记未经验证的应用(如下载的应用程序)的安全机制,移除后可以避免首次运行时的 Gatekeeper 警告。


    方法 1:使用 xattr 命令检查

    基本检查

    bash    
    xattr -p com.apple.quarantine /path/to/YourApp.app 2>/dev/null    


    • 如果输出内容:表示 quarantine 仍然存在(未被移除)。

      0083;5a9012b0;Chrome;5A9012B0-0387-4F38-BB73-9453AED3A5F9
      

         

      • 0083:隔离标志(不同的代码代表不同的状态)。

      • 5a9012b0:时间戳(UNIX 时间)。

      • Chrome 或 Safari:下载来源。

    • 如果没有输出(空白):表示 quarantine 已被移除。

    检查所有扩展属性

    bash    
    xattr -l /path/to/YourApp.app    


    • 如果返回结果包含 com.apple.quarantine,说明隔离标记仍在:

      com.apple.quarantine: 0083;5a9012b0;Chrome;5A9012B0-0387-4F38-BB73-9453AED3A5F9
      

         

    • 如果没有 quarantine 项,则已被移除。


    方法 2:使用 ls 检查(适用于命令行)

    bash    
    ls -l@ /path/to/YourApp.app    


    • 查看文件的 扩展属性列表

      • 如果有 com.apple.quarantine,会显示类似:

        -rwxr-xr-x@ 1 user  group  123456 Jan 1 12:34 YourApp.app
              com.apple.quarantine      84B
        

               

      • 如果没有 @ 符号和相关属性,说明 quarantine 已移除。


    方法 3:尝试运行(测试 Gatekeeper 是否拦截)

    如果 quarantine 已被移除:

    • 你可以直接双击运行 不会弹出 Gatekeeper 警告

      “无法打开 XXX,因为来自身份不明的开发者”            

    • 如果没有警告弹窗,说明 quarantine 已清除。


    方法 4:检查 spctl 评估状态

    即使 quarantine 被移除,如果应用未签名,spctl 仍可能拒绝运行:

    bash    
    spctl --assess -v /path/to/YourApp.app    


    • 如果输出 accepted:App 被 Gatekeeper 允许运行(即使无 quarantine 也可能需要签名)。

    • 如果输出 rejected:可能需要手动签名或完全禁用 Gatekeeper(spctl --master-disable)。


    总结

    方法命令判断标准
    xattr -p            xattr -p com.apple.quarantine /path/to/App.app            无输出 = 已移除
    xattr -l            xattr -l /path/to/App.app            无 quarantine = 已移除
    ls -l@            ls -l@ /path/to/App.app            无 @ = 无扩展属性
    直接运行            双击 App无弹窗警告 = 可能已移除
    spctl 检查            spctl --assess -v /path/to/App.app            accepted = 可运行

    常见问题

    1. 如果 quarantine 仍在?

      bash            
      sudo xattr -d com.apple.quarantine /path/to/App.app            

         

    • 强制移除隔离属性。

    • 然后再次检查 xattr -l 确认。

  • 如果 App 仍然无法运行?

    • 可能原因:未签名 / 公证失效 / 损坏。

    • 解决方案

      bash                
      codesign --force --deep --sign - /path/to/App.app  # 临时签名                

             


    结论

    • 最可靠方法xattr -l 或 xattr -p(无输出 = 已移除)。

    • 最直观方法:尝试运行 App,无 Gatekeeper 弹窗 = quarantine 已清除。


    sudo spctl --master-disable 是 能够显示任何来源,,,还需要在设置里面设置一下,,,,如何用代码 实现 不需要在设置里面实现允许任何来源

    明白了 👍
    你要的是:完全用命令行解决,不用再去 系统设置 → 安全性与隐私 → 点「允许」


    背景

    sudo spctl --master-disable
    👉 只是让 UI 里显示「任何来源」,相当于打开总开关。

    但 Gatekeeper 真正阻止你运行 App 的原因有两层:

    1. 下载隔离属性com.apple.quarantine

    2. Gatekeeper 信任缓存(spctl 策略里没有信任该 App)

    所以仅靠 --master-disable 还不够,必须同时清理隔离并加入 Gatekeeper 信任。


    代码实现(无需手动点允许)OK 有大用 

    假设 App 在 /Applications/YourApp.app

    #!/bin/bash APP_PATH="/Applications/YourApp.app" # 1. 开启“任何来源”选项 sudo spctl --master-disable # 2. 移除隔离属性(下载标签) sudo xattr -r -d com.apple.quarantine "$APP_PATH" # 3. 加入 Gatekeeper 信任名单 sudo spctl --add "$APP_PATH" sudo spctl --enable --label "YourApp" # 4. 验证是否已被接受 spctl --assess --verbose=4 "$APP_PATH"                                
                               

    验证结果

    如果最后一步输出里有:

    accepted source=...                                
                               

    就表示系统已经信任这个应用,不会再要求你去 设置里点允许,重启也不会失效。


    要不要我帮你写一个 通用脚本,可以批量处理 /Applications 目录下所有 App,一次性去除 quarantine 并全部加入 Gatekeeper 信任?                            


    👌 那我给你整理一个 一劳永逸脚本,一次执行,后续就不用再去「系统设置 → 安全性与隐私 → 点允许」了。


    🔧 脚本功能

    1. 永久关闭 Gatekeeper 自动重置 (GKAutoRearm)

    2. 开启「任何来源」(spctl --master-disable)

    3. 移除下载 App 的隔离属性 (xattr -d com.apple.quarantine)

    4. 把 App 加入 Gatekeeper 信任名单 (spctl --add)


    🚀 脚本代码   OK 有大用

    #!/bin/bash # macOS 一劳永逸地允许任何来源 App # 需要 sudo 权限 # 1. 关闭 Gatekeeper 自动重置 echo "[*] 关闭 Gatekeeper 自动重置..." sudo defaults write /Library/Preferences/com.apple.security GKAutoRearm -bool NO # 2. 开启“任何来源”选项 echo "[*] 开启 任何来源 选项..." sudo spctl --master-disable # 3. 处理 /Applications 下的所有 App echo "[*] 扫描 /Applications 下的应用..." for APP in /Applications/*.app; do    if [ -d "$APP" ]; then        echo "  -> 处理: $APP"        # 移除隔离标记        sudo xattr -r -d com.apple.quarantine "$APP" 2>/dev/null        # 加入 Gatekeeper 信任        sudo spctl --add "$APP"    fi done # 4. 提示完成 echo "[✔] 已完成:任何来源启用 + App 加入信任" echo "重启后依然有效,不会再自动恢复。"    




    📌 使用方法

    1. 将脚本保存为 allow_anywhere.sh

    2. 赋予可执行权限:

      chmod +x allow_anywhere.sh            

             


             

    3. 运行:

      ./allow_anywhere.sh            

             


             


    这样执行完一次:

    • 「任何来源」会一直保留

    • 已经装过的 App 会被移除 quarantine 并加入信任

    • 以后新装 App,只要再跑一次 sudo xattr -d com.apple.quarantine 就行


    要不要我再帮你改进一下,让它能 自动监控 ~/Downloads 里新下载的 App,并即时去掉 quarantine + 加信任?这样完全全自动,不用你手动跑脚本。




    sudo spctl --master-disable 是 能够显示任何来源,,,还需要在设置里面设置一下,,,,如何用代码 实现 不需要在设置里面实现允许任何来源


    你说的 sudo spctl --master-disable 命令确实可以在 macOS 中显示“任何来源”选项,允许安装未经过公证的应用程序。但是,从 macOS 10.15 (Catalina) 开始,即使运行了这个命令,仍然需要在“系统偏好设置”->“安全性与隐私”->“通用”中手动允许安装。这增加了一层安全防护。

    不需要在设置中手动允许安装的方法 (理论上可行,但不推荐):

    重要提示:

    • 安全性风险: 这些方法会降低系统的安全性。强烈建议只在开发环境或完全可控的环境中使用。

    • 未来兼容性: Apple 可能会在未来的 macOS 版本中禁用这些方法。

    • 需要 root 权限: 这些方法需要 root 权限才能执行。

    • 不推荐用于生产环境: 除非你有充分的理由并且完全了解风险,否则不要在生产环境中使用这些方法。

    方法 1:禁用 Gatekeeper (不推荐,但最直接)

    这是最简单粗暴的方法,直接禁用 Gatekeeper。

    • 命令:

      bash
      sudo defaults write /Library/Preferences/com.apple.security.policy assessmentEnabled -bool false
      sudo spctl --disable
      
      • sudo defaults write /Library/Preferences/com.apple.security.policy assessmentEnabled -bool false: 设置 Gatekeeper 的评估策略为禁用。

      • sudo spctl --disable: 禁用系统策略控制 (System Policy Control),也就是 Gatekeeper。

    • 说明: 运行这些命令后,你将不再需要手动允许安装未经过公证的应用程序。 但是,这会大大降低系统的安全性,因为它完全绕过了 Gatekeeper 的保护。

    • 风险: 强烈不推荐使用这种方法,因为它使你的系统容易受到恶意软件的攻击。

    方法 2:添加例外到 com.apple.security.exceptions.plist (更安全,但仍然存在风险)

    这种方法允许你为特定的应用程序或开发者添加例外,允许它们绕过 Gatekeeper。

    • 步骤:

    1. 获取应用程序的 Bundle ID 或 Code Signing ID: 你可以使用 codesign -dvvv /path/to/application.app 命令来获取应用程序的 Bundle ID 和 Code Signing ID。

    2. 编辑 com.apple.security.exceptions.plist 文件:

      bash
      sudo defaults write com.apple.security.exceptions AllowIdentifiedDevelopers -bool true #允许开发者签名的app
      sudo defaults write com.apple.security.exceptions AllowUnidentifiedDevelopers -bool true #允许任何app
      
  • 说明:

    • AllowIdentifiedDevelopers 允许已经签名的开发者。

    • AllowUnidentifiedDevelopers 允许任何App。

  • 风险: 这种方法仍然存在风险,因为你允许特定的应用程序或开发者绕过 Gatekeeper 的保护。 请谨慎使用,只添加信任的应用程序或开发者。

  • 方法 3:使用 xattr -d com.apple.quarantine (适用于单个文件,不影响全局设置)

    这种方法可以从单个下载的文件中删除 "quarantine" 属性,使其可以正常运行,而无需修改全局 Gatekeeper 设置。

    • 命令:

      bash
      xattr -d com.apple.quarantine /path/to/downloaded/application.app
      
    • 说明: 这会从应用程序文件中删除 com.apple.quarantine 属性,该属性是由 Gatekeeper 添加的,用于标记下载的文件。 删除此属性后,应用程序就可以正常运行,而无需手动允许。

    • 优点: 这种方法只影响单个文件,不会影响全局 Gatekeeper 设置,因此风险相对较低。

    • 缺点: 你需要对每个下载的文件执行此操作。

    为什么不推荐这些方法?

    Gatekeeper 是 macOS 的一个重要的安全功能,它可以防止恶意软件的传播。 通过禁用 Gatekeeper 或绕过其保护,你使你的系统容易受到攻击。

    • 恶意软件: 恶意软件可能会伪装成合法的应用程序,并利用你的信任来感染你的系统。

    • 数据泄露: 恶意软件可能会窃取你的个人数据,例如密码、信用卡信息和银行帐户信息。

    • 系统损坏: 恶意软件可能会损坏你的系统文件,导致系统不稳定或无法启动。

    更好的方法:

    • 购买或寻找经过公证的应用程序: 尽可能选择经过公证的应用程序,因为它们已经经过 Apple 的安全审查。

    • 使用虚拟机: 如果你需要运行未经过公证的应用程序,可以考虑使用虚拟机。 这可以隔离应用程序,防止其感染你的主系统。

    • 手动允许安装: 这是最安全的方法,因为它可以让你仔细审查每个应用程序,并在安装之前确认其来源可信。

    总结:

    虽然有一些方法可以在 macOS 中绕过 Gatekeeper 的保护,但不建议使用这些方法,因为它们会降低系统的安全性。 尽可能选择经过公证的应用程序,并在必要时使用虚拟机。 如果你必须运行未经过公证的应用程序,请手动允许安装,并在安装之前仔细审查其来源。 风险自负!



    普通分类: