Eu criei um script bash que usa o kdialog exclusivamente para interagir com o usuário. É iniciado a partir de um arquivo ".desktop" para que o usuário nunca veja o terminal. Parece 100% como um aplicativo GUI (mesmo que seja apenas um script bash). É executado apenas no KDE (Kubuntu 12.04).
Meu único problema é lidar com a entrada de senha de forma segura e conveniente. Não consigo encontrar uma solução satisfatória.
O script foi projetado para ser executado como um usuário normal e solicitar a senha quando um comando sudo for necessário pela primeira vez. Dessa maneira, a maioria dos comandos, aqueles que não exigem direitos sudo, são executados como o usuário normal. O que acontece (quando o script é executado no terminal) é que o usuário solicita sua senha uma vez e o tempo limite padrão do sudo permite que o script termine, incluindo quaisquer comandos adicionais do sudo, sem avisar o usuário novamente. É assim que eu quero que funcione quando executado atrás da GUI também.
O principal problema é que usar kdesudo
para iniciar meu script, que é a maneira GUI padrão, significa que o script inteiro é executado pelo usuário root. Portanto, as propriedades dos arquivos são atribuídas ao usuário raiz, não posso confiar ~/
em caminhos e muitas outras coisas são menos que ideais. A execução de todo o script como usuário root é apenas uma solução muito insatisfatória e acho que é uma prática ruim.
Aprecio todas as idéias para permitir que um usuário digite a senha do sudo apenas uma vez via GUI, enquanto não executa o script inteiro como root. Obrigado.
sudo -s
(minúsculass
) e nãosudo -S
(maiúsculass
).Isso se baseia na excelente resposta de Eric Carvalho. Estou postando para elaborar o problema que encontrei. Especificamente, ao usar isso, o tempo limite usual do sudo (por exemplo, 15 minutos) é perdido. Meu script, que possui mais de 50 comandos sudo, solicita a senha do usuário mais de 50 vezes!
Aqui está um exemplo completo de todas as partes da solução. Ele consiste em um script bash, um script "myaskpass", como Eric sugeriu, e um arquivo ".desktop". O conjunto deve ser 100% GUI (sem nenhuma interação terminal); portanto, o arquivo .desktop é essencial (disponível).
E um script de teste em si. Este solicitará sua senha duas vezes ao usar esta solução. (Normalmente, ele solicita apenas uma vez devido ao tempo limite padrão do sudo.)
fonte
sudo -A
obtêm a senha. Vou tentar descobrir isso.O script a seguir funciona via linha de comando, arquivo da área de trabalho ou clique duas vezes, solicita a senha apenas uma vez e o padrão de comando
sudo -Sp '' <your command here> <<<${sudo_password}
pode ser usado várias vezes em qualquer lugar do arquivo:fonte