Как загрузить / выгрузить модуль ядра Linux с помощью Java-программы? - PullRequest
0 голосов
/ 13 сентября 2009

Я ищу, чтобы загрузить и выгрузить модуль ядра Linux из моей Java-программы.

Первоначально я пытался сделать это, используя ProcessBuilder для запуска команд, однако это не удалось, поскольку у программы нет прав root. Запуск моей программы от имени root также приводит к той же проблеме, поскольку это другой процесс, для которого требуется доступ с правами root.

Итак, как мне получить root-доступ в моей программе, чтобы можно было запускать insmod и rmmod. Вот как это выглядит до сих пор.

String loader (String s, int i) throws BadLoaderIntException{
    if(i == 0){
        s = "insmod " + s;
    }else if(i == 1){
        s = "rmmod " + s;
    }else{
        throw new BadLoaderIntException();
    }

    ProcessBuilder pb = new ProcessBuilder("bash", "-c", s);
    pb.redirectErrorStream(true); //Outputs to stderr in-case of Error
    Process shell = null;
    try {
        shell = pb.start();
    } catch (IOException e) {
        e.printStackTrace();
    }
    InputStream shellIn = shell.getInputStream();
    ...

Ответы [ 2 ]

1 голос
/ 13 сентября 2009

Оберните ваш вызов в модули su или sudo и убедитесь, что процесс java запущен от имени root

1 голос
/ 13 сентября 2009

Сделать упаковку setuid для modprobe(8) или insmod(8)


Modprobe(8) и insmod(8) не установлены по очевидным причинам, но для них должно быть безопасно создать оболочку setuid, которая выполняет только определенные утвержденные загрузки. Затем запустите упаковщик из Java. Просто убедитесь, что для утвержденных модулей требуются учетные данные root.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...