I am writing a Java program which will be running on Linux servers. The program needs to start as "root", do a certain operation (reading a file), and then downgrade itself to a non-root user, after the file has been read and closed.
I read through the following questions, but I haven't found a viable solution - especially since I am not dealing with http ports.
https://serverfault.com/questions/112795/how-can-i-run-a-server-on-linux-on-port-80-as-a-normal-user
Running a part of a Java Program as Root
Any ideas on how to implement what I am trying to do?
SOLVED: As suggested in the answer, JNA did the trick for me.
Unfortunately there is no way to do this in pure Java.
But you can use JNI or JNA to call setuid
system function.
For instance, you may reuse jetty-setuid
package for doing so: JAR + Native library.