sudo, su, su – : À quoi servent ces commandes sous Linux ? Quelles sont les différences ?
Sommaire
I. Présentation
Sous Linux, l'exécution d'une commande avec des privilèges élevés passe par l'utilisation de la commande sudo
. Néanmoins, il n'est pas rare d'avoir recours à d'autres commandes, notamment évoquées dans certains de nos tutoriels : su
et su -
. À quoi servent ces commandes ? Qu'est-ce qui les différencient ? C'est ce que nous allons dans cet article.
sudo
, su
, et su -
: bien que ces commandes permettent toutes d'exécuter des tâches avec des droits administratifs, elles diffèrent dans leur fonctionnement et leur utilisation. La commande sudo
est utilisée pour exécuter des commandes avec les privilèges d'un autre utilisateur, généralement l'utilisateur root
. Pour utiliser sudo
, l'utilisateur doit être autorisé grâce à une règle définie dans le fichier de configuration /etc/sudoers
.
Pour en savoir plus sur sudo
et éviter de faire doublon, veuillez lire cet article :
II. Linux : la commande su
A. Définition
La commande su
dont le nom signifie Substitute User permet de basculer vers un autre utilisateur, par défaut l'utilisateur root. Contrairement à sudo
, la commande su
ne demande pas le mot de passe de l'utilisateur courant, mais celui de l'utilisateur cible (donc celui du super-utilisateur).
Ce n'est pas la seule différence entre sudo
et su
! En effet, lors de l'utilisation de la commande su
, vous basculez dans la session de root
puisque vous changez d'utilisateur. À l'inverse, avec la commande sudo
, il s'agit d'une délégation de droits qui doit être autorisée via le fichier /etc/sudoers
, tandis que su
n'a pas besoin de cette délégation. Il suffit de connaitre le mot de passe de l'utilisateur root
.
B. Exemple d'utilisation
Pour basculer vers l'utilisateur root
, l'utilisateur flo
actuellement connecté sur la machine Linux peut utiliser simplement cette commande :
su
Il sera alors invité à entrer le mot de passe de l'utilisateur root
. S'il ne le connait pas, la demande sera refusée.
III. Linux : la commande su -
A. Définition et utilisation
La commande su -
quant à elle, est une variante de su
, qui permet de basculer vers un autre utilisateur tout en chargeant son environnement. Cela signifie que toutes les variables d'environnement et configurations de l'utilisateur cible seront appliquées. Cette phrase veut donc dire que ce n'est pas le cas lors de l'utilisation de su
? Vous avez tout compris...
Lors de l'utilisation de su
, vous basculez dans la session de root
, mais sans charger complètement l'environnement. Il n'y a pas les variables d'environnement, ni son profil. Tandis qu'avec su -
, vous chargez l'environnement dans son intégralité.
su -
Vous pouvez aussi basculer dans la session d'un utilisateur spécifique, ici it-connect
:
su - it-connect
B. La différence entre su et su - par la pratique
Il y a un moyen très simple de s'en rendre compte : vous afficher le répertoire courant, juste après avoir exécuté l'une ou l'autre de ces deux commandes, vous verrez qu'il y a bien une différence.
Pour illustrer d'une autre façon la différence entre su
et su -
, considérons un exemple impliquant l'utilisation d'une variable.
Supposons que l'utilisateur root
a une variable d'environnement personnalisée définie dans son fichier .profile
. Nous pourrions ajouter cette ligne pour déclarer la variable VAR
.
export VAR="Je suis root"
Cette variable est chargée uniquement lorsque root
se connecte avec une session de connexion complète (environnement complet). Désormais, passons aux tests...
Lorsque l'utilisateur flo
utilise su
pour basculer vers root
:
su
Il devient root mais conserve l'environnement de flo
. Si flo
essaie d'accéder à la variable VAR
:
echo $VAR
La commande ne retournera rien ! C'est normal puisque VAR
n'est pas définie dans l'environnement de flo
... Désormais, testons la seconde méthode.
En revanche, si l'utilisateur flo
utilise la commande su -
pour basculer vers root
:
su -
Il devient root
et charge l'environnement complet du super-utilisateur. Donc, maintenant, nous pouvons accéder à la variable VAR
:
echo $VAR
La commande retournera :
Je suis root
Cela montre et prouve que su -
a chargé l'environnement complet de root
, y compris les variables d'environnement définies dans ses fichiers de configuration. Vous pouvez constater la différence sur l'image ci-dessous :
En complément, il est intéressant de noter que lorsque vous utilisez sudo -i
, vous basculez dans un Terminal interactif en tant que root
, et que vous avez accès à l'environnement complet. Ainsi, dans notre cas, la variable $VAR
est accessible.
Note : la principale différence réside dans l'authentification. La commande sudo -i
permet de suivre et de contrôler l'accès root via les politiques de sudo
, en utilisant le mot de passe du compte à l'origine de l'exécution de la commande. De son côté, su -
est plus direct, mais nécessite de connaître le mot de passe de l'utilisateur cible.
IV. N'utilisez pas la commande sudo su
Au sein de certaines documentations, vous avez peut-être déjà rencontré la commande sudo su
. Pourtant, cette commande n'a pas d'intérêt puisque la commande sudo
en elle-même propose déjà des arguments permettant de reproduire son comportement. L'utilisation de sudo su
est une pratique courante, mais souvent déconseillée.
Commençons par analyser la constitution de la commande sudo su
, car c'est une combinaison de deux commandes. sudo
permet d'exécuter une commande avec les privilèges d'un autre utilisateur (généralement root), tandis que su
permet de basculer vers un autre utilisateur.
Donc, concrètement, lorsque vous exécutez sudo su
, vous utilisez d'abord sudo
pour obtenir les privilèges nécessaires pour exécuter su
, qui à son tour vous donne un shell root.
A. Pourquoi est-ce déconseillé ?
Avec sudo
, chaque commande exécutée est enregistrée dans les journaux, ce qui permet un suivi précis des actions réalisées avec des privilèges élevés. Il y a donc un intérêt vis-à-vis de la traçabilité. Lorsque vous utilisez sudo su
, seule l'exécution de su
est loguée par sudo
, et non les commandes exécutées dans le shell root
qui en découle.
De plus, sur une machine Linux, l'administrateur peut utiliser sudo
pour n'autoriser qu'un ensemble restreint de commandes pour un utilisateur donné, renforçant ainsi la sécurité. En passant à un shell complet sudo su
, l'utilisateur contourne cette limitation et obtient un accès sans restrictions.
B. Alternatives recommandées
Plutôt que d'utiliser cette commande, il est recommandé de faire usage des options natives de la commande sudo
, à savoir :
sudo -i
: pour obtenir un shell root avec l'environnement de root chargé (variables, profil, etc.), en tant qu'alternative àsudo su -
.sudo -s
: pour obtenir un shell root tout en conservant l'environnement de l'utilisateur actuel, en tant qu'alternative àsudo su
.
IV. Conclusion
En lisant cet article, vous devriez mieux comprendre les différences entre sudo
, su
, et su -
sous Linux. Cela vous permettra également d'utiliser la bonne commande, selon le contexte et vos besoins.
Vous devez retenir ce qui suit :
- La commande
sudo
permet d'exécuter une commande en tant qu'un autre utilisateur, en généralroot
. - Lorsque vous utilisez
su
pour basculer vers l'utilisateurroot
, vous conservez l'environnement de l'utilisateur actuel. - Lorsque vous utilisez
su -
pour basculer vers l'utilisateurroot
, vous chargez l'environnement complet de l'utilisateurroot
. - Les commandes
sudo -i
etsudo -s
sont des alternatives recommandées à l'utilisationsudo su
etsudo su -
.
Je me permet une petite remarque.
En faisant un sudo su -, on n’est pas obligé de connaitre le mot de passe de l’utilisateur root pour en prendre le profil et d’ailleurs la demande de mot de passe ressemble à:
[sudo] Mot de passe de XXX :
Cela permet d’autoriser l’accès au compte root sans pour autant en connaitre le mot de passe à condition que le compte soit autorisé à faire cela dans sudoers.
Corrigez-moi si je me trompe, ce qui voudrait dire que j’ai une configuration particulière sur ma debian 12.