Opcja sudo -A
(SUDO_ASKPASS) najwyraźniej powoduje, że sudo traci ustawienie limitu czasu (np. Timestamp_timeout).
Chcę użyć opcji sudo -A, ale chcę zachować domyślny limit czasu (np. 15 minut na Ubuntu) w skrypcie bash. Chcę zapytać o hasło użytkownika bezpiecznie w oknie dialogowym GUI, ale chcę tylko raz zapytać o mój skrypt (nie ponad 50 razy).
Co więcej, nie chcę uruchamiać całego skryptu jako użytkownik root, ponieważ uważam, że to zły pomysł. Ponadto pliki utworzone przez mój skrypt mają w tym przypadku niewłaściwe własności.
Opcja sudo -A działałaby dla mnie, gdyby zachowała domyślny limit czasu.
Z podręcznika sudo:
Opcja: –A
Zwykle, jeśli sudo wymaga hasła, odczyta je z terminala użytkownika. Jeśli podano opcję ‑A (askpass), uruchamiany jest (ewentualnie graficzny) program pomocniczy, który odczytuje hasło użytkownika i wyprowadza hasło na standardowe wyjście. Jeśli zmienna środowiskowa SUDO_ASKPASS jest ustawiona, określa ścieżkę do programu pomocniczego. W przeciwnym razie, jeśli /etc/sudo.conf zawiera wiersz określający program askpass, ta wartość zostanie użyta. Na przykład:
# Path to askpass helper program
Path askpass /usr/X11R6/bin/ssh-askpass
BTW, kdesudo ma ten sam problem - wymaga hasła przy każdym wywołaniu, nawet jeśli sekundę później w tym samym skrypcie.
Używam Kubuntu 12.04 64 bit.
Oto pełny przykładowy przykład wszystkich części rozwiązania. Składa się ze skryptu bash, skryptu „myaskpass”, jak sugerowano tutaj , i pliku „.desktop”. Wszystko powinno być w 100% GUI (bez interakcji terminalu), więc plik .desktop jest niezbędny (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=
I sam skrypt testowy. Podczas korzystania z tego rozwiązania ten poprosi o podanie hasła dwukrotnie.
#!/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
cierpi na ten sam problem, który opisałem powyżej. Testowałem sudo -A
jako alternatywę kdesudo
i jest to lepsze w mojej sytuacji, ale to nie rozwiązuje problemu z przekroczeniem limitu czasu (przynajmniej do tej pory).
gksudo
nie ma tu opcji? linux.die.net/man/1/gksudo