Sco*_*ott 3 java unix permissions fork process
我正在用Java编写一个服务器程序,允许用户使用DRMAA提交作业.虽然主服务器进程运行为root,但它只是对用户进行身份验证,然后启动另一个以该用户身份运行的Java程序,并实际完成工作以符合最小化权限的原则.最初,我正在使用Runtime.exec()和sudo(下面的例子)这样做,这个工作正常,直到进程被篡改,此时sudo因为它没有终端而感到沮丧.
String[] command = {"sudo", "-i", "-u", username, java, theOtherJavaProgram};
Runtime.getRuntime().exec(command, null, getHomeDirectory(username));
Run Code Online (Sandbox Code Playgroud)
在作为守护进程运行时,在Java中执行此分叉特权模式的最佳方法是什么?有办法吗?我是否必须打破C并学习如何使用JNI创建JVM?
使用JNI删除权限可能更容易.
这是我之前被淘汰的一个:
UID.java
public class UID {
public static native int setuid(int uid);
static {
System.loadLibrary("uid");
}
}
Run Code Online (Sandbox Code Playgroud)
unix_uid.c
#include <sys/types.h>
#include <unistd.h>
#include <jni.h>
#include "UID.h"
JNIEXPORT jint JNICALL
Java_UID_setuid(JNIEnv * jnienv, jclass j, jint uid)
{
return((jint)setuid((uid_t)uid));
}
Run Code Online (Sandbox Code Playgroud)
UID.h是UID.class使用机器生成的javah.
| 归档时间: |
|
| 查看次数: |
1772 次 |
| 最近记录: |