出于安全原因,某些应用程序在chroot环境中被隔离。我需要通过PHP脚本调用此应用程序。这样的事情:
exec('chroot /path/to/chroot command')
我需要root
才能使用chroot
。 PHP手册中有chroot(),但此功能还需要root权限。
那么,如何在PHP中使用chroot
ed命令?
答案 0 :(得分:2)
chroot
只能由特权用户调用。否则,普通用户可以欺骗setuid应用程序(例如passwd
或sudo
)访问意外位置的文件。
因此,如果您的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')