如何在chroot之后调用execl(java程序)?

时间:2013-08-07 06:52:58

标签: java chroot

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

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

我无法在chroot(“。”)之后执行java程序,因为我无法达到实际的根目录和

安装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的解决方案?

2 个答案:

答案 0 :(得分:1)

  

是否有使用chroot和java的解决方案?

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

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

答案 1 :(得分:0)

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

  

在启动时,程序希望找到临时空间,配置   某些预设位置的文件,设备节点和共享库。   对于chrooted程序成功启动,chroot目录   必须使用最少的这些文件集填充。这可以做到   chroot很难用作一般的沙盒机制。

我认为实际用途有限