Mac 运行sh 脚本 报 operation not permitted;或 安装不了的 macOS app

出现 operation not permitted (操作没权限),优先想到的就是不是可执行文件,或当前用户没权限,

果断执行 :

chmod 777 file1

但发现加了权限之后仍然出现同样的问题

重点来了:

简单了解下 com.apple.quarantine 与 codesign 覆盖签名
对于一些安装不了的 macOS app,经常使用这两招:

xattr -r -d com.apple.quarantine  file1        #主要是为了跳过公证检查

codesign --sign - --force --deep  file1        #重新签名

查资料,一般会说删除 com.apple.quarantine 属性是为了绕过公证。

而覆盖签名,解释大概是这样的:如果用一大带宽服务器个横杠作为身份标识,那么特殊的(一种专门的,临时的)签名会生效,这种签名其实是根本不使用身份标识,而是完全识别一个代码实例。

我看有些 macOS 软件(特别是破解的),有时候用 xattr 删除 com.apple.quarantine 属性后还是无法运行,但是用 codesign 重签名后,就可以。

我想问一下做 macOS app 开发的童鞋,这两句具体有什么不同呀?特别是为什么有些软件删除那个属性后不行,但重签名后却可以运行,如果说删除那个属性是为了绕过公证,那重签名又是什么呢?感觉签名这个才是绕过公证呀,有点不太明白。

当下载的文件有 com.apple.quarantine 属性时,就会触发 GateKeeper 和 Notarization 等检查;换句话说如果文件没有这个 flag 的话,系统就不会做如上检查。

总结

1 不好使就来2,2不好使就来3,3不好使估计只能 关闭SPI了

1,chmod 777 file1

2, xattr -r -d com.apple.quarantine  file1 # 递归删除file1文件的com.apple.quarantine属性

3, codesign --sign - --force --deep  file1 

关闭SPI

系统启用了SIP(System Integerity Protection)导致root用户也没有修改权限,所以我们需要屏蔽掉这个功能.

(1)进入恢复模式:关机状态下,长按电源键直至进入选项界面
(2)关闭SPI:进入终端,输入csrutil disable
(3)重启进入正常模式,进入终端,输入csrutil status ,检查状态确保关闭成功,显示以下即可;

System Integrity Protection status: disabled.

注:修改完成后,要恢复SPI:进入终端,输入csrutil enable。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值