bashスクリプトでグラフィカルにパスワードを要求し、デフォルトのsudoタイムアウト設定を保持する


9

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

2
gksudoここにオプションはありませんか?linux.die.net/man/1/gksudo
slm

私はKDEを使用しているので、gksudoはオプションではありませんが、kdesudoと同じように機能すると言われました。kdesudo上で説明したのと同じ問題が発生します。私はsudo -Aの代替としてテストしており、kdesudo私の状況には適していますが、タイムアウトの問題は解決していません(少なくとも今のところ)。
MountainX

回答:


7

これを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 &

ここで見つかりました:

/server/266039/temporarlly-increasing-sudos-timeout-for-the-duration-of-an-install-script

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

別のスクリプトを使用してメインスクリプトを起動し、.desktopファイルを使用してそのヘルパースクリプトを起動します。それほど単純ではありませんが、100%GUIで動作するように作成できます。私はまだ完璧な解決策を探していますが、今のところこれでうまくいきます。


1

どの程度gksudo

$ gksudo your_app_launcher.sh

管理者パスワードを安全に入力するためのグラフィカルダイアログが表示されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.