Графічно запитайте пароль у скрипті bash та збережіть налаштування часу очікування sudo за замовчуванням


9

Опція sudo -A(SUDO_ASKPASS), очевидно, спричиняє sudo для втрати налаштування тайм-ауту (наприклад, timetamp_timeout).

Я хочу використовувати параметр sudo -A, але я хочу зберегти затримку за замовчуванням (наприклад, 15 хвилин на Ubuntu) у скрипті bash. Я хочу запитати пароль користувача у діалоговому вікні графічного інтерфейсу, але я хочу лише один раз підказати про свій сценарій (не 50+ разів).

Крім того, я не хочу запускати весь свій скрипт як користувач root, тому що я просто думаю, що це погана ідея. Крім того, файли, створені за моїм сценарієм, мають неправильне право власності в цьому випадку.

Параметр sudo -A працював би для мене, якби він зберігав тайм-аут за замовчуванням.

З посібника з судо

Варіант: ‑A

Зазвичай, якщо sudo вимагає пароль, він прочитає його з терміналу користувача. Якщо вказана опція ‑A (askpass), виконується (можливо графічна) помічна програма для зчитування пароля користувача та виведення пароля на стандартний вихід. Якщо встановлена ​​змінна середовища SUDO_ASKPASS, вона вказує шлях до допоміжної програми. В іншому випадку, якщо /etc/sudo.conf містить рядок із зазначенням програми запиту, це значення буде використано. Наприклад:

# Path to askpass helper program
Path askpass /usr/X11R6/bin/ssh-askpass

BTW, kdesudo має цю ж проблему - він вимагає пароля щоразу, коли він викликається, навіть якщо лише через секунду в тому ж сценарії.

Я використовую 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=

І сам тестовий сценарій. Цей користувач запитає ваш пароль двічі при використанні цього рішення.

#!/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

Тут відображається графічне діалогове вікно для безпечного введення пароля адміністратора.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.