【问题标题】:java gksudo persist elevationjava gksudo坚持海拔
【发布时间】:2011-07-12 21:23:50
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java ubuntu gksudo


    【解决方案1】:

    我认为这实际上是不可能的,因为gksudo 不允许您传递密码。但是susudo 确实允许这样做(请参阅How to pass the password to su/sudo/ssh without overriding the TTY?)。

    您可以使用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);
    }
    

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

    【讨论】:

      猜你喜欢
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2011-11-07
      • 2016-05-22
      • 1970-01-01
      相关资源
      最近更新 更多