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

7

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
    
por MountainX 30.06.2013 / 01:34

2 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 &

Encontrei aqui:

link

link

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

    
por 10.07.2013 / 08:58
1

Que tal gksudo ?

$ gksudo your_app_launcher.sh

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

    
por 25.10.2014 / 02:47