Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 461
BlueChips23 Avatar asked Aug 09 '26 02:08

BlueChips23


1 Answers

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.

like image 185
apangin Avatar answered Aug 11 '26 06:08

apangin



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!