A sudo -A
opção (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. Desejo solicitar a senha do usuário com segurança e em uma caixa de diálogo da GUI, mas quero solicitar apenas uma vez o meu script (não mais de 50 vezes).
Além disso, não quero executar todo o meu script como usuário root, porque 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.
No 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 enviar a senha para a saída padrão. Se a variável de ambiente SUDO_ASKPASS estiver configurada, ela especificará 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 esse mesmo problema - requer a senha toda vez que é chamada, mesmo que apenas um segundo depois no mesmo script.
Estou usando o Kubuntu 12.04 de 64 bits.
Aqui está um exemplo completo de todas as partes da solução. Ele consiste em um script bash, um script "myaskpass", conforme sugerido aqui , e um arquivo ".desktop". As coisas devem ser 100% GUI (nenhuma interação terminal), portanto, o arquivo .desktop é essencial (disponível).
$ 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 solicitará 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
kdesudo
sofre o mesmo problema que descrevi acima. Eu estava testando sudo -A
como uma alternativa kdesudo
e é melhor para a minha situação, mas não resolve o problema de tempo limite (pelo menos até agora).
gksudo
é uma opção aqui? linux.die.net/man/1/gksudo