2

我在 chroot 之后调用 execlp (java) 时遇到问题。

java程序安装在/usr/lib/jvm/default-java/jre/bin/java。

而且我无法在 chroot(".") 之后执行 java 程序,因为我无法达到实际的 root 和

安装java的目录。

这是我的简单代码。

    int pid = fork();

    if(pid == 0)
    {
        chroot(".");

        execlp("java","java","test",  NULL);  // cant run "test" java program
    }
    else{
           wait4(..............);
    }

如果我删除 chroot,它运行良好。

问题是“java”在 /usr/lib/....... ,

如果我使用 chroot,我无法达到实际的 root 和 java。

没有同时使用chroot和java的解决方案吗?

4

2 回答 2

1

有没有同时使用 chroot 和 java 的解决方案?

是的。您需要确保已在 chrooted 文件系统中安装了 Java。换句话说,您需要在 chroot 文件系统的适当位置复制安装树中的所有文件,以及使命令可从 PATH 访问所需的所有符号链接等。

(至少,理论上是这样。我不知道这在实践中是多么容易实现。)

于 2013-08-07T06:58:42.063 回答
0

http://en.wikipedia.org/wiki/Chroot

在启动时,程序希望在某些预设位置找到暂存空间、配置文件、设备节点和共享库。要成功启动 chroot 程序,chroot 目录必须包含最少的这些文件集。这会使 chroot 难以用作一般的沙盒机制。

我猜实际用途有限

于 2013-08-07T07:00:11.220 回答