Richiedere graficamente la password in uno script bash e conservare le impostazioni predefinite di timeout sudo


9

L' sudo -Aopzione (SUDO_ASKPASS) sembra che sudo perda l'impostazione del timeout (es. Timestamp_timeout).

Voglio usare l'opzione sudo -A ma voglio mantenere il timeout predefinito (ad es. 15 minuti su Ubuntu) in uno script bash. Voglio chiedere la password dell'utente in modo sicuro e in una finestra di dialogo della GUI, ma voglio richiedere una sola volta il mio script (non più di 50 volte).

Inoltre, non voglio eseguire l'intero mio script come utente root perché penso solo che sia una cattiva idea. Inoltre, i file creati dal mio script hanno la proprietà errata in questo caso.

L'opzione sudo -A funzionerebbe per me se conservasse il timeout predefinito.

Dal manuale di sudo:

Opzione: -A

Normalmente, se sudo richiede una password, la leggerà dal terminale dell'utente. Se viene specificata l'opzione ‑A (askpass), viene eseguito un programma di supporto (possibilmente grafico) per leggere la password dell'utente e inviarla all'output standard. Se la variabile di ambiente SUDO_ASKPASS è impostata, specifica il percorso del programma di supporto. Altrimenti, se /etc/sudo.conf contiene una riga che specifica il programma askpass, verrà utilizzato quel valore. Per esempio:

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

A proposito, kdesudo ha questo stesso problema: richiede la password ogni volta che viene chiamato, anche se solo un secondo dopo nello stesso script.

Sto usando Kubuntu 12.04 64 bit.

Ecco un esempio di lavoro completo di tutte le parti della soluzione. Consiste in uno script bash, uno script "myaskpass" come suggerito qui e un file ".desktop". Il tutto dovrebbe essere al 100% GUI (nessuna interazione terminale), quindi il file .desktop è essenziale (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=

E uno script di prova stesso. Questo ti chiederà due volte la password quando usi questa soluzione.

#!/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
Non gksudoè un'opzione qui? linux.die.net/man/1/gksudo
slm

Sono su KDE, quindi gksudo non è un'opzione per me, ma mi è stato detto che funziona allo stesso modo di Kdesudo. kdesudosoffre dello stesso problema che ho descritto sopra. Stavo testando sudo -Aun'alternativa kdesudoed è migliore per la mia situazione, ma non risolve il problema del timeout (almeno finora).
MountainX

Risposte:


7

Aggiungo questo al mio script 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 &

Trovato qui:

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

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

Uso un altro script per avviare il mio script principale e utilizzo un file .desktop per avviare quello script di supporto. Non è molto semplice, ma può essere fatto funzionare al 100% della GUI. Sto ancora cercando la soluzione perfetta, ma questo è il trucco per ora.


1

Che ne dici di gksudo ?

$ gksudo your_app_launcher.sh

Mostra una finestra di dialogo grafica per l'immissione sicura della password dell'amministratore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.