我正在編寫一個基於Python的Web服務器,它應該能夠執行「插件」,以便可以輕鬆擴展功能。Python:使用chroot和chjail保護不受信任的腳本/子進程?
爲此,我考慮了爲每個插件提供多個文件夾(一個用於每個插件)和一些shell/python腳本的方法,這些文件以可能發生的不同事件的預定義名稱命名。
一個示例是在將PDF上載到服務器時執行on_pdf_uploaded.py
文件。要做到這一點,我會使用Python的子進程工具。
爲了方便和安全,這將允許我使用Unix環境變量來提供進一步的信息並設置進程的工作目錄(cwd),以便它可以訪問正確的文件而不必查找它們的位置。
由於插件代碼來自不受信任的來源,因此我想盡可能保證它的安全。我的想法是在子進程中執行代碼,但將其與不同用戶的chroot jail放在一起,以便它不能訪問服務器上的任何其他資源。
不幸的是我找不到任何關於這個,我不想依靠不信任的腳本把自己陷入監獄。
此外,我不能把主/調用過程放到chroot jail中,因爲插件代碼可能在服務器應答其他請求的同時在多個進程中執行。
所以,這裏是一個問題:如何在一個chroot jail中執行子進程/腳本,並具有最小權限來保護服務器的其他部分免受錯誤的,不受信任的代碼的破壞?
謝謝!
這真的是你的工作嗎?他們不應該知道他們在運行什麼代碼嗎?無論...這有幫助嗎? [os.chroot()](http://docs.python.org/library/os.html#os.chroot)。另外,'os'已經得到好東西以便與uid混淆等。因此,創建一個新進程(os.fork()?),然後os.setuid然後os.execle()。 – Logan 2012-07-30 16:44:38