Tuesday, July 5, 2016

CentOS - à la ligne de commande - 05 : sudo versus su

Mes premières expériences avec la ligne de commande de Linux (CentOS en particulier), m'ont amené à utiliser deux commandes qui se ressemblent par certains côtés mais qu'il convient de distinguer : sudo et su. Voici quelques observations et remarques.

sudo

sudo sert à exécuter une commande que normalement seul root pourrait exécuter. Il faut faire précéder par sudo chaque commande qu'on voudrait exécuter.

Nous avons vu dans un billet précédent que c'est le fait d'appartenir au groupe "wheel" (oui, "roue" en français) qui autorise ce genre d'opération.

su

su sert a emprunter l'identité d'un autre utilisateur après avoir saisi le mot de passe de celui-ci. Il faut donc connaître le mot de passe de l'autre utilisateur.

Une fois que nous "devenons" l'autre utilisateur, nous pouvons exécuter toutes les commandes qu'il pourrait normalement exécuter.

Donnons un exemple (voir la capture d'écran qui suit).

  • Je me connecte d'abord comme Alex Heyne, ou "aheyne", mais je veux emprunter l'identité de "boss" pour exécuter tout un ensemble de tâches (plutôt qu'une ou deux commandes).
  • Je tape "su boss" et je saisis le mot de passe de boss à l'invite.
  • Je tape "whoami" pour vérifier que je suis bien "boss".
  • Je quitte l'identité de "boss" en tapant "exit".




Remarque : à l'invite, nous voyons d'abord...

[aheyne@localhost ~]$

puis...

[boss@localhost aheyne}$

après l'exécution de la commande "su boss" puis...

 [aheyne@localhost ~]$

à nouveau après avoir quitté l'identité de "boss".

Quand nous utilisons "su", le nom de l'utilisateur dont nous empruntons l'identité vient d'abord, suivi du nom de l'utilisateur "effectif", celui qui a ouvert la session initiale.

***

su nous permet d'emprunter l'identité d'un autre utilisateur et d'exécuter des commandes avec ses privilèges. Pourtant, la transformation n'est pas totale. Nous agissons toujours dans l'environnement de l'utilisateur qui a ouvert la session : Alex Heyne dans l'exemple ci-dessus.

Par exemple, que se passe-t-il quand nous exécutons la commande "ls", ciblant le répertoire home de l'utilisateur ?



Avant "su boss", nous voyons s'afficher le contenu du répertoire /home/aheyne.

Après "su boss", j'ai beau avoir emprunté l'identité de boss, je ne peux pas afficher le contenu de son répertoire /home/boss

Mais si nous utilisons l'option "su -l nom d'utilisateur" (-l signifie "logon") c'est comme si nous ouvrions une nouvelle session (logon) en tant que l'utilisateur en question et nous avons accès à tout son environnement.

Quand nous tentons alors d'exécuter la commande "ls", nous pouvons en voir le contenu : dans le cas de "boss", rien.  

***

Si je tape su (sans rien de plus), une invite pour un mot de passe s'affiche.

Mais quel mot de passe ?

Quand nous utilisons sudo, c'est le mot de passe de l'utilisateur en session qui nous saisissons. A condition d'être membre du groupe  "wheel", nous pouvons exécuter des commandes avec les privilèges de root.

Quand nous utilisons su, c'est le mot de passe de l'utilisateur dont nous voulons emprunter l'identité que nous devons saisir.

Dans ce cas particulier, il faut savoir que "su", sans autre paramètre, est en fait un raccourci pour "su root".

Autrement dit, "su" suppose qu'il s'agit de root à moins que nous précisions un autre utilisateur.

Je saisis donc le mot de passe de root (avant d'appuyer sur Retour) et nous constatons que j'ai emprunté l'identité de root.



Pour reprendre l'identité de "boss", il suffit de taper "exit".

Si, pour une raison ou une autre, nous voulons accéder à tout l'environnement de root, nous pouvons ouvrir une session (sans fermer la session courante) comme nous avons fait plus haut, en utilisant la paramètre -l :

su -l












No comments:

Post a Comment