使用Java分叉特权

我正在用 Java编写一个服务器程序,允许用户使用DRMAA提交作业.虽然主服务器进程以root身份运行,但它所做的只是对用户进行身份验证,然后启动另一个以该用户身份运行的Java程序,并实际完成工作以符合最小化权限的原则.最初,我使用Runtime.exec()和sudo(下面的例子)这样做,这个工作正常,直到进程被篡改,此时sudo因为没有终端而感到沮丧.

String[] command = {"sudo","-i","-u",username,java,theOtherJavaProgram};
Runtime.getRuntime().exec(command,null,getHomeDirectory(username));

在作为守护进程运行时,在Java中执行此分叉特权模式的最佳方法是什么?有办法吗?我是否必须打破C并学习如何使用JNI创建JVM?

解决方法

你可以用su(1)代替sudo(8). su(1)参与程度较低,可能不会想要终端本身. (当然,如果您的PAM配置需要su(1)的终端输入,那么这可能也不会很好.)

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...