1

我有一个 java 应用程序,它有一个计时器,它执行需要提升权限的单独应用程序。我一直在这样做:

String command = "gksudo /home/bob/sensor";
Process child = Runtime.getRuntime().exec(command);

问题是每次定时器启动时,它都会请求密码,所以我每两秒就得到一次。有没有办法只请求一次密码然后保持提升,这样只要 java 应用程序正在运行它就不会再次询问?

我尝试使用 gconf-editor 更改 apps/gksu/save-to-keyring 选项,但这并没有改变任何东西,而且我认为这可能是一个核选项。

4

1 回答 1

0

我认为这实际上是不可能的,因为gksudo不允许您传递密码。但是susudo请允许这样做(请参阅如何在不覆盖 TTY 的情况下将密码传递给 su/sudo/ssh?)。

您可以使用gksudo -p图形身份验证窗口并检索密码。然后下次你不需要 gksudo 时,因为无论如何你都不想询问密码。

可能看起来像这样

String sessionPassword = null;
String command = "/my/elevated/app";

void executeStuff() {
    // Get the password in case it does not exist yet
    if( sessionPassword == null )
      sessionPassword = exec("gksudo -p -m 'Please enter you password once.'");

    // Construct the command
    String elevatedCommand = "echo '"+ sessionPassword +"' | sudo -S " + command;

    // Launch elevated
    Process child = Runtime.getRuntime().exec(elevatedCommand);
}

我怀疑安全专家会因为我的建议(存储密码)而讨厌我,所以请小心使用。

于 2011-09-13T18:03:33.320 回答