Sandboxing子进程:为什么脚本与应用程序不同?

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

我的应用已沙箱化(无法打开或写入任何文件)。我很好奇子进程发生了什么。我让我的应用执行一个bash脚本(该脚本仅写入文件)。预期的行为:我的沙盒应用程序启动的脚本也被沙盒化。

[但是,当我尝试让我的应用程序启动另一个应用程序(不是我的)时,未对子应用程序进行沙箱处理。我很好奇有什么不同?

我使用]启动脚本>

[task setLaunchPath: @"/bin/bash"];
[task setArguments:@[@"path/to/script.sh"]];
[task launch];

和我的应用程序带有

[task setLaunchPath: @"/usr/bin/open"];
[task setArguments:@[@"-a", @"/Applications/some.app"]];
[task launch];

((使用[[NSWorkspace sharedWorkspace] launchApplication:@"/Applications/some.app"];启动应用程序时会发生相同的问题)>

注意:我不控制some.app,它可以是任何应用。我也读过Apple's doc,但了解它只有在我们也拥有some.app的情况下才有效

我的应用已沙箱化(无法打开或写入任何文件)。我很好奇子进程发生了什么。我让我的应用执行一个bash脚本(该脚本仅写入文件)。预期的行为:...

objective-c cocoa appstore-sandbox
1个回答
0
投票

您提供的链接仅适用于您的应用通过NSTask或posix-spawn函数(命令行工具和脚本等)启动的进程。当您要求您的应用启动一个完整的独立应用时,该应用将具有自己的沙箱和权利,并受系统通常应用于应用的安全协议的约束:例如,用户必须批准运行该应用,并且受其自身权利的限制。

由于它有自己的应用程序,因此不需要独立的应用程序来继承应用程序的沙箱。实际上,允许它继承应用程序的沙箱本身可能会带来安全风险,因为不道德的人可能会利用该技巧将应用程序的权利提升到超出其最初拥有的范围。

© www.soinside.com 2019 - 2024. All rights reserved.