2009-06-18 39 views

回答

7

你可以在Linux chroot jail中運行它,或者將它與沒有實現任何文件I/O的libc鏈接。

+0

究竟是一個chroot監獄? – 2009-06-19 14:42:01

+3

這是一些UNIX系統中可用的環境,它允許程序在無需訪問完整文件系統的情況下運行。在jail內部運行的進程會將某個子目錄視爲其根目錄,並且無法訪問它以外的任何內容。 具體而言,系統調用會設置假根目錄,並且所有子進程都會繼承它。 – thirtyseven 2009-11-10 22:24:13

0

我認爲他們不運行任何代碼。例如,當您嘗試讀取或寫入文件「ofstream」時,出現此錯誤「受限制的功能」&「ifstream」in C++

6

程序在運行時間有限的chrooted jail中運行。判斷計算機分佈在多個服務器上,以幫助防止單點故障或DOS攻擊。

我是一個地區比賽管理員。

4

構建沙箱的簡單方法(假設Linux作爲服務器操作系統,這對於ACM來說很常見)使用(古老的)chroot或一些內核補丁。還有在內核中一些更高級的沙盒技術現在,例如:

  • seccomp - 的Linux 2.6.12+ - 過程可以使用特殊prset電話問OS,工藝能力限制:退出,閱讀和寫作已經打開文件。 OS將拒絕執行任何其他系統調用,從而有效地隔離來自外部世界的程序。而且沒有辦法重新設置這些功能。 (這個解決方案可能會破壞一些像python,perl,ruby等進程語言,它們希望在運行時加載一些插件。)

  • namespace isolation - cgroups。 chroot是一個只改變(隔離)文件系統命名空間的程序,還有其他的命名空間,例如網絡或過程。使用cgroups,我們可以限制使用chroot的可能性。

某些內核補丁是爲在線評委編寫的,例如, * ejudge.ru的補丁爲2.6.38.8,3.4.15,3.7.5;還有一些針對Windows的解決方案。 (該網站用俄語。)我認爲,這個系統可能會在俄羅斯的一些比賽中使用,不確定約1/4 ACM ICPC。

一些判斷系統使用ptrace()系統調用 - 換句話說,它們像測試程序的調試器一樣工作,判斷器可以控制所有系統調用,並且可以在不傳遞給內核的情況下取消它們中的任何一個。

並且存在開源判斷系統,例如, https://openjudge.net/(libsandbox)