Les différences entre Su, Sudo Su, Sudo -s et Sudo -i

Il existe de nombreuses façons d’obtenir une session root dans le terminal Linux. Cela peut créer une certaine confusion, car la plupart des utilisateurs débutants cherchant à acquérir des privilèges root ne sont peut-être pas familiers avec la manière dont chaque commande peut obtenir l’accès root, comment elles sont différentes et quand ces différences comptent. Ici, nous décortiquons chacune des nombreuses commandes utilisées pour accéder à root dans un terminal, expliquons comment elles obtiennent root, quand les utiliser, et tout ce qu’il y a entre les deux.
Table des matières
- su
- su -c
- sudo su
- sudo -i
- sudo -s
- Questions Fréquemment Posées
À lire également : Qu’est-ce que Doas et comment l’installer
su
La commande su remplace l’utilisateur actuel par root dans le shell actuel.
Vous pouvez passer à n’importe quel utilisateur en tapant su suivi d’un nom d’utilisateur.
Cela indiquera au système de changer (et essentiellement de se déconnecter) de l’utilisateur actuel pour celui spécifié. Alternativement, la commande su peut obtenir l’accès root en entrant su sans rien spécifier après la commande.
su est mieux utilisé lorsqu’un utilisateur souhaite un accès direct au compte root sur le système. Cela ne passe pas par sudo ou quoi que ce soit de ce genre. Au lieu de cela, on vous demande de saisir le mot de passe de l’utilisateur root, car vous vous connectez littéralement. De plus, d’autres méthodes d’accès root n’ont pas l’avantage d’accéder également au répertoire personnel root et à l’environnement root.
Avertissement : utiliser su est la méthode la moins sûre pour exécuter une action root. En général, si vous pouvez l’éviter, ne l’utilisez pas.
À lire également : Le guide ultime des commandes Apt et Apt-Get
su -c
Cette commande passe d’autres commandes directement à l’utilisateur root.

Similaire à la saisie de sudo avant une commande, su -c exécutera une commande en tant qu’utilisateur root. Au lieu de simplement taper la commande, toutefois, vous devrez la mettre entre guillemets.
C’est un moyen rapide de tirer une seule commande à travers votre terminal avec des privilèges élevés. C’est très utile si sudo est d’une manière ou d’une autre indisponible (il n’est pas préinstallé dans des distributions comme Arch Linux) ou ne fonctionne pas correctement parce qu’il est corrompu.
Comme vous passez quelque chose directement à root, si les mots de passe de votre utilisateur et de root sont différents, vous devrez taper votre mot de passe root pour vous authentifier.
sudo su
Cette commande demande le mot de passe de l’utilisateur actuel plutôt que celui de root.
C’est essentiellement la même chose que simplement exécuter su dans le shell, à l’exception d’une différence cruciale : au lieu d’indiquer au système de « changer d’utilisateur » directement, vous lui dites d’exécuter la commande su avec des privilèges superutilisateur. Lorsque sudo su est exécuté, “.profile”, “.bashrc” et “/etc/profile” seront chargés, tout comme en exécutant su (ou su root). Si n’importe quelle commande est exécutée avec sudo devant elle, elle obtient des privilèges root.
Bien qu’il n’y ait pas une grande divergence entre sudo su et su, ce dernier reste une commande très utile pour une raison importante : lorsqu’un utilisateur exécute su pour obtenir un accès root sur un système, il doit connaître le mot de passe root. Root est donné avec sudo su en demandant le mot de passe de l’utilisateur actuel, ce qui rend possible l’accès à root sans le mot de passe root.
C’est utile dans des situations où vous avez peut-être oublié le mot de passe root s’il est différent de celui de votre compte utilisateur. Bien que vous puissiez faire cela en attendant, vous devriez toujours réinitialiser le mot de passe root à un moment donné.
À lire également : Comment utiliser la commande Rm dans Linux
sudo -i
Utiliser sudo -i est pratiquement la même chose que la commande sudo su avec une exception : cela n’interagit pas directement avec l’utilisateur root.
Tout comme sudo su, le drapeau -i permet à un utilisateur d’obtenir un environnement root sans avoir à connaître le mot de passe du compte root. sudo -i est également très similaire à l’utilisation de sudo su : il lira tous les fichiers environnementaux (“.profile”, etc.) et configurera l’environnement dans le shell.
Là où cela diffère de sudo su, c’est que sudo -i est une manière beaucoup plus propre d’obtenir root et un environnement root sans interagir directement avec l’utilisateur root.
Pour clarifier : avec sudo su, vous utilisez plus d’une commande setuid root en arrière-plan. Cela rend beaucoup plus difficile de savoir quelles variables environnementales seront conservées et lesquelles seront modifiées (lors du passage à l’environnement root). Cela n’est pas vrai avec sudo -i. Pour cette raison, la plupart des gens considèrent cela comme la méthode préférée pour obtenir root sans se connecter directement.
En termes plus simples : sudo -i vous donnera une connexion root « propre » dans votre dossier « /root », qui est le dossier « personnel » pour l’utilisateur root.
À lire également : Comment utiliser la commande dd dans Linux
sudo -s
Cette commande convoque un shell avec votre variable $SHELL.
Le commutateur -s pour la commande sudo lit la variable $SHELL de l’utilisateur actuel exécutant des commandes. Cette commande fonctionne comme si l’utilisateur exécutait sudo /bin/bash, si le shell de l’utilisateur est bash.
Dans notre cas, sudo -s nous a donné le shell interactif fish, car nous avons précédemment installé fish comme notre shell par défaut, donc ce serait comme si nous avions exécuté sudo /usr/bin/fish.

Sudo -s est un shell de type « non-login ». Contrairement à une commande comme sudo -i ou sudo su, le système ne lira aucun fichier environnemental. Lorsque l’utilisateur indique au shell d’exécuter sudo -s, il obtient root mais ne changera pas l’environnement utilisateur. Votre répertoire personnel ne sera pas celui de root, etc.

Cette commande est mieux utilisée lorsque l’utilisateur souhaite passer à root mais conserver le même environnement de shell. Par exemple, vous pourriez vouloir exécuter un script fish et ne pas être contraint d’utiliser le shell bash par défaut que root obtient souvent dans la plupart des distributions.
D’autres commandes couvertes ci-dessus obtiennent l’accès root mais vous donneront également le shell et les variables d’environnement que la distribution a pour root. Peut-être que vous voulez juste passer à l’utilisateur sans tout ce poids !
À lire également : Commandes Bash de base pour les débutants en Linux
Questions Fréquemment Posées
Pourquoi le shell que j’exécute compte-t-il ?
Si vous utilisez un shell bash non modifié pour votre compte utilisateur, la différence est principalement philosophique. Dans la plupart des cas, élever à root à travers n’importe quel shell ne résultera pas en un changement notable. Mais si vous utilisez autre chose, vous remarquerez immédiatement à quel point les choses peuvent être différentes !
Par exemple, disons que vous utilisez le shell fish pour votre compte utilisateur et que vous gardez le shell root en bash. Charger le shell utilisateur en utilisant sudo -s donne un résultat radicalement différent.
Le shell suivra quelle que soit la configuration que vous avez dans le dossier personnel de root. Si vous n’avez pas une telle chose, il chargera simplement la configuration par défaut au lieu de la vôtre. (Dans notre cas, ce serait “~/.config/fish/config.fish”.) Pour tous les effets et objectifs, il est préférable de laisser les choses ainsi plutôt que de copier la configuration de l’utilisateur dans “/root”.
Changer pour le shell de votre compte utilisateur lors du passage à root ne devrait être fait que si vous devez exécuter un script qui nécessite absolument ce shell particulier.
Accéder à root peut-il nuire à mon système ?
Dans certains cas, oui. À moins que vous ne soyez absolument sûr d’avoir besoin d’accéder à root pour tout dans une session terminal particulière, il est souvent préférable de taper simplement sudo suivi d’une commande, si vous voulez accéder à root pour cette commande particulière. Par exemple, taper sudo apt install vlc dans n’importe quelle version basée sur Debian de Linux indiquerait au système d’exploitation d’accéder à root juste pour exécuter le gestionnaire de paquets APT pour installer VLC.
Une caveat très importante à l’exécution de sudo -i ou de toute autre variante dont nous avons discuté plus tôt par rapport à la saisie de sudo avant chaque commande que vous souhaitez exécuter en tant que root est que le premier ne consigne pas votre historique de commandes dans “/var/log/auth.log”. Si vous faites une erreur, vous ne pouvez pas revenir en arrière et vérifier ce que vous avez fait afin de le corriger. Vous devrez fonctionner de mémoire, car les sessions root ne sont pas enregistrées.
Quand je tape « sudo » avant une commande, quelle variante de « sudo su » exécute-je ?
En tapant sudo pour exécuter une commande (c’est-à-dire que vous le tapez sur la même ligne que la commande que vous souhaitez exécuter), vous l’exécutez essentiellement sous un shell root interactif. Ce serait ce que fait la commande autonome sudo -s. C’est également très similaire à l’exécution de la commande su -c.
Tous les screenshots par Miguel Leiva-Gomez.