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

A virtual filesystem environment for software executed through a Java process

我正在从事一个在远程系统上执行程序的项目。项目写在Java在服务端和客户端

在服务器上执行的代码是 运行 通过 java.lang.Process,并且可以是 运行 任何语言(例如 python)的命令。

我想做的是拦截进程的所有文件系统调用(以类似于 FUSE 的方式,但不是在单个安装的 FUSE 上直接在该进程的所有调用上)并从我的内部处理它们 Java服务器。

是否有适合我的用例的已知方法?

如果没有,如果您有任何关于从哪里开始着手解决这个问题的指示,那就太好了。

服务器可能是基于 Ubuntu 的,但是如果它对项目有帮助,我可以切换 Linux 发行版没有问题

感谢您的帮助:)

我对 FUSE 有所了解,但据我所知,我无法将整个进程锁定在某种 FUSE 系统中,而是安装到特定位置?

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

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());
}

如果可能的话,chroot你的Java进程进入保险丝安装点。

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

What I would like to do is intercept ALL filesystem calls by the process (in a similar way to FUSE, but instead of on a single mounted FUSE directly on all calls for that process)

编辑:

我现在看到,使用 Java 程序时,由于进程正在文件系统中查找共享对象,您可能会遇到一些小故障。您需要将一些内容复制到您的 "jail" 文件夹中。看这里 - https://askubuntu.com/questions/236778/using-chroot-with-a-java-application