出於安全原因,某些應用程序在chroot環境中被隔離。我需要通過PHP腳本調用這個應用程序。類似的東西:在PHP中調用chroot
exec('chroot /path/to/chroot command')
我需要root
使用chroot
。在PHP手冊中有chroot(),但此功能還需要root權限。
那麼,如何在PHP中使用chroot
ed命令?
出於安全原因,某些應用程序在chroot環境中被隔離。我需要通過PHP腳本調用這個應用程序。類似的東西:在PHP中調用chroot
exec('chroot /path/to/chroot command')
我需要root
使用chroot
。在PHP手冊中有chroot(),但此功能還需要root權限。
那麼,如何在PHP中使用chroot
ed命令?
chroot
只能由特權用戶調用。否則,普通用戶可能會欺騙setuid應用程序,如passwd
或sudo
訪問位於意外位置的文件。
因此,如果你的php應用程序沒有以root身份運行,你可以做的一件事就是設置一個setuid包裝腳本並從php中調用它。它應該在調用chroot後立即刪除權限,因爲root可以使用trivially break out of chroots。
或者,您可以配置sudo以允許php用戶執行chroot /path/to/chroot command
並在php中調用exec
調用sudo
。
這裏的技巧是使用sudo和sudoers文件,請參閱sudo manpage。
基本上你會做的是給你的PHP用戶對sudo
程序的訪問爲chroot
命令和你的代碼將是這樣的:
exec('sudo chroot /path/to/chroot command')
您可以使用Linux的能力。請參閱man capabilities
上的CAP_SYS_CHROOT功能。
警告!通過使用sudo,在chroot之後,你是根!
對我來說,這似乎不是一種實現安全性的好方法。你能解釋一下你想做什麼,也許還有其他方法可以做到嗎? –
好的。我需要運行pdflatex和imagemagick,以便生成一些對應於乳膠公式的png文件。問題是我需要阻止訪問帶有惡意膠乳代碼的系統文件。所以我在chroot中安裝了latex,並且我想通過php調用它。 –
聽起來很可怕,祝你好運:) –