sudo -A
(SUDO_ASKPASS)オプションは、明らかな原因は、タイムアウト(例えば、timestamp_timeout)の設定を失うことSUDO。
sudo -Aオプションを使用したいが、bashスクリプトでデフォルトのタイムアウト(Ubuntuでは15分など)を保持したい。ユーザーのパスワードを安全にGUIダイアログで要求したいのですが、スクリプトの入力を1回だけ要求します(50回以上は要求しません)。
さらに、スクリプト全体をrootユーザーとして実行したくありません。これは悪い考えです。さらに、この場合、私のスクリプトによって作成されたファイルの所有権は正しくありません。
sudo -Aオプションは、デフォルトのタイムアウトを保持している場合は機能します。
sudoマニュアルから:
オプション:‑A
通常、sudoがパスワードを必要とする場合、ユーザーの端末からそれを読み取ります。‑A(askpass)オプションを指定すると、(おそらくグラフィカルな)ヘルパープログラムが実行され、ユーザーのパスワードが読み取られ、パスワードが標準出力に出力されます。SUDO_ASKPASS環境変数が設定されている場合は、ヘルパープログラムへのパスを指定します。それ以外の場合、/ etc / sudo.confにaskpassプログラムを指定する行が含まれていれば、その値が使用されます。例えば:
# Path to askpass helper program
Path askpass /usr/X11R6/bin/ssh-askpass
ちなみに、kdesudoにも同じ問題があります。たとえ同じスクリプトで1秒後でも、呼び出されるたびにパスワードが必要です。
Kubuntu 12.04 64ビットを使用しています。
以下は、ソリューションのすべての部分の完全に機能する例です。これは、bashスクリプト、ここで提案されている「myaskpass」スクリプト、および「.desktop」ファイルで構成されています。すべてが100%GUIである必要があります(端末の相互作用はまったくありません)。したがって、.desktopファイルは不可欠です(afaik)。
$ cat myaskpass.sh
#!/bin/bash
kdialog --password "Please enter your password: "
exit 0
$ cat askpasstest1.desktop
#!/usr/bin/env xdg-open
[Desktop Entry]
Comment=SUDO_ASKPASS tester1
Exec=bash /home/user/test/askpasstest1.sh
GenericName=SUDO_ASKPASS tester1
Name=SUDO_ASKPASS tester1
NoDisplay=false
Path[$e]=
StartupNotify=true
Terminal=false
TerminalOptions=
Type=Application
Categories=Application;Utility;
X-KDE-SubstituteUID=false
X-KDE-Username=
そしてテストスクリプト自体。このソリューションを使用する場合、これはパスワードを2回要求します。
#!/bin/bash
sudo -k
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass1
touch filemadeas_regularuser1
SUDO_ASKPASS="/home/user/test/myaskpass.sh" sudo -A touch filemadeas_askpass2
touch filemadeas_regularuser2
ls -la filemadeas* > /home/user/test/fma.log
kdialog --title "Files Created" --textbox /home/user/test/fma.log 640 480
sudo rm filemadeas_*
rm fma.log
exit 0
kdesudo
上で説明したのと同じ問題が発生します。私はsudo -A
の代替としてテストしており、kdesudo
私の状況には適していますが、タイムアウトの問題は解決していません(少なくとも今のところ)。
gksudo
ここにオプションはありませんか?linux.die.net/man/1/gksudo