web-dev-qa-db-fra.com

Exécuter des programmes comme Sudo ne fonctionne pas

L'installation d'outils et d'autres outils en ligne de commande dans Ubuntu 18.04 avec Sudo fonctionne parfaitement. exemple: Sudo apt install ... fonctionne parfaitement. L'exécution d'outils et de programmes via la ligne de commande sous Sudo ne fonctionne pas du tout. L'exécution des mêmes programmes et outils qu'un utilisateur normal fonctionne parfaitement. Exemple: start gtkwave comme un utilisateur normal fait apparaître l'interface graphique de gtkwave. Démarrez gtkwave en tant que Sudo, demande le mot de passe, puis se termine par: Sudo: gtkwave: command not found.

Je dois dire que certains outils appelés sur la ligne de commande en tant que Sudo fonctionnent parfaitement, par exemple, je peux démarrer Atom à partir de la ligne de commande en tant qu'utilisateur normal et en tant que Sudo.

C’est peut-être parce que les outils/programmes ne fonctionnant pas sous Sudo ne sont pas installés dans les dossiers Linux communs tels que /bin ou /usr/bin, mais en tant que programmes sous /opt (ils sont ajoutés au chemin ensemble des environnements nécessaires)?

Quelqu'un a-t-il une idée de pourquoi cela se produit?

2
defossez

Par défaut, Sudo recherche les programmes en utilisant son propre secure_path défini dans le fichier /etc/sudoers. De man sudoers:

 secure_path   Path used for every command run from Sudo.  If you don't
               trust the people running Sudo to have a sane PATH environ‐
               ment variable you may want to use this.  Another use is if
               you want to have the “root path” be separate from the “user
               path”.  Users in the group specified by the exempt_group
               option are not affected by secure_path.  This option is not
               set by default.

Notez que, malgré la dernière ligne, Ubuntu /etc/sudoers par défaut le configure :

Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

ainsi, ni PATH de l'utilisateur appelant, ni PATH de la racine ne détermineront si les programmes sont localisés lors de l'utilisation de Sudo.

Si vous voulez vraiment que les programmes situés dans des emplacements tels que /opt soient exécutables via Sudo, vous devrez soit:

  • utilisez le chemin complet, par exemple Sudo /opt/somepath/bin/prog

  • modifiez le sudoers secure_path pour inclure les emplacements - si vous décidez de le faire, veuillez utiliser Sudo visudo pour intercepter les erreurs de syntaxe (sinon vous risqueriez de vous isoler complètement de Sudo).

Cependant, vous devriez probablement lire Pourquoi les utilisateurs ne devraient-ils jamais utiliser Sudo pour lancer des applications graphiques? avant de continuer.

1
steeldriver