com.apple.quarantine的作用和意义

2022-12-08 09:35:47
标签: com.apple.quarantine codesign /private/var/folders xattr

最近在做Apple Silicon的工作,它需要所有的二进制文件打上签名。任何一个签名没有,ARM上不能跑,所有被加载的都需要有签名。

并且运行.app程序需要,app能过GoalKeeper检查。通常spctl -a -v xxx.app

或者

verify_codesign()

{

verify_target=$1

echo "Verify codesign: /usr/bin/codesign --verify --deep --verbose=7 \"${verify_target}\""

/usr/bin/codesign --verify --deep --verbose=7 "${verify_target}"

verify_result=$?

if [ ${verify_result} != 0 ] ; then exit ${verify_result} ; fi

echo "Verify system policy security: spctl -vvvvvv --assess --type exec --continue \"${verify_target}\""

spctl -vvvvvv --assess --type exec --continue "${verify_target}"

verify_result=$?

if [ ${verify_result} != 0 ] ; then exit ${verify_result} ; fi

}

而com.apple.quarantine的作用是告诉系统这个文件是哪里来的。从网上或者别人机器拷贝过来的东西,自动带上这个属性。

当有这个属性的时候,双击APP会有警告,如果是ARM程序,签名正确,我们可以让它运行。如果是x86_64程序,签名没有也能运行。

但是有属性和没属性运行的时候还是有区别的。

区别在于它所运行的路径不同,可以看到它被运行在一个临时路径中,访问不了原来app目录的../Resources/CONFIG文件夹。

/private/var/folders/ly/fvmqqwtn5vb_7l_9f_pnbzh00000gn/T/AppTranslocation/AB20C1B4-725C-4775-89C4-82DF8195B9D1/d/Autodesk Fusion 360.app/Contents/MacOS/Autodesk Fusion 360

如果我们直接运行里面的可执行文件,就可以直接运行/Users/conanchen/Downloads/Fusion_Output_MAC_Release_AppleSilicon/Autodesk Fusion 360.app/Contents/MacOS/Autodesk Fusion 360

conanchen@ConanChen ~ % /Users/conanchen/Downloads/Fusion_Output_MAC_Release_AppleSilicon/Autodesk\ Fusion\ 360.app/Contents/MacOS/Autodesk\ Fusion\ 360

QSocketNotifier: Can only be used with threads started with QThread

QCoreApplication::arguments: Please instantiate the QApplication object first

同时如果我们用

conanchen@ConanChen ~ % xattr -d com.apple.quarantine /Users/conanchen/Downloads/Fusion_Output_MAC_Release_AppleSilicon/Autodesk\ Fusion\ 360.app

删除属性之后,可以直接双击app,它不再会被分配到私有目录运行。


阅读(0) 收藏(0) 转载(0) 举报/Report
相关阅读

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有