如何以root身份启动Java程序,但降级为非root用户

3

我正在编写一个Java程序,它将在Linux服务器上运行。该程序需要以“root”身份启动,执行某个操作(读取文件),然后在文件被读取和关闭后降级为非root用户。

我阅读了以下问题,但没有找到可行的解决方案 - 特别是因为我没有处理http端口。

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

如何以root身份运行Java程序的一部分

有没有实现我想做的事情的任何想法?

已解决:正如答案中建议的那样,JNA为我解决了问题。


1
我不确定如何在Java中实现,但在Unix中它被称为Bernstein Chaining或https://en.wikipedia.org/wiki/Chain_loading。 - Neil McGuigan
1个回答

1

很遗憾,在纯Java中没有方法可以做到这一点。
但是您可以使用JNI或JNA调用setuid系统函数。
例如,您可以重用jetty-setuid包来实现:JAR + Native library


我认为处理这个问题的唯一可行方式是调用setuid系统函数。这不是一个比较常见的问题吗?通常需要执行某些特定“root”相关任务的应用程序应该以root身份启动,但出于安全考虑,它们应该尽快降级为非root用户。 - BlueChips23
我之前不知道JNA。我进行了一些测试,JNA完美地运行 - 正是我所需要的。 - BlueChips23

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接