我正在研究一个用于在远程系统上执行程序的项目。该项目是用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());
}
答案 0 :(得分:0)
如果可能,将Java进程chroot插入保险丝安装点。
您的案例是使用chroot
引用您的描述的确切用例:
我想做的是拦截所有文件系统调用 处理(与FUSE相似,但不是在单个安装 直接在该过程的所有调用上融合)
修改:
我现在看到,由于Java程序正在文件系统中寻找共享对象,因此您可能会遇到一些小故障。您将需要进行一些复制到“ jail”文件夹中。看到这里-https://askubuntu.com/questions/236778/using-chroot-with-a-java-application