我在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的解决方案?
答案 0 :(得分:1)
是否有使用chroot和java的解决方案?
是。您需要确保在chrooted文件系统中安装了Java。换句话说,您需要安装树中所有文件的副本,这些文件位于chrooted文件系统中的适当位置,以及使命令可从PATH访问所需的所有符号链接等。
(至少,这就是理论。我不知道这在实践中是多么容易实现。)
答案 1 :(得分:0)
http://en.wikipedia.org/wiki/Chroot
在启动时,程序希望找到临时空间,配置 某些预设位置的文件,设备节点和共享库。 对于chrooted程序成功启动,chroot目录 必须使用最少的这些文件集填充。这可以做到 chroot很难用作一般的沙盒机制。
我认为实际用途有限