Bashスクリプトからグラフィックでパスワードを要求し、デフォルトのsudoタイムアウト設定を維持します。

Bashスクリプトからグラフィックでパスワードを要求し、デフォルトのsudoタイムアウト設定を維持します。

(SUDO_ASKPASS)オプションは、sudo -Asudoがタイムアウト(timestamp_timeoutなど)設定を失うように見えます。

sudo -Aオプションを使用したいのですが、bashスクリプトのデフォルトのタイムアウト(Ubuntuでは15分など)を維持したいと思います。 GUIダイアログでユーザーにパスワードを安全に尋ねたいのですが、スクリプトについては一度だけ尋ねるメッセージを表示したい(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ファイルは必須です(私の知る限り)。

$ 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

ベストアンサー1

私のBashスクリプトに以下を追加しました。

# ask for password up-front.
sudo -v
# Keep-alive: update existing sudo time stamp if set, otherwise do nothing.
while true; do sudo -n true; sleep 60; kill -0 "$$" || exit; done 2>/dev/null &

ここで見つける:

https://serverfault.com/questions/266039/temporarlly-increasing-sudos-timeout-for-the-duration-of-an-install-script

https://gist.github.com/cowboy/3118588

別のスクリプトを使用してデフォルトのスクリプトを起動し、.desktopファイルを使用してヘルパースクリプトを起動します。それほど簡単ではありませんが、100%GUIで動作するようにすることができます。私はまだ完璧なソリューションを探していますが、今はこれが役に立ちます。

おすすめ記事