2009-04-28 34 views
3

比方說,我正在運行一個託管服務,希望允許第三方客戶端編寫插件。如何在託管服務中監控,管理和運行不受信任的第三方代碼?

也許是一家提供基礎架構但允許客戶開發自己的遊戲裁判的遊戲服務提供商。或者,一個編碼競爭網站,允許編碼人員提交代碼作爲解決某些編碼問題的代碼。

你會如何硬化/鎖定/沙盒這個用戶代碼對打算運行它的服務器造成潛在危害?

您將如何監控和限制資源使用(主要是CPU,內存)?

This is a good start爲Python,但我不知道是否有人在這裏有他們可以共享不分語言(Python和Lua中,紅寶石等),更具體的經驗。

+0

我問了一個類似於這個問題 - http://stackoverflow.com/questions/234590/solving-the-shared-server-security-problem-for-python – rampion 2009-04-28 02:11:21

回答

0

Lua擁有迄今爲止我見過的最好的沙盒和監視功能。我的主機語言是Python。因此,我決定和Lunatic Python一起去。

2

RestrictedPython(顯示在您提供的鏈接中)看起來很有前途。但是,我不能說我實際上已經嘗試過做這樣的事情。

另一個可能的選擇是構建一個極其簡單的Linux發行版,然後將其複製到虛擬化環境中,供每個用戶使用。一旦資源達到一定的水平,通過掛起虛擬機來使用虛擬機的監視機制來限制CPU和內存的使用。如果您構建的發行版足夠小,虛擬機本身對資源的影響可能會很小,但是我會想象您仍然需要相當大量的RAM來解決這樣的問題(僅僅爲了安全起見) )。

只是我2美分。不過,我不是Python專家。

1

It's probably impossible to be 100% secure,但chroot'ing是一個好的開始。我在我的服務器上運行chroot'd監獄中的幾個腳本。一個腳本是攻擊的受害者(我忽略了一個相當聰明的漏洞 - 哎呀!),儘管滲入者破壞了腳本,但監獄阻止了他們進一步的破壞。

如果您要關注最小化python選項,請參閱Minimal Python

+0

chrooting總是一個好的開始。感謝您的最小python鏈接。 – z8000 2009-10-28 05:39:50

0

你可能想要做的事情如下所示:

  1. 編譯傳入碼挑選出所有import語句和限制哪些可以導入。

  2. 還檢查使用_import_reload功能。

  3. 爲這些模塊定義一個API,使它們可以作爲單獨的進程運行,幷包裝在您提供的輕量級WSGI服務器中。將它們分爲子流程並通過服務器API進行交互。如果他們崩潰或掛起,你會通過超時檢測到這一點。

0

FWIW,Apache/mod_wsgi version 3.0有能力在chroot環境中運行守護進程模式進程。

如果只是試圖保護主操作系統感興趣,那麼這是能夠做到這一點的一個可能的組成部分。

如果您還想阻止用戶干擾其他用戶代碼,並且可以有任意數量的用戶可以動態更改,那麼這很難,因爲Apache/mod_wsgi還沒有動態守護進程組的功能而是依靠靜態配置。

相關問題