在 PHP 中调用 chroot
出于安全原因,某些应用程序被隔离在 chroot 环境中。我需要通过 PHP 脚本调用该应用程序。类似的事情:
exec('chroot /path/to/chroot command')
我需要成为 root 才能使用 chroot。 PHP手册中有一个 chroot() 但这个函数也需要根权限。
那么,如何在 PHP 中使用 chroot 命令呢?
For security reasons, some applications are isolated in a chroot environment. I need to call this applications through a PHP script. Something like that :
exec('chroot /path/to/chroot command')
I need to be root
for using chroot
. There is a chroot() in the PHP manual but this function also requires root privileges.
So, how to use chroot
ed commands in PHP?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
chroot
只能由特权用户调用。否则,普通用户可能会欺骗 setuid 应用程序(例如passwd
或sudo
)访问意外位置的文件。因此,如果您的 php 应用程序不是以 root 身份运行,您可以做的一件事就是设置 setuid 包装脚本并从 php.ini 调用它。它应该在调用 chroot 后立即放弃权限,因为 root 可以轻松地摆脱 chroot。
或者,您可以配置 sudo 以允许 php 用户执行 chroot /path/to/chroot 命令,并将
sudo
添加到exec
调用中php。chroot
can only be called by privileged users. Otherwise, normal users could trick setuid applications such aspasswd
orsudo
into accessing files in an unexpected location.Therefore, if your php application is not running as root, the one thing you can do is set up a setuid wrapper script and call that from php. It should promptly drop privileges after calling chroot, as root can trivially break out of chroots.
Alternatively, you can configure sudo to allow the php user to execute
chroot /path/to/chroot command
and prependsudo
to theexec
call in php.您可以使用 Linux 功能。请参阅
man 功能
上的 CAP_SYS_CHROOT 功能。警告!通过使用 sudo,chroot 后你就成为 root 了!
You can use Linux Capabilities. See CAP_SYS_CHROOT capability on
man capabilities
.WARNING! By using sudo, after chrooting you are root!
这里的技巧是使用 sudo 和 sudoers 文件,请参阅 sudo 手册页。
基本上,您要做的就是让您的 PHP 用户访问
sudo
实用程序的chroot
命令,您的代码将如下所示:The trick here is to use sudo and the sudoers file see the sudo manpage.
Basically what you would do is give your PHP user access to the
sudo
utility for thechroot
command and your code will be like this: