Fork y suelte privilegios con Java
Estoy escribiendo un programa de servidor en Java que permitirá a los usuarios enviar trabajos utilizando DRMAA. Aunque el proceso del servidor principal se ejecuta comoroot
, todo lo que hace es autenticar al usuario, luego inicia otro programa Java que se ejecuta como ese usuario y que realmente hace el trabajo para cumplir con el principio de minimizar los privilegios. Inicialmente, estaba haciendo esto conRuntime.exec()
ysudo
(ejemplo a continuación) que funciona bien hasta que se damonice el proceso, momento en el quesudo
se molesta porque no tiene una terminal.
String[] command = {"sudo", "-i", "-u", username, java, theOtherJavaProgram};
Runtime.getRuntime().exec(command, null, getHomeDirectory(username));
¿Cuál es la mejor manera de hacer este patrón de privilegios de fork y drop en Java cuando se ejecuta como daemon? ¿Hay alguna manera? ¿Voy a tener que romper la C y aprender a crear JVM con JNI?