Come posso caricare / scaricare un modulo del kernel Linux con un programma Java?
-
07-07-2019 - |
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();
...
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.