如何使用Java程序加载/卸载Linux内核模块?

时间:2009-09-13 18:11:48

标签: java eclipse module linux-kernel

我正在寻找从我的Java程序加载和卸载Linux内核模块。

我最初尝试使用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();
    ...

2 个答案:

答案 0 :(得分:1)

modprobe(8)insmod(8)

制作setuid包装器
由于显而易见的原因,

Modprobe(8)insmod(8)不是setuid,但为它们制作只执行某些已批准的加载的setuid包装应该是安全的。然后,从java运行包装器。只需确保已批准的模块需要root凭据才能更改。

答案 1 :(得分:1)

将您的调用传递给su或sudo中的模块,并确保以root身份运行java进程