0

我正在寻找从我的 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();
    ...
4

2 回答 2

1

modprobe(8)为or创建一个 setuid 包装器insmod(8)


Modprobe(8)并且insmod(8)由于明显的原因不是 setuid,但是为它们制作一个 setuid 包装器应该是安全的,它只执行某些批准的负载。然后,从 java 运行包装器。只需确保批准的模块需要 root 凭据才能更改。

于 2009-09-13T18:19:56.817 回答
1

将您对模块的调用包装在 su 或 sudo 中,并确保 java 进程以 root 身份运行

于 2009-09-13T18:26:05.390 回答