我正在查看codepad.org,並且一會兒(1)fork給出以下輸出。如何在沙箱環境中運行程序時禁止系統調用?
不允許的系統調用:SYS_fork
檢查此鏈接以查看詳細信息。 http://codepad.org/rNR9mMVv
谷歌搜索更多,我知道他們也使用套接字禁用系統調用。
不允許的系統調用:SYS_socketcall
誰能告訴我如何可以禁用某些系統在沙盒環境中運行該程序前調用?
我正在查看codepad.org,並且一會兒(1)fork給出以下輸出。如何在沙箱環境中運行程序時禁止系統調用?
不允許的系統調用:SYS_fork
檢查此鏈接以查看詳細信息。 http://codepad.org/rNR9mMVv
谷歌搜索更多,我知道他們也使用套接字禁用系統調用。
不允許的系統調用:SYS_socketcall
誰能告訴我如何可以禁用某些系統在沙盒環境中運行該程序前調用?
通過用具有空存根或異常拋出函數而不是實函數的模擬替換運行時庫?
如果您願意支付性能損失,則可以使用ptrace()。還有另外一種我現在無法找到的方式。
系統調用的工作方式是將操作系統注入進程。但是,如果您爲自己喜歡的可執行格式編寫了自定義加載程序,則可以將其與自己的加密鏈接進行鏈接。如果格式允許,您也可以對可執行文件進行二進制更改,以從您提供的單獨動態庫中提取這些函數。
我知道這是一個老問題,但我正在研究相同的東西,所以這裏是我的建議 - 使用SELinux。關於SELinux,Gentoo項目有一些nice stuff。看看SELinux Policy Types(4.b),特別針對政策。我不確定codepad.org,但類似的ideone.com使用Gentoo,所以也許SELinux應該是最簡單的方法。
我認爲這將是一個內核級別的問題,而不是特定於C++或任何其他本機二進制文件。除非有一個可以在非本地環境中運行代碼的C++解釋器? – JOTN 2010-12-15 23:45:45