有没有办法在 chroot 中运行程序同时仍然可以访问标准输入/标准输出?
我的第一次尝试是一个 shell 脚本:
/usr/local/bin/real-app:
--------
#!/bin/bash
chroot /var/lib/app-root /usr/bin/app $*
然后将它符号链接到期望看到它的地方:
ln -s /usr/local/bin/real-app /usr/local/bin/app
但这里有两个问题。首先,该程序需要root才能运行。我可以处理。但其次,似乎不再有与 STDIN/STDOUT 的连接,这是父进程期望控制此应用程序的方式。
有没有办法使这项工作?我是否需要修改应用程序以便它自己执行 chroot 系统调用?
chroot 不应影响在执行时打开的标准输入、标准输出或任何其他文件描述符。我不知道你的 shell chroot 命令做了什么,但如果它没有关闭它们,那么它应该一切正常。
也就是说,只要程序没有做一些真正愚蠢的事情,比如依赖打开 /dev/stdout 或任何东西。