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.
kdesudo
est 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 ksshaskpass
et ssh-askpass
, mais les deux disent qu'ils ne sont pas destinés à être appelés directement.
Je suis pas faire quelque chose avec ssh
name__.
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 zenity
ou kdialog
name__) pour communiquer avec l'utilisateur.
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.
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
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.
Avez-vous essayé pkexec
pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY gedit