TL;DR: Qual é a nova maneira correta de fazer um gráfico a sudo
partir de um script de shell?
Debatendo:
Acabei de atualizar do kubuntu 16.04 para 18.04 e estou fazendo a triagem normal.
kdesudo
desapareceu em 18.04 (sem manutenção).
Eu o uso muito em scripts bash com GUI i/o.
Algumas postagens diziam usar kdesu
- o que parece estranho. Parece que me lembro que isso mexe com o usuário efetivo ou algo assim.
Isso não está instalado no meu PATH.
eu encontrei em
bigbird@sananda:~/pq$ ls -l /etc/alternatives/kdesu
rwxrwxrwx 1 root root 41 Aug 19 03:23 /etc/alternatives/kdesu ->
/usr/lib/kde4/libexec/kdesu-distrib/kdesu
que ainda diz kde4.
eu tenteisudo -A ls
e disse
bigbird@sananda:~$ sudo -A ls
sudo: no askpass program specified, try setting SUDO_ASKPASS
Eu andei em alguns círculos olhando ksshaskpass
e ssh-askpass
, mas ambos dizem que não devem ser chamados diretamente.
Eu não estou fazendo nada com ssh
.
Eu preciso disso para scripts bash que fazem quase tudo como um usuário normal e, em seguida, executam um ou dois comandos como root. Esses scripts geralmente são iniciados a partir de ícones da área de trabalho onde não há janela de terminal aberta (e eu não preciso ou quero uma). Eles geralmente usam yad
(como zenity
ou kdialog
) para interagir com o usuário.
Como você descobriu, pode usar a opção -A com o sudo, mas precisa de um método gui para fornecer a senha ao sudo.
Você pode escrever essa ferramenta da maneira que quiser, desde que passe a senha de volta para sudo em stdout. Eu uso uma solução simples que alguém me sugeriu há muito tempo, que usa o kdialog e, como todas as soluções simples, continua sendo minha escolha desde então.
Então crie você mesmo um script kdialog simples, como este
Agora você usa isso com sudo assim
É claro que você pode usar qualquer idioma que desejar para o provedor de senha do gui, se não tiver o kde
EDIT: Solução para ignorar sudo passwd_tries
Para que você possa pedir a senha apenas uma vez (como você deseja fazer), você pode capturar a senha em uma variável dentro do script e passar essa variável diretamente para o comando sudo usando a opção -S.
Isso tem a vantagem de ignorar a regra sudo passwd_tries e ainda requer a entrada de senha interativa, portanto, a senha não é armazenada no script.
Você também pode fazer isso diretamente em uma linha, se não precisar de vários comandos sudo no script, como este
E é claro que você pode usar seu próprio script kdialog que discutimos anteriormente em vez de usar o kdialog aqui, se desejar um prompt padrão do kdialog em todos os seus scripts.
O problema ao ignorar passwd_tries do sudo, do meu ponto de vista, é que, se você errar a senha, seu script continuará processando todos os comandos após o comando sudo; portanto, se o comando elevado sudo for crítico para o sucesso do script, você terá problemas.
A ressalva é que a senha do kdialog (ou alternativa como zenity) está escrita em stdout, algo que eu deveria ter mencionado antes, então qualquer pessoa que tenha capturado o stdout do PID verá sua senha. Mas qualquer hacker em seu sistema estaria fazendo muito mais do que apenas isso.
Você tentou
pkexec
Não apenas o kdesudo, mas também
gksu
está obsoleto. Essas mudanças são pelo menos levemente irritantes. Parece que a abordagem que devemos adotar agora é utilizar oadmin://
prefixo, por exemplo, se você costumava usarkdesudo gedit /etc/default/grub
agora, em vez dissogedit admin:///etc/default/grub
, definitivamente levará algum tempo para se acostumar se eu abandonar o 16.04 para uma versão "nova e aprimorada".Outra solução possível seria simplesmente iniciar o script em um terminal para começar.
Fonte: https://www.linuxuprising.com/2018/04/gksu-removed-from-ubuntu-heres.html
Acabei de encontrar algumas respostas aqui .
A essência disso é:
Por enquanto, uma solução alternativa é descobrir onde
kdesu
está instalado em seu sistemacom o qual você pode fazer
e, em seguida, adicione um alias para
kdesudo
to$HOME/.bashrc
ou, se você usá-lo, to$HOME/.bash_aliases
.O pseudônimo é
certificando-se de ajustar o caminho para
kdesu
aquele que você encontrou na etapa acima.Isso não funcionará para alguns programas no KDE porque
e quando o fazem, desativam a elevação direta porque (se funcionar direito) você não precisa mais dela. O programa apenas pede uma senha quando precisa fazer uma operação privilegiada. Resta saber como isso funcionará em um script.