Pergunta

Eu estou olhando para carregar e descarregar um Linux Kernel módulo do meu programa Java.

Inicialmente eu tentei fazê-lo usando ProcessBuilder para executar os comandos, no entanto, ele falha porque o programa does not tiver acesso de root. Correndo o meu programa como root também produz o mesmo problema que é um processo diferente, que precisa do acesso de root.

Assim como o acesso adquirir raiz I no meu programa, por isso é permitido insmod corrida e rmmod. Isto é o que parece tão longe.

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();
    ...
Foi útil?

Solução

Enrole a sua chamada para módulos em su ou sudo e certifique-se que o processo java a correr como root

Outras dicas

Faça um invólucro setuid para modprobe(8) ou insmod(8)


Modprobe(8) e insmod(8) não são setuid por razões óbvias, mas ele deve ser seguro para fazer um invólucro setuid para eles que executa apenas certas cargas aprovados. Em seguida, execute o wrapper de java. Apenas certifique-se os módulos aprovados exigir credenciais de root para mudar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top