设置可执行文件的权利

问题描述 投票:0回答:1

我正在开发基于C语言的macOS程序。我创建了一个名为MyApp.app的macOS包装器应用程序,该应用程序应执行该程序。我想对程序进行沙盒化,并授予它仅访问某些资源的权限。

这是我对程序和包装器应用程序进行代码签名的方式:

codesign -s MyCert -f --keychain login.keychain --timestamp --options=runtime --deep --entitlements ents.plist myprogram

codesign -s MyCert -f --keychain login.keychain --timestamp --options=runtime --deep --entitlements ents.plist MyApp.app

ents.plist在其中启用com.apple.security.app-sandbox权利。上面的命令不报告任何错误。然后,我检查沙箱是否真的在应用程序上启用,并且是否启用:

asctl sandbox check MyApp.app
/Users/Me/MyApp.app:
        signed with App Sandbox entitlements

至于二进制程序,我得到一个错误:

asctl sandbox check myprogram
asctl: unable to resolve path for application "myprogram"

如果我运行程序并检查过程,它会给我以下内容:

asctl sandbox check -p 16890
/Users/Me/myprogram:
        not signed with App Sandbox entitlements
        running without App Sandbox enabled
        running unsandboxed

应该如何在二进制可执行程序上启用沙箱?

macos entitlements code-signing-entitlements
1个回答
0
投票

为了为命令行实用程序启用“应用程序沙箱” –我假设这是您要实现的目标–您不需要包装应用程序/应用程序捆绑包。您需要的是信息属性列表(Info.plist),该列表通常位于此类应用程序捆绑包内。但是,Info.plist可以嵌入到二进制文件中,这使您可以直接为二进制文件启用沙箱功能。

首先,您需要创建丢失的Info.plist文件。

第二步取决于您使用的是Xcode还是其他构建系统:

如果使用Xcode,请在目标配置的常规选项卡的身份部分中选择Info.plist。在Build Settings选项卡的Packaging部分下,需要启用在Binary中创建Info.plist部分。现在,您可以在Signing&Capabilities选项卡中添加App Sandbox功能。

如果使用其他构建系统,请确保通过-sectcreate __TEXT __info_plist /path/to/Info.plist到链接器,并按问题中所述嵌入权利-包括沙盒权利(com.apple.security.app-sandbox)。

就这样–您的命令行实用程序现在应该被沙箱化了。

为了检查Info.plist是否正确嵌入到二进制文件中,可以使用以下命令序列显示嵌入的内容:

objdump -m -section=__info_plist -s /path/to/binary | sed '1,/Contents of (/d'
© www.soinside.com 2019 - 2024. All rights reserved.