如何在 chroot 中运行程序并且为调用者提供 stdin/stdout?

如何在 chroot 中运行程序并且为调用者提供 stdin/stdout?

有没有办法在 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 或任何事情。

相关内容