有没有办法在 chroot 中运行程序同时仍然可以访问 stdin/stdout?
我的第一个尝试是一个 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 的连接,而父进程希望通过 STDIN/STDOUT 来控制此应用程序。
有办法实现这个吗?我是否需要修改应用程序以便它自己执行 chroot 系统调用?
答案1
chroot 不应影响 stdin、stdout 或执行时打开的任何其他文件描述符。我不知道您的 shell chroot 命令会做什么,但只要它不关闭它们,那么一切都应该正常工作。
也就是说,只要程序不做一些真正愚蠢的事情,例如依赖于打开 /dev/stdout 或任何事情。