Графически запросите пароль в скрипте bash и сохраните настройку тайм-аута sudo по умолчанию

9

Опция sudo -A(SUDO_ASKPASS), по-видимому, приводит к тому, что sudo теряет настройку timeout (например, timestamp_timeout).

Я хочу использовать параметр sudo -A, но хочу сохранить время ожидания по умолчанию (например, 15 минут в Ubuntu) в скрипте bash. Я хочу запросить пароль пользователя безопасно и в диалоговом окне с графическим интерфейсом, но я хочу только один раз запросить мой сценарий (не более 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 такая же проблема - он требует пароль каждый раз, когда он вызывается, даже если только через секунду в том же скрипте.

Я использую Kubuntu 12.04 64 бит.

Вот полный рабочий пример всех частей решения. Он состоит из сценария bash, сценария «myaskpass», как предлагается здесь , и файла «.desktop». Все это должно быть на 100% графическим интерфейсом (никакого взаимодействия с терминалом вообще), поэтому файл .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=

И сам тестовый скрипт. Этот пользователь дважды запросит ваш пароль при использовании этого решения.

#!/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
MountainX
источник
2
Разве gksudoне вариант здесь? linux.die.net/man/1/gksudo
ОДС
Я нахожусь на 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. Я все еще ищу идеальное решение, но пока что добиваюсь цели.

MountainX
источник
1

Как насчет Гксудо ?

$ gksudo your_app_launcher.sh

Он показывает графическое диалоговое окно для безопасного ввода пароля администратора.

Woohoo
источник