Как загрузить / выгрузить модуль ядра Linux с помощью Java-программы?

StackOverflow https://stackoverflow.com/questions/1418444

Вопрос

Я ищу загрузить и выгрузить модуль ядра 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();
    ...
Это было полезно?

Решение

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

Другие советы

Создайте оболочку setuid для modprobe (8) или insmod (8)

<Ч>

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top