通过Java进程执行的软件的虚拟文件系统环境



我正在研究一个项目,以在远程系统上执行程序。该项目用服务器和客户端上的Java编写。

服务器上执行的代码是通过java.lang.process运行的,并且可以是运行任何类型的语言(例如Python(的命令。

我想做的就是按进程拦截所有文件系统调用(以与保险丝相似的方式,而不是直接在所有调用上进行该过程的单个固定保险丝(,然后从我的Java服务器内部处理它们。

有什么已知方法用于我的用例?

如果没有,如果您有任何关于从哪里开始的指针,那将是很棒的。

服务器可能是基于Ubuntu的,但是如果它有助于项目

,我没有问题切换Linux发行版。

感谢您的任何帮助:(

我在保险丝周围戳了一下,但是据我所知,我不能将整个过程锁定在某种保险丝系统中,而是安装在特定位置?

如果您想更熟悉当前流程的产生方式,这是执行此操作的代码

ProcessBuilder processBuilder = new ProcessBuilder();
if (SystemUtils.IS_OS_WINDOWS){
    processBuilder.command(System.getenv("SystemRoot") + "\System32\cmd.exe", " /c ", command);
}
else{
    processBuilder.command("/bin/bash ", command);
}
try{
    Process process = processBuilder.start();
    ProcessStreamer processStreamer = new ProcessStreamer(process);
    processStreamer.streamTo(context);
    context.attribute("process", process);
    Session.forContext(context).setCurrentRoute("executorinput", context);
}
catch(IOException e){
    context.send("error " + e.getMessage());
}

如果可能的话,请将您的Java进程塞入保险丝安装点。

您的情况是使用chroot的确切用例,引用您的描述:

我想做的就是拦截所有文件系统调用 过程(以熔融类似的方式,而不是在一个安装的方式上 直接在所有呼叫的过程中融合(

编辑

我现在看到,使用Java程序,您可能会出现一些故障,因为该过程正在文件系统中寻找共享对象。您将需要进行一些复制到"监狱"文件夹中。请参阅此处 - https://askubuntu.com/questions/236778/using-chroot-with-a-java-application

最新更新