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)またはのsetuidラッパーを作成しますinsmod(8)


Modprobe(8)明らかな理由でsetuidではありinsmod(8)ませんが、特定の承認されたロードのみを実行するsetuidラッパーを作成しても安全です。次に、Javaからラッパーを実行します。承認されたモジュールを変更するには、ルートクレデンシャルが必要であることを確認してください。

于 2009-09-13T18:19:56.817 に答える
1

モジュールへの呼び出しをsuまたはsudoでラップし、Javaプロセスがrootとして実行されていることを確認します

于 2009-09-13T18:26:05.390 に答える