1

昇格された特権を必要とする別のアプリケーションを実行するタイマーを持つ Java アプリケーションがあります。私はこれをやっています:

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

問題は、タイマーが開始するたびにパスワードが要求されるため、2 秒ごとに取得することです。Javaアプリケーションが実行されている限り、パスワードを再度要求しないように、パスワードを1回だけ要求して昇格したままにする方法はありますか?

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 に答える