Опция 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
kdesudo
страдает та же проблема, которую я описал выше. Я тестировал sudo -A
как альтернативу, kdesudo
и это лучше для моей ситуации, но это не решает проблему тайм-аута (по крайней мере, пока).
gksudo
не вариант здесь? linux.die.net/man/1/gksudo