2013-03-15 34 views
5

我們有一臺運行Linux的設備,我們需要在此上運行不受信任的應用程序。我們正試圖減輕以下安全問題 -在沙箱中的Linux上運行不受信任的應用程序

  1. 不受信任的應用程序不應該能夠在覈心操作系統數據和二進制文件產生不利影響
  2. 不受信任的應用程序不應該能夠到另一個應用程序的數據和二進制文件產生不利影響
  3. 非信任應用程序不應該能夠佔用過多的CPU,內存或磁盤並導致DoS /資源匱乏情況一樣的核心操作系統或其它應用程序

從不受信任的應用程序的立場點,只需要能夠讀取和寫入自己的目錄,也許安裝USB驅動器

我們正在考慮使用以下方法之一 -

方法1 - 使用了SELinux的沙盒

  • 這可能嗎?我已經閱讀了一些SELinux,在設置策略文件和在運行時強制執行它等方面看起來有點複雜。SELinux可以做到這一點,並限制不可信任的應用程序只讀/寫自己的目錄,並且能夠設定配額限制?

方法2 - 我們自己的

  • 創建一個新的沙箱在安裝時

    • 每個置信應用
    • 郵票整個應用程序創建一個新的應用程序用戶目錄和具有權限的文件,以便只有應用程序用戶才能讀取和寫入
    • 使用的ulimit應用程序用戶分
    • 設置配額/配額
  • 在運行時,推出採用

    • 關閉所有打開的文件描述符/句柄
    • 使用的chroot設置根的信任應用程序到應用程序目錄
    • 在應用程序用戶環境下啓動應用程序

關於上述的想法?哪種方法比其他方法更安全?還有另一種方法可能會更好嗎?由於某些原因,我們沒有選擇移動Android,因此我們無法使用Android本身提供的沙盒功能...

讓我知道

感謝,

+0

你的選擇數字2實際上聽起來很像Android的沙箱功能(除了chroot) - 那些工作到內核用戶安全模型保持完好的程度... – 2013-03-15 17:22:01

+0

@ chris-stratton - Android是什麼我們用作參考來提出我們的方法-2。不幸的是,我們現在無法移動到Android本身,所以沒有可以選擇使用Android沙盒的選項...... – user967973 2013-03-15 18:57:46

+0

如何使用Linux的命名空間和cgroups?老實說,我不太熟悉它,但根據我的卑微知識,你可以將流程的資源孤立於你所設定的內容。換句話說,你創建了自己的集裝箱系統,就像Docker一樣。每個進程/應用程序僅限於查看並使用分配給它的內容。 – 2017-04-18 21:58:20

回答

0

中SELinux是一組是適用有點類似甚至更復雜的用戶權限的規則。您可以將其用於每個進程來設置該進程的域,並允許或拒絕幾乎任何訪問。它意味着訪問文件,網絡或進程/線程。這樣它可以用作一種沙箱。但是,您必須爲每個進程準備一個規則集,或者您可以製作必須在沙盒應用程序之前運行的腳本才能自行準備規則。

如果你想控制CPU消耗,SELinux沒有CPU規劃器,因爲任何規則只有兩個邏輯結果'允許'或'拒絕'訪問之一。我建議你'cgroups'來控制CPU的消耗。

0

legato project使用更高級別的沙箱。它使用chroot和bind mount來包含應用程序。它的一個關鍵特性是正式的聲明式api,因此應用程序組件可以在託管安全配置下與系統服務組件進行對話。服務和應用程序可以根據需要添加和刪除,也可以通過無線方式更新。應用程序的內存使用情況,處理器共享,存儲等也受到嚴密管理。它聲稱使應用程序開發更容易。

相關問題