如何为C语言编写的命令行程序添加com.apple.security.hypervisor权限
给编译后的C语言命令行程序添加
com.apple.security.hypervisor权限 嘿,我来帮你搞定这个问题!当你用gcc这类命令行工具编译完C程序后,要让它能正常调用Hypervisor.framework,核心就是通过苹果的codesign工具给二进制文件注入对应的权限。下面是一步步的具体操作:
1. 创建权限配置文件(Entitlements Plist)
首先你需要一个plist文件来告诉系统要启用com.apple.security.hypervisor权限。用任意文本编辑器新建一个文件,比如命名为hypervisor.entitlements,填入以下内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>com.apple.security.hypervisor</key> <true/> </dict> </plist>
2. 编译你的C程序
先按常规方式编译你的C源码,比如你的源文件是main.c,执行:
gcc main.c -o my_hypervisor_tool
这会生成名为my_hypervisor_tool的二进制可执行文件。
3. 用codesign注入权限并签名
这一步分两种场景,根据你的需求选择:
场景一:本地测试(自签名证书)
如果你只是在自己的机器上测试,用自签名证书就足够了:
- 打开钥匙串访问,点击顶部菜单栏的
证书助理->创建证书。 - 填写证书名称(比如"My Local Code Signing"),证书类型选择
代码签名,其余选项保持默认,一路点击下一步完成创建。 - 回到终端,执行签名命令:
注意替换引号里的名称为你刚创建的证书名。codesign --entitlements hypervisor.entitlements -s "My Local Code Signing" my_hypervisor_tool
场景二:分发程序(开发者ID证书)
如果要把工具分发给其他用户,必须用苹果开发者账号的开发者ID证书签名,命令格式如下:
codesign --entitlements hypervisor.entitlements -s "Developer ID Application: Your Full Name (XXXXXX)" my_hypervisor_tool
替换引号里的内容为你的开发者ID证书完整名称(可以在钥匙串访问里查看)。
4. 验证权限是否生效
执行以下命令检查二进制文件的权限:
codesign -d --entitlements - my_hypervisor_tool
如果输出里包含com.apple.security.hypervisor = true,说明权限已经成功添加。
5. 运行程序
现在你可以直接运行你的工具了:
./my_hypervisor_tool
注意:macOS 10.15+系统下,第一次运行可能会弹出安全提示,需要前往
系统设置 -> 隐私与安全性,找到对应的提示并允许程序运行。
额外注意事项
- 自签名的程序仅能在创建证书的本地机器上运行,分发必须使用开发者ID签名,否则其他用户的macOS会阻止执行。
- 确保你的用户账号有代码签名权限,若遇到权限问题,可尝试在
codesign命令前加sudo(但尽量优先确保证书在钥匙串中是可访问状态)。 - Hypervisor.framework仅支持Intel架构Mac(macOS 10.10+)和Apple Silicon架构Mac(macOS 11+),请确认你的机器符合要求。
内容的提问来源于stack exchange,提问作者Adrian




