从 java 请求 root 权限以重启 systemctl 服务

request root permissions from java to restart systemctl services

我正在编写一个应用程序来更改 Windows 和 Ubuntu 上的 IP 地址。我需要以 root 身份在终端中 运行 一些命令,所以我需要调用本机 ubuntu(和其他 linux 发行版)对话框,在输入 root 密码后授予 root 权限。

如何调用这个对话框?

这是我需要 运行 作为 root 从 java 代码执行的命令,也许它可以提供帮助。

ProcessBuilder builder = new ProcessBuilder("/bin/bash",
                        "-c",
                        "systemctl restart networking")
                        .redirectErrorStream(true);

对于初学者来说,Windows 和 Ubuntu 的过程不同,所以我将重点放在 Ubuntu 上。如果您的应用程序需要 运行 跨平台,您可能需要先进行某种系统识别。然后你可以在代码中应用StrategyPattern来处理让你的应用程序获得root或管理员权限的各种方式

据我了解,您的最终目标是以 root 用户身份执行命令,在这种情况下,有多种方法可以达到此目的

1) 您可以 运行 您的 Java 应用程序作为根 。这意味着该应用程序只能由根用户执行。这是特别有利的,因为 root 用户可能由于某种原因不可用,而您可以让用户处理该问题。它应该是这样的:

sudo java -jar myapp.jar

2) 使用带有“-S”开关的'sudo'并将用户密码传递给进程标准输入。这要求用户在 sudoers 配置文件中注册,并设置权限以执行 运行 命令。这可能意味着您在启动期间将密码作为参数传递给您的应用程序。

3) 使用 'gksudo' 自动弹出密码对话框。它还要求用户在 sudoers 配置文件中注册,当然,'gksudo' 可用。对于这种方法,它看起来像这样

String[] command = {"gksudo", "systemctl restart networking"};
Process p = Runtime.getRuntime().exec(command);