MacOS 对应 Linux 的 unshare(2)

MacOS 对应 Linux 的 unshare(2)

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()首先建议的原因。

相关内容