出于安全原因,某些应用程序被隔离在 chroot 环境中。我需要通过 PHP 脚本调用这个应用程序。类似的东西:
exec('chroot /path/to/chroot command')
我需要root使用chroot. PHP 手册中有一个chroot(),但这个函数也需要 root 权限。
那么,如何chroot在 PHP 中使用 ed 命令呢?
chroot只能由特权用户调用。passwd否则,普通用户可能会欺骗 setuid 应用程序,例如sudo访问意外位置的文件。
因此,如果您的 php 应用程序没有以 root 身份运行,您可以做的一件事是设置一个setuid包装脚本并从 php.ini 调用它。它应该在调用 chroot 后立即放弃特权,因为 root 可以轻易地脱离 chroots。
或者,您可以配置 sudo 以允许 php 用户执行chroot /path/to/chroot command并添加到 php.inisudo中的exec调用。
您可以使用 Linux 功能。请参阅 CAP_SYS_CHROOT 功能man capabilities。
警告!通过使用 sudo,chroot 后你就是 root!
这里的诀窍是使用 sudo 并且 sudoers 文件参见sudo 手册页。
基本上,您要做的是让您的 PHP 用户访问sudo该命令的实用程序,chroot您的代码将如下所示:
exec('sudo chroot /path/to/chroot command')