Networking

MacOS 對應 Linux 的 unshare(2)

  • March 3, 2019

MacOS 是否有對應於 Linux 的unshare(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;
}

Mac OS X 並沒有像 Linux 這樣的命名空間,但是如果你想阻止網路,看起來你可以使用sandbox_init()來獲得類似的效果。有關說明,請參見手冊頁

有兩個內置配置文件似乎支持類似於您描述的案例:kSBXProfileNoInternet,其中 TCP/IP 網路被禁止;和kSBXProfileNoNetwork,禁止所有基於套接字的網路。(雖然後者可能更接近 Linux 網路命名空間在這裡所做的事情,但前者可能足以滿足您的需求。)

請注意,此功能已被記錄為deprecated,希望對應用程序進行沙箱處理的人應查看App Sandbox 功能,因此您可能也想查看一下。我不知道 App Sandbox 會使用相同的機制(您從平台執行的程式碼#ifdef),這就是我sandbox_init()首先建議的原因。

引用自:https://unix.stackexchange.com/questions/504030