Domanda

Sto cercando di caricare e scaricare un modulo kernel Linux dal mio programma Java.

Inizialmente ho provato a farlo usando ProcessBuilder per eseguire i comandi, tuttavia fallisce perché il programma non ha accesso come root. L'esecuzione del mio programma come root comporta anche lo stesso problema in quanto si tratta di un processo diverso che richiede l'accesso root.

Quindi, come posso ottenere l'accesso come root nel mio programma in modo che possa eseguire insmod e rmmod. Questo è quello che sembra finora.

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();
    ...
È stato utile?

Soluzione

Termina la tua chiamata ai moduli in su o sudo e assicurati che il processo java sia in esecuzione come root

Altri suggerimenti

Crea un wrapper setuid per modprobe (8) o insmod(8)


Modprobe (8) e insmod (8) non sono impostati per ovvi motivi, ma dovrebbe essere sicuro creare un wrapper setuid che esegua solo alcuni approvati carichi. Quindi, esegui il wrapper da Java. Assicurati solo che i moduli approvati richiedano la modifica delle credenziali di root.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top