Peça graficamente a senha em um script bash e mantenha a configuração padrão de tempo limite do sudo

9

A sudo -Aopçã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
MountainX
fonte
2
Não gksudoé uma opção aqui? linux.die.net/man/1/gksudo
slm
Estou no KDE, então o gksudo não é uma opção para mim, mas me disseram que funciona da mesma forma que o kdesudo. kdesudosofre o mesmo problema que descrevi acima. Eu estava testando sudo -Acomo uma alternativa kdesudoe é melhor para a minha situação, mas não resolve o problema de tempo limite (pelo menos até agora).
MountainX

Respostas:

7

Eu adiciono isso ao meu 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 &

Encontre aqui:

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

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

Uso outro script para iniciar o script principal e uso um arquivo .desktop para iniciar o script auxiliar. Não é muito simples, mas pode ser feito para funcionar 100% GUI. Ainda estou procurando a solução perfeita, mas isso está fazendo o truque por enquanto.

MountainX
fonte
1

E o gksudo ?

$ gksudo your_app_launcher.sh

Ele mostra uma caixa de diálogo gráfica para inserir com segurança a senha do administrador.

woohoo
fonte