我正在寻找从我的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();
...
答案 0 :(得分:1)
modprobe(8)
或insmod(8)
Modprobe(8)
和insmod(8)
不是setuid,但为它们制作只执行某些已批准的加载的setuid包装应该是安全的。然后,从java运行包装器。只需确保已批准的模块需要root凭据才能更改。
答案 1 :(得分:1)
将您的调用传递给su或sudo中的模块,并确保以root身份运行java进程