不在捆绑包中的文件的协同设计信息存储在哪里?
Where is codesign information stored for files that are not in a bundle?
我注意到我可以对任何随机文件进行数字签名:
touch ~/test
md5 ~/test
-> MD5 (~/test) = d41d8cd98f00b204e9800998ecf8427e
codesign -vv ~/test
-> code object is not signed at all
codesign -s <Developer ID Certificate Hash> ~/test
md5 ~/test
-> MD5 (~/test) = d41d8cd98f00b204e9800998ecf8427e
codesign -vv ~/test
-> valid on disk
-> satisfies its Designated Requirement
如果它是捆绑包,代码签名信息将存储在这里:
MyBundle.app/Contents/_CodeSignature/
但是在这种情况下,没有bundle,文件的校验和没有变化,那么代码签名存储在哪里呢?
多么好的问题!
如果您触摸该文件并使用 ls
查看它,您将看到如下内容:
$ ls -la test
-rw-r--r-- 1 User staff 0 17 Oct 09:42 test
对文件进行编码并重新列出
$ ls -la test
-rw-r--r--@ 1 User staff 0 17 Oct 09:42 test
您会看到第二个列表在权限末尾有一个 @
,这告诉我们有一个或多个扩展属性。
我们可以通过调用 xattr
查看数据
$ xattr -l test
然后将显示代码签名数据,该数据存储为文件的扩展属性。
我注意到我可以对任何随机文件进行数字签名:
touch ~/test
md5 ~/test
-> MD5 (~/test) = d41d8cd98f00b204e9800998ecf8427e
codesign -vv ~/test
-> code object is not signed at all
codesign -s <Developer ID Certificate Hash> ~/test
md5 ~/test
-> MD5 (~/test) = d41d8cd98f00b204e9800998ecf8427e
codesign -vv ~/test
-> valid on disk
-> satisfies its Designated Requirement
如果它是捆绑包,代码签名信息将存储在这里: MyBundle.app/Contents/_CodeSignature/
但是在这种情况下,没有bundle,文件的校验和没有变化,那么代码签名存储在哪里呢?
多么好的问题!
如果您触摸该文件并使用 ls
查看它,您将看到如下内容:
$ ls -la test
-rw-r--r-- 1 User staff 0 17 Oct 09:42 test
对文件进行编码并重新列出
$ ls -la test
-rw-r--r--@ 1 User staff 0 17 Oct 09:42 test
您会看到第二个列表在权限末尾有一个 @
,这告诉我们有一个或多个扩展属性。
我们可以通过调用 xattr
$ xattr -l test
然后将显示代码签名数据,该数据存储为文件的扩展属性。