通过 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
我正在从事一个在远程系统上执行程序的项目。项目写在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