Search code examples
javalinuxsecuritypermissionsuserid

How to start Java program as root but downgrade to non-root user


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://askubuntu.com/questions/62713/how-to-downgrade-user-permissions-on-a-java-app-after-opening-port-80-443

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.


Solution

  • 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.