用PHP调用chroot

时间:2011-06-26 19:23:31

标签: php linux chroot

出于安全原因,某些应用程序在chroot环境中被隔离。我需要通过PHP脚本调用此应用程序。这样的事情:

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

我需要root才能使用chroot。 PHP手册中有chroot(),但此功能还需要root权限。

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

3 个答案:

答案 0 :(得分:2)

chroot只能由特权用户调用。否则,普通用户可以欺骗setuid应用程序(例如passwdsudo)访问意外位置的文件。

因此,如果您的php应用程序没有以root用户身份运行,那么您可以做的一件事就是设置一个setuid包装器脚本并从php调用它。它应该在调用chroot后立即删除权限,因为root可以trivially break out of chroots

或者,您可以配置sudo以允许php用户执行chroot /path/to/chroot command并将sudo添加到php中的exec调用。

答案 1 :(得分:2)

您可以使用Linux功能。请参阅man capabilities上的CAP_SYS_CHROOT功能。

警告!通过使用sudo,在chrooting之后你是root!

答案 2 :(得分:0)

这里的技巧是使用sudo和sudoers文件,请参阅sudo manpage

基本上你要做的是让你的PHP用户访问sudo命令的chroot实用程序,你的代码将是这样的:

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