Pregunta

Estoy buscando cargar y descargar un módulo de kernel de Linux desde mi programa Java.

Inicialmente intenté hacerlo usando ProcessBuilder para ejecutar los comandos, sin embargo, falla porque el programa no tiene acceso de root. Ejecutar mi programa como root también produce el mismo problema, ya que es un proceso diferente que necesita acceso root.

Entonces, ¿cómo obtengo acceso de root en mi programa para que pueda ejecutar insmod y rmmod. Así es como se ve hasta ahora.

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

Solución

Envuelva su llamada a los módulos en su o sudo y asegúrese de que el proceso de Java se ejecute como root

Otros consejos

Cree un contenedor setuid para modprobe (8) o insmod(8)


Modprobe (8) y insmod (8) no son setuid por razones obvias, pero debería ser seguro hacer un wrapper setuid para ellos que ejecute solo ciertos aprobados cargas Luego, ejecute el contenedor desde java. Solo asegúrese de que los módulos aprobados requieren credenciales raíz para cambiar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top