在PHP中调用chroot

出于安全原因,某些应用程序在chroot环境中被隔离。 我需要通过一个PHP脚本调用这个应用程序。 类似的东西:

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

我需要成为使用chroot root 。 在PHP手册中有一个chroot() ,但是这个函数也需要root权限。

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

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

因此,如果你的php应用程序没有以root身份运行,你可以做的一件事是建立一个setuid包装脚本,并从PHP调用。 在调用chroot之后,它应该立即删除权限,因为root可以轻松地从 chroot中分离出来 。

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

您可以使用Linux功能。 有关人员功能,请参阅CAP_SYS_CHROOT man capabilities

警告! 通过使用sudo,chroot后你是根!

这里的诀窍是使用sudo和sudoers文件查看sudo的manpage 。

基本上你要做的就是让你的PHP用户访问chroot命令的sudo工具,你的代码将如下所示:

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