我正在開發一個平臺,用戶可以在其中創建自己的「小部件」,小部件基本上是js片段(將來也會有html和css) 。沙盒由在服務器上運行的用戶編寫的node.js腳本
問題是,即使用戶不在網站上,他們也必須運行,所以基本上我的服務將不得不安排那些用戶腳本隨時運行。
我想弄清楚哪個是「沙箱」腳本的最佳方式,我首先想到的是在Docker內部自己的進程上運行的想法之一,所以讓我們說用戶管理以某種方式進入外殼它將是一個虛擬機,並希望他會被鎖定在裏面。
我不是一個Docker專家,所以我甚至不確定這是否合理,反正會產生另一個問題,即紡織數百個碼頭運行一個簡單的JavaScript代碼段。
是否有任何「安全」的方式來做到這一點?也許在空範圍上運行腳本,並以某種方式刪除對「require」方法的訪問?
另一個要求是在腳本超時後終止它。
編輯: - 發現他們在其中的腳本,並運行它創建的腳本在運行容器的圖像此相關stackexchange link
你會提出任何我應該真正關注的設置嗎? 例如,假設用戶從node.js獲取shell,我怎麼能確定他不會「擺脫docker」和「擁有」我的主機? – kroe
沒有已知的安全漏洞,用戶可以用最新的內核和最新的docker版本打破容器。只要你保持碼頭和你的內核更新,任何已知的漏洞都可以迅速修復,因爲這對很多人來說都是一個大問題。 –
用戶只需上傳一個javascript並運行在一個節點進程上。 所以我想我可以以某種方式刪除對「系統方法」的訪問權限,所以他希望不會碰到文件系統或緩衝區溢出的東西? – kroe