Monthly Archives: décembre 2012

Sudo et le path

Problème : L’exécution d’une commande par son simple nom via sudo peut parfois provoquer l’erreur suivante : command not found. Cela se produit quand l’éxécutable n’est pas dans le path « standard »

Cas concret : Grâce à l’enrichissement de son path dans le fichier ~/.bashrc, l’utilisateur jerep6 peut exécuter des scripts de situant dans le dossier /home/jerep6/bin/.

PATH=$PATH:$HOME/bin

Exemple :

$ mon_script1 10 50
somme=60

Si l’utilisateur souhaite exécuter ce même script avec sudo, il devra saisir le chemin absolu ou relatif d’accès au fichier.

$ sudo mon_script1 10 50
[sudo] password for jerep6:
sudo: mon_script1: command not found

$ sudo bin/mon_script1 10 50
bin/mon_script1: line 79: mon_script2.sh: command not found

En indiquant le chemin, le script « mon_script1 » est bien exécuté, mais produit une erreur car il appelle « mon_script2 » qui lui n’est pas trouvé. J’ai en effet utilisé le nom de la commande qui est supposée être dans le path.

Explications :
Sudo n’utilise pas le path de l’utilisateur mais son propre path qui ne contient pas /home/jerep6/bin/

Sur debian squeeze, sudo est compilé avec le flag –with-secure-path. Ainsi lorsque l’utilisateur exécute une commande avec sudo, le path pris en compte est le secure-path :
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin

Il est possible de le redéfinir en renseignant le fichier /etc/sudoers via la commande visudo :

Defaults        secure_path=/usr/bin

Il existe plusieurs possibilités pour manipuler le path de sudo. Voici celles que j’ai testées :

  1. Désactiver le secure_path. Le path sera celui de l’utilisateur. Cela peut toutefois poser des problèmes si les commandes présentes dans le script ne sont pas dans le path de ce dernier mais dans celui de root (/sbin par exemple).
  2. Modifier le secure_path. Le secure path permet d’avoir un PATH « propre » pour exécuter les applications nécessitant les droits d’administration.
  3. Jouer avec exempt_group. Tous les utilisateurs du groupe spécifié seront déchargés de la saisie du mot de passe et du secure_path
  4. Passer l’argument « -i » à sudo. Cela a pour effet de simuler une connexion. Cela signifie que les fichiers .profile, .bashrc ou .login seront lus par le shell. Les variables DISPLAY et TERM ne sont pas modifiée. En revanche, HOME, MAIL, SHELL, USER, LOGNAME et PATH sont positionnées. Le path est donc celui de l’utilisateur root et pas celui de secure_path
  5. Passer l’argument « -s » provequera l’exécution de /root/.bashrc (idem que -i) mais pas le profile. Le path sera celui de secure_path. Il est donc possible d’enrichir le secure_path dans le .bashrc

Connaitre le path utilisé par sudo :

sudo sh -c 'echo $PATH'
→ path de sudo

La commande précédente donne donne le path de sudo tandis que la suivante renvoie celui de l’utilisateur car le shell évalue (expands) la variable $PATH avant que sudo ne soit exécuté.

sudo echo $PATH
→ path de l'utilisateur et non celui de sudo

Firefox raccourcis de recherche

Voici une petite astuce permettant de rechercher à partir de la barre d’adresse via le pattern suivant : raccourci_moteur_de_recherche mot_recherché

Pour cela, il suffit de :

  1. Placer une recherche en marque page. Par exemple http://www.wordreference.com/enfr/house
  2. Ouvrir les propriétés du marque page
  3. Identifier le mot recherché (ici house) et le remplaçer par %s
  4. Ajouter un mot clé au marque page (ici w)
  5. Sauvegarder le marque page

Vous pouvez à présent chercher sur le site wordreference en tapant dans la barre d’adresse ceci : w road. Vous serez redirigés vers la page suivante.

Exemple d'un marque page de recherche