Среда виртуальной файловой системы для программного обеспечения, выполняемого через процесс Java - PullRequest
0 голосов
/ 23 июня 2019

Я работаю над проектом по выполнению программ на удаленной системе. Проект написан на 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());
}

1 Ответ

0 голосов
/ 24 июня 2019

Если это возможно, chroot вашего Java-процесса в точку монтирования предохранителя.

Ваш случай является точным вариантом использования chroot, чтобы процитировать ваше описание:

Я хотел бы перехватить ВСЕ вызовы файловой системы процесс (аналогично FUSE, но вместо одного монтируется FUSE непосредственно на все вызовы для этого процесса)

Редактировать

Теперь я вижу, что с программами на Java вы можете получить некоторые сбои из-за того, что процесс ищет общие объекты в файловой системе. Вам нужно будет сделать несколько копий в папку "тюрьма". Смотрите здесь - https://askubuntu.com/questions/236778/using-chroot-with-a-java-application

...