A opção sudo -A
(SUDO_ASKPASS) aparentemente faz com que o sudo perca a configuração de tempo limite (por exemplo, timestamp_timeout).
Eu quero usar a opção sudo -A, mas quero manter o tempo limite padrão (por exemplo, 15 minutos no Ubuntu) em um script bash. Eu quero pedir a senha do usuário com segurança e em uma caixa de diálogo GUI, mas eu só quero solicitar uma vez para o meu script (e não mais de 50 vezes).
Além disso, não quero executar todo o meu script como o usuário raiz, pois acho que é uma má ideia. Além disso, os arquivos criados pelo meu script têm a propriedade errada neste caso.
A opção sudo -A funcionaria para mim se mantivesse o tempo limite padrão.
Do manual do sudo:
Opção: -A
Normalmente, se o sudo exigir uma senha, ela será lida no terminal do usuário. Se a opção -A (askpass) for especificada, um programa auxiliar (possivelmente gráfico) será executado para ler a senha do usuário e gerar a senha para a saída padrão. Se a variável de ambiente SUDO_ASKPASS estiver definida, ela especifica o caminho para o programa auxiliar. Caso contrário, se /etc/sudo.conf contiver uma linha especificando o programa askpass, esse valor será usado. Por exemplo:
# Path to askpass helper program
Path askpass /usr/X11R6/bin/ssh-askpass
BTW, o kdesudo tem o mesmo problema - requer a senha toda vez que é chamado, mesmo que seja apenas um segundo depois no mesmo script.
Estou usando o Kubuntu 12.04 64 bit.
Aqui está um exemplo de trabalho completo de todas as partes da solução. Ele consiste em um script bash, um script "myaskpass" como sugerido aqui e um arquivo ".desktop". As coisas inteiras devem ser 100% GUI (nenhuma interação terminal), então o arquivo .desktop é essencial (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 um script de teste em si. Este pedirá sua senha duas vezes ao usar esta solução.
#!/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