Linux
在 Linux 上執行可能有害的程序
我正在編寫一個程序來測試學生編寫的程序。恐怕我不能信任他們,我需要確保它不會對執行它的電腦造成嚴重後果。
我正在考慮讓一些對系統資源具有有限訪問權限的崩潰測試使用者並以該使用者身份執行程序,但從我目前在網上發現的情況來看,製作虛擬系統將是最安全的選擇……
有人可以幫助我選擇正確的方法嗎?安全對我來說是一個大問題。另一方面,我不想要一個矯枉過正的解決方案,並且浪費大量時間來嘗試學習我並不真正需要的東西。
- 虛擬機可以在不重新啟動的情況下為您提供最高的安全性,但性能最低。
- 另一種選擇,以獲得比虛擬機更高的安全性:在不訪問硬碟驅動器的情況下啟動“實時”CD/DVD/pendrive(在 BIOS 中暫時禁用 HDD;如果不能,至少不要安裝驅動器/解除安裝它,如果自動安裝 - 但這不太安全)
- 與完整的虛擬機相比, **docker**容器的安全性稍差一些。這兩者之間的關鍵區別(就安全性而言)可能是在 docker 中執行的系統實際上使用了主機系統的核心。
- 有諸如隔離之類的程序將創建一個特殊的、安全的環境——這通常稱為**沙箱**——這些程序通常基於 chroot,並帶有額外的監督——找到一個適合您的程序。
- 一個簡單的chroot將是最不安全的(尤其是在執行程序方面),雖然可能會快一點,但是……您需要建構/複製整個單獨的根樹並使用綁定掛載
/dev
等(請參閱注意1下面!)。所以一般來說,不推薦使用這種方法,特別是如果您可以使用更安全且通常更易於設置的sandbox
環境。注意 0:對於“特殊使用者”的方面,例如
nobody
帳戶:這幾乎沒有任何安全性,甚至比簡單的chroot
. 使用者仍然可以nobody
訪問已為其他*.* 您可以使用. 如果您有任何人可以訪問的配置/歷史/記憶體文件(由於錯誤或輕微的安全漏洞),以’ 權限執行的程序可以訪問它,grep 獲取機密數據(如“pass =”等)並在許多方式通過網路或其他方式發送它。su -s /bin/sh -c 'some command' nobody``nobody
注 1:正如 Gilles 在下面的評論中指出的那樣,一個簡單的 chroot 環境對於針對特權升級的攻擊幾乎沒有安全性。一個單獨的 chroot 在安全方面是有意義的,前提是環境是最小的,**只包含經過安全確認的程序(但仍然存在利用潛在核心級漏洞的風險),並且在 chroot 中執行的所有不受信任的程序都在執行作為不在 chroot 之外執行任何程序的使用者。chroot 確實可以防止(具有此處提到的限制)是直接系統滲透而無需特權升級。然而,正如 Gilles 在另一條評論中指出的那樣,即使是該級別的安全性也可能會被繞過,從而允許程序脫離 chroot。