2011-07-12 14 views
1

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

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

問題はタイマーがキックオフたびに、それがパスワードを要求し、私は2秒ごとにそれを得ることです。一度だけパスワードを要求してから昇格したままにする方法はありますか?そうすれば、Javaアプリケーションが実行されている限り、再度尋ねられません。

gconf-editorを使ってapps/gksu/save-to-keyringオプションを変更しようとしましたが、何も変更されませんでしたが、とにかく原子力オプションと思われます。

答えて

0

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); 
} 

のようになります。私は(パスワードを保存する)、このことを示唆するために私を嫌いにセキュリティ専門家の疑いがあるため、注意して使用します。

関連する問題