Networking
MacOS 對應 Linux 的 unshare(2)
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()
首先建議的原因。