macOS Big Sur M1设备下同Go二进制文件不同目录运行被终止问题
排查思路
- 首先验证两个二进制的扩展属性差异:执行
xattr -l unpack1/install和xattr -l unpack2/install,检查是否存在com.apple.quarantine隔离属性。从第三方来源下载的压缩包解压出的文件默认会被系统附加该属性,复制操作可能触发该属性的校验逻辑异常。 - 其次校验代码签名状态:执行
codesign -dv --verbose=4 unpack1/install和codesign -dv --verbose=4 unpack2/install,对比两者的签名信息是否一致。M1架构的Mac对ARM二进制的签名校验严格,文件复制操作可能导致系统缓存的签名信息失效,触发AMFI(苹果移动文件完整性)模块杀进程。 - 最后查看系统杀进程的具体原因:执行
log show --predicate 'process == "kernel" and eventMessage contains "kill"' --last 10m,过滤最近10分钟内核的杀进程日志,确认是否为AMFI模块触发的终止操作。
解决方案
- 清除二进制的所有扩展属性:执行
xattr -c unpack2/install,移除隔离属性等系统附加标记后重新运行测试,90%以上的同类问题可通过该操作解决。 - 重新进行本地自签名:如果清除属性后仍被终止,执行
codesign -s - unpack2/install,使用ad-hoc模式对二进制进行本地签名,无需申请苹果开发者证书即可绕过基础签名校验。 - 解压时跳过属性附加:如果后续解压同类压缩包时想避免该问题,解压时添加
--no-xattrs参数,例:tar xzf 压缩包文件名 --no-xattrs,直接跳过隔离属性的附加逻辑。 - 临时关闭SIP校验(仅测试用):如果上述操作均无效,可重启设备按住电源键进入恢复模式,执行
csrutil disable关闭系统完整性保护,确认问题根源后建议重新开启SIP保障系统安全。
内容的提问来源于stack exchange,提问作者user3431635
相关产品推荐
相关产品推荐

