MacOS 是否有与 Linux 相对应的操作系统取消分享(2)?
我希望以下操作在两个系统上都失败。
#define _GNU_SOURCE
#include <stdlib.h>
#include <sched.h>
int main()
{
#if __linux__
if(0>unshare(CLONE_NEWNET)) return EXIT_FAILURE;
#elif __APPLE__
/*?*/
#endif
//this should fail on either system
if(0!=system("curl www.google.com")) return EXIT_FAILURE;
}
答案1
Mac OS X 实际上没有像 Linux 那样的命名空间,但如果你想阻止网络,它似乎可以用来sandbox_init()
获得类似的效果。请参阅手册页以获得描述。
有两个内置配置文件似乎支持与您描述的用例类似的用例:kSBXProfileNoInternet
,其中禁止 TCP/IP 网络;和kSBXProfileNoNetwork
,其中禁止所有基于套接字的网络。 (虽然后者可能更接近 Linux 网络命名空间在这里所做的事情,但前者可能足以满足您的需求。)
请注意,该函数被记录为已弃用,那些希望对应用程序进行沙箱处理的人应该研究应用沙盒功能,所以您可能也想看看。我不知道应用程序沙箱会使用相同的机制(您从平台运行的代码#ifdef
),这就是我sandbox_init()
首先建议的原因。