2011-06-26 69 views
1

出於安全原因,某些應用程序在chroot環境中被隔離。我需要通過PHP腳本調用這個應用程序。類似的東西:在PHP中調用chroot

exec('chroot /path/to/chroot command') 

我需要root使用chroot。在PHP手冊中有chroot(),但此功能還需要root權限。

那麼,如何在PHP中使用chroot ed命令?

+0

對我來說,這似乎不是一種實現安全性的好方法。你能解釋一下你想做什麼,也許還有其他方法可以做到嗎? –

+0

好的。我需要運行pdflatex和imagemagick,以便生成一些對應於乳膠公式的png文件。問題是我需要阻止訪問帶有惡意膠乳代碼的系統文件。所以我在chroot中安裝了latex,並且我想通過php調用它。 –

+0

聽起來很可怕,祝你好運:) –

回答

2

chroot只能由特權用戶調用。否則,普通用戶可能會欺騙setuid應用程序,如passwdsudo訪問位於意外位置的文件。

因此,如果你的php應用程序沒有以root身份運行,你可以做的一件事就是設置一個setuid包裝腳本並從php中調用它。它應該在調用chroot後立即刪除權限,因爲root可以使用trivially break out of chroots

或者,您可以配置sudo以允許php用戶執行chroot /path/to/chroot command並在php中調用exec調用sudo

0

這裏的技巧是使用sudo和sudoers文件,請參閱sudo manpage

基本上你會做的是給你的PHP用戶對sudo程序的訪問爲chroot命令和你的代碼將是這樣的:

exec('sudo chroot /path/to/chroot command') 
2

您可以使用Linux的能力。請參閱man capabilities上的CAP_SYS_CHROOT功能。

警告!通過使用sudo,在chroot之後,你是根!