web-dev-qa-db-fra.com

Comment exécuter un Sudo graphique à bash sur kubuntu 18.04 maintenant que kdesudo est parti?

TL; DR: Quelle est la nouvelle méthode correcte pour créer un Sudoà partir d’un script Shell?

Fléau:

Je viens de passer de kubuntu 16.04 à 18.04 et je fais le triage normal.

kdesudoest parti en 18.04 (non maintenu).

Je l'utilise beaucoup dans les scripts bash avec interface graphique GUI.

Certains post ont déclaré utiliser kdesu- ce qui semble étrange. Il me semble rappeler que cela gêne l'utilisateur effectif ou quelque chose comme ça.

Ce n'est pas installé dans mon chemin.

Je l'ai trouvé à

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

qui dit encore kde4.

J'ai essayé Sudo -A ls

et il a dit

bigbird@sananda:~$ Sudo -A ls
Sudo: no askpass program specified, try setting Sudo_ASKPASS

Je suis allé dans quelques cercles en regardant ksshaskpasset ssh-askpass, mais les deux disent qu'ils ne sont pas destinés à être appelés directement.

Je suis pas faire quelque chose avec sshname__.

J'ai besoin de cela pour les scripts bash qui font presque tout en tant qu'utilisateur normal, puis exécutent une ou deux commandes en tant que root. Ces scripts sont souvent lancés à partir d'icônes de bureau sur lesquelles aucune fenêtre de terminal n'est ouverte (et je n'en ai pas besoin ou n'en veux pas.) Ils utilisent souvent yad(comme zenityou kdialogname__) pour communiquer avec l'utilisateur.

4
Joe

Comme vous l'avez découvert, vous pouvez utiliser l'option -A avec Sudo, mais vous avez besoin d'une méthode graphique pour fournir le mot de passe à Sudo.

Vous pouvez écrire un tel outil quand vous le voulez, à condition qu'il renvoie le mot de passe à Sudo sur stdout. J'utilise une solution simple, suggérée il y a très longtemps par quelqu'un, qui utilise kdialog. Comme toutes les solutions simples, cette solution est restée la mienne depuis.

Alors créez vous-même un script kdialog simple, comme celui-ci

    #!/bin/bash
    kdialog --password "Password required to proceed"

Maintenant, vous utilisez ceci avec Sudo comme ceci

    #!/bin/bash
    export Sudo_ASKPASS=<path to your kdialog script>
    Sudo -A foo

Vous pouvez bien sûr utiliser la langue de votre choix pour votre fournisseur de mots de passe d'interface graphique si vous n'avez pas kde

EDIT: Solution pour contourner Sudo passwd_tries

Pour pouvoir demander le mot de passe une seule fois (comme vous le souhaitez), vous pouvez capturer le mot de passe dans une variable du script et la transmettre directement à la commande Sudo à l'aide du commutateur -S.

Cela présente l’avantage de ne pas tenir compte de la règle Sudo passwd_tries et de requérir la saisie interactive du mot de passe. Le mot de passe n’est donc pas stocké dans le script.

PASSWD=$(kdialog --password "Sudo password required")
echo $PASSWD | Sudo -S foo

Vous pouvez également le faire directement sur une ligne, si vous n'avez pas besoin de plusieurs commandes Sudo dans le script, comme ceci

echo $(kdialog --password "Sudo password required") | Sudo -S foo

Et bien sûr, vous pouvez utiliser votre propre script kdialog dont nous avons déjà parlé au lieu d’utiliser kdialog ici, si vous souhaitez une invite kdialog standard dans tous vos scripts.

Le problème en contournant les mots de passe de Sudo, de mon point de vue, est que si le mot de passe est incorrect, votre script continue à traiter les commandes après la commande Sudo. Par conséquent, si la commande élevée Sudo est essentielle au succès du script, vous rencontrez des problèmes.

La mise en garde est que le mot de passe de kdialog (ou une alternative telle que zenity) est écrit sur stdout, quelque chose que j'aurais dû mentionner auparavant, de sorte que toute personne ayant capturé la stdout du PID verra votre mot de passe. Mais alors, tout pirate informatique sur votre système ferait beaucoup plus que cela.

3
nobody special

Non seulement kdesudo, mais gksu est également obsolète. Ces changements sont au moins légèrement gênants. Il semble que l’approche que nous sommes censés adopter consiste à utiliser le préfixe admin://, par exemple, si vous utilisiez kdesudo gedit /etc/default/grub à présent, vous utiliseriez plutôt gedit admin:///etc/default/grub. Il faudra certainement s’y habituer si je supprime 16.04 pour une version "nouvelle et améliorée".

Une autre solution possible serait simplement lancez le script dans un terminal pour commencer.

Source: https://www.linuxuprising.com/2018/04/gksu-removed-from-ubuntu-heres.html

0
Elder Geek

Je viens de trouver des réponses ici .

L'essentiel est:

Pour le moment, une solution consiste à rechercher l'emplacement où kdesu est installé sur votre système.

que vous pouvez faire avec

ls -l /etc/alternatives/kdesu

ajoutez ensuite un alias pour kdesudo à $HOME/.bashrc ou, si vous l’utilisez, à $HOME/.bash_aliases.

L'alias est

## Resurect kdesudo - this will probably fail eventually
alias kdesudo='/usr/lib/kde4/libexec/kdesu-distrib/kdesu'

en veillant à ajuster le chemin d'accès à kdesu à celui que vous avez trouvé à l'étape ci-dessus.

Cela ne fonctionnera pas pour certains programmes sous KDE car

Les développeurs de KDE travaillent sur un itinéraire polkit pour autoriser des privilèges élevés temporaires pour d'autres applications, comme ils l'ont déjà fait pour Kate. - GreyGeek

et quand ils le font, ils désactivent l'altitude directe parce que (si cela fonctionne correctement), vous n'en avez plus besoin. Le programme demande simplement un mot de passe lorsqu'il doit effectuer une opération privilégiée. Il reste à voir comment cela fonctionnera dans un script.

0
Joe

Avez-vous essayé pkexec

pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit
0
papampi