Linux su vs sudo : quelle est la différence ?
Une comparaison des commandes Linux pour élever les privilèges des utilisateurs non root.
Les commandes su
et sudo
permettent aux utilisateurs d'effectuer des tâches d'administration système qui ne sont pas autorisées pour les utilisateurs non privilégiés, c'est-à-dire tout le monde sauf l'utilisateur root. Certains préfèrent la commande sudo
: Par exemple, Seth Kenlon a récemment publié « 5 raisons d'utiliser sudo sous Linux », dans lequel il vante ses nombreuses vertus.
Par contre, je suis partisan de la commande su
et je la préfère à sudo
pour la plupart du travail d'administration système que j'effectue. Dans cet article, je compare les deux commandes et explique pourquoi je préfère su
à sudo
mais j'utilise toujours les deux.
Perspective historique des administrateurs système
Les commandes su
et sudo
ont été conçues pour un monde différent. Les premiers ordinateurs Unix nécessitaient des administrateurs système à temps plein et utilisaient le compte root comme seul compte administratif. Dans ce monde antique, la personne à qui on confiait le mot de passe root se connectait en tant que root sur un téléscripteur ou un terminal CRT tel que le DEC VT100, puis effectuait les tâches administratives nécessaires à la gestion de l'ordinateur Unix.
L'utilisateur root disposerait également d'un compte non root pour les activités non root telles que la rédaction de documents et la gestion de sa messagerie personnelle. Il y avait généralement de nombreux comptes d'utilisateurs non root sur ces ordinateurs, et aucun de ces utilisateurs n'avait besoin d'un accès root total. Un utilisateur peut avoir besoin d'exécuter une ou deux commandes en tant que root, mais très rarement. De nombreux administrateurs système se connectent en tant que root pour travailler en tant que root et se déconnectent de nos sessions root une fois terminé. Certains jours, il faut rester connecté en tant que root toute la journée. La plupart des administrateurs système utilisent rarement sudo
car cela nécessite de taper plus que nécessaire pour exécuter les commandes essentielles.
Ces outils offrent tous deux des privilèges élevés, mais la manière dont ils le font est très différente. Cette différence est due aux cas d’utilisation distincts pour lesquels ils étaient initialement destinés.
sudo
L'intention initiale de sudo
était de permettre à l'utilisateur root de déléguer à un ou deux utilisateurs non root l'accès à une ou deux commandes privilégiées spécifiques dont ils ont régulièrement besoin. La commande sudo
donne aux utilisateurs non root un accès temporaire aux privilèges élevés nécessaires pour effectuer des tâches telles que l'ajout et la suppression d'utilisateurs, la suppression de fichiers appartenant à d'autres utilisateurs, l'installation de nouveaux logiciels et généralement toute tâche requise pour administrer un hôte Linux moderne.
Permettre aux utilisateurs d'accéder à une ou deux commandes fréquemment utilisées qui nécessitent des privilèges élevés permet à l'administrateur système d'économiser de nombreuses demandes de la part des utilisateurs et élimine le temps d'attente. La commande sudo
ne fait pas passer le compte utilisateur à root ; la plupart des utilisateurs non root ne devraient jamais avoir un accès root complet. Dans la plupart des cas, sudo
permet à un utilisateur d'émettre une ou deux commandes, puis permet à l'élévation de privilèges d'expirer. Pendant ce bref intervalle de temps, généralement configuré sur 5 minutes, l'utilisateur peut effectuer toutes les tâches administratives nécessaires nécessitant des privilèges élevés. Les utilisateurs qui doivent continuer à travailler avec des privilèges élevés mais qui ne sont pas prêts à émettre une autre commande liée à une tâche peuvent exécuter la commande sudo -v
pour revalider les informations d'identification et prolonger le délai de 5 minutes supplémentaires.
L'utilisation de la commande sudo
a pour effet secondaire de générer des entrées de journal des commandes utilisées par les utilisateurs non root, ainsi que leurs identifiants. Les journaux peuvent faciliter une analyse post-mortem liée au problème afin de déterminer quand les utilisateurs ont besoin d'une formation supplémentaire. (Vous pensiez que j'allais dire quelque chose comme « attribuer le blâme », n'est-ce pas ?)
su
La commande su
est destinée à permettre à un utilisateur non root d'élever son niveau de privilèges à celui de root. En fait, l'utilisateur non root devient l'utilisateur root. La seule exigence est que l'utilisateur connaisse le mot de passe root. Il n'y a aucune limite à cela car l'utilisateur est désormais connecté en tant que root.
Aucune limite de temps n'est imposée à l'élévation de privilèges fournie par la commande su. L'utilisateur peut travailler en tant que root aussi longtemps que nécessaire sans avoir besoin de se réauthentifier. Une fois terminé, l'utilisateur peut émettre la commande exit pour revenir de root à son propre compte non root.
Controverse et changement
Il y a eu récemment des désaccords sur l'utilisation de su
par rapport à sudo
.
Les vrais [administrateurs système] n'utilisent pas sudo. —Paul Venezia
Venezia affirme dans son article d'InfoWorld que sudo
est utilisé comme accessoire inutile par de nombreuses personnes qui agissent en tant qu'administrateurs système. Il ne passe pas beaucoup de temps à défendre ou à expliquer cette position ; il le déclare simplement comme un fait. Et je suis d'accord avec lui : pour les administrateurs système. Nous n'avons pas besoin de roues d'entraînement pour faire notre travail. En fait, ils gênent.
Cependant,
Les temps sont en train de changer. —Bob Dylan
Dylan avait raison, même s’il ne parlait pas d’ordinateurs. La façon dont les ordinateurs sont administrés a considérablement changé depuis l’avènement de l’ère d’une personne, d’un ordinateur. Dans de nombreux environnements, l’utilisateur d’un ordinateur en est également l’administrateur. Cela rend nécessaire de fournir un certain accès aux pouvoirs de root à ces utilisateurs.
Certaines distributions modernes, comme Ubuntu et ses dérivés, sont configurées pour utiliser la commande sudo
exclusivement pour les tâches privilégiées. Dans ces distributions, il est impossible de se connecter directement en tant qu'utilisateur root ou même de su
en tant que root, donc la commande sudo
est requise pour permettre aux utilisateurs non root d'accéder à tout accès. aux privilèges root. Dans cet environnement, toutes les tâches d'administration système sont effectuées à l'aide de sudo
.
Cette configuration est possible en verrouillant le compte root et en ajoutant le(s) compte(s) utilisateur régulier au groupe wheel. Cette configuration peut être facilement contournée. Essayez une petite expérience sur n'importe quel hôte ou VM Ubuntu. Permettez-moi de préciser ici la configuration afin que vous puissiez la reproduire si vous le souhaitez. J'ai installé Ubuntu 16.04 LTS1 et je l'ai installé sur une VM à l'aide de VirtualBox. Lors de l'installation, j'ai créé un utilisateur non root, étudiant, avec un simple mot de passe pour cette expérience.
Connectez-vous en tant qu'utilisateur étudiant et ouvrez une session de terminal. Regardez l'entrée root dans le fichier /etc/shadow
, où les mots de passe cryptés sont stockés.
student@ubuntu1:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied
L'autorisation est refusée, nous ne pouvons donc pas consulter le fichier /etc/shadow
. Ceci est commun à toutes les distributions pour empêcher les utilisateurs non privilégiés de voir et d'accéder aux mots de passe cryptés, ce qui permettrait d'utiliser des outils de piratage courants pour déchiffrer ces mots de passe.
Essayons maintenant de su -
en tant que root.
student@ubuntu1:~$ su -
Password: <Enter root password – but there isn't one>
su: Authentication failure
Cela échoue car le compte root n'a pas de mot de passe et est verrouillé. Utilisez la commande sudo
pour consulter le fichier /etc/shadow
.
student@ubuntu1:~$ sudo cat /etc/shadow
[sudo] password for student: <enter the student password>
root:!:17595:0:99999:7:::
<snip>
student:$6$tUB/y2dt$A5ML1UEdcL4tsGMiq3KOwfMkbtk3WecMroKN/:17597:0:99999:7:::
<snip>
J'ai tronqué les résultats pour afficher uniquement l'entrée destinée aux utilisateurs root et étudiants. J'ai également raccourci le mot de passe crypté afin que l'entrée tienne sur une seule ligne. Les champs sont séparés par deux points (:
) et le deuxième champ est le mot de passe. Notez que le champ du mot de passe pour root est un bang, connu dans le reste du monde sous le nom de point d'exclamation (!
). Cela indique que le compte est verrouillé et qu'il ne peut pas être utilisé.
Maintenant, tout ce que vous devez faire pour utiliser le compte root en tant qu'administrateur système approprié est de définir un mot de passe pour le compte root.
student@ubuntu1:~$ sudo su -
[sudo] password for student: <Enter password for student>
root@ubuntu1:~# passwd root
Enter new UNIX password: <Enter new root password>
Retype new UNIX password: <Re-enter new root password>
passwd: password updated successfully
root@ubuntu1:~#
Vous pouvez désormais vous connecter directement sur une console en tant que root ou su
directement en root au lieu d'utiliser sudo
pour chaque commande. Bien sûr, vous pouvez simplement utiliser sudo su -
chaque fois que vous souhaitez vous connecter en tant que root, mais pourquoi s'embêter ?
S'il vous plaît ne vous méprenez pas. Les distributions comme Ubuntu et leurs parentes en amont et en aval conviennent parfaitement, et j'en ai utilisé plusieurs au fil des ans. Lorsque j'utilise Ubuntu et les distributions associées, l'une des premières choses que je fais est de définir un mot de passe root afin de pouvoir me connecter directement en tant que root. D'autres distributions, comme Fedora et ses proches, proposent désormais des choix intéressants lors de l'installation. La première version de Fedora où j'ai remarqué cela était Fedora 34, que j'ai installée plusieurs fois lors de l'écriture d'un prochain livre.
L'une de ces options d'installation se trouve sur la page permettant de définir le mot de passe root. La nouvelle option permet à l'utilisateur de choisir « Verrouiller le compte root » de la même manière qu'un compte root Ubuntu est verrouillé. Il existe également une option sur cette page qui permet une connexion SSH à distance à cet hôte en tant que root à l'aide d'un mot de passe, mais qui ne fonctionne que lorsque le compte root est déverrouillé. La deuxième option se trouve sur la page qui permet la création d'un compte utilisateur non root. L'une des options de cette page est « Rendre cet utilisateur administrateur ». Lorsque cette option est cochée, l'ID utilisateur est ajouté à un groupe spécial appelé groupe wheel, qui autorise les membres de ce groupe à utiliser la commande sudo
. Fedora 36 mentionne même le groupe de roues dans la description de cette case à cocher.
Plusieurs utilisateurs non root peuvent être définis comme administrateur. Toute personne désignée comme administrateur utilisant cette méthode peut utiliser la commande sudo
pour effectuer toutes les tâches administratives sur un ordinateur Linux. Linux autorise uniquement la création d'un seul utilisateur non root lors de l'installation, afin que d'autres nouveaux utilisateurs puissent être ajoutés au groupe wheel lors de sa création. Les utilisateurs existants peuvent être ajoutés au groupe wheel par l'utilisateur root ou un autre administrateur directement en utilisant un éditeur de texte ou la commande usermod
.
Dans la plupart des cas, les administrateurs d'aujourd'hui n'ont besoin d'effectuer que quelques tâches essentielles, telles que l'ajout d'une nouvelle imprimante, l'installation de mises à jour ou de nouveaux logiciels, ou la suppression de logiciels qui ne sont plus nécessaires. Ces outils GUI nécessitent un mot de passe root ou administratif et accepteront le mot de passe d'un utilisateur désigné comme administrateur.
Comment j'utilise su et sudo sous Linux
J'utilise à la fois su
et sudo
. Ils ont chacun une place importante dans ma boîte à outils d’administrateur système.
Je ne peux pas verrouiller le compte root car je dois l'utiliser pour exécuter mes playbooks Ansible et le programme rsbu Bash que j'ai écrit pour effectuer des sauvegardes. Ces deux éléments doivent être exécutés en tant que root, tout comme plusieurs autres scripts administratifs Bash que j'ai écrits. J'utilise la commande su
pour basculer les utilisateurs vers l'utilisateur root afin de pouvoir effectuer ces tâches et bien d'autres tâches courantes. Élever mes privilèges au niveau root à l'aide de su
est particulièrement utile lors de la détermination et de la résolution des problèmes. Je ne veux vraiment pas qu'une session sudo
s'arrête alors que je suis au milieu de mon processus de réflexion.
J'utilise la commande sudo
pour les tâches nécessitant les privilèges root lorsqu'un utilisateur non root doit les exécuter. J'ai configuré le compte non root dans le fichier sudoers avec accès uniquement à une ou deux commandes nécessaires pour effectuer les tâches. J'utilise également sudo
moi-même lorsque je dois exécuter seulement une ou deux commandes rapides avec des privilèges élevés.
Conclusions
Les outils que vous utilisez n’ont pas autant d’importance que l’exécution du travail. Quelle différence cela fait-il si vous utilisez vim ou Emacs, systemd ou SystemV, RPM ou DEB, sudo
ou su
? L’essentiel ici est que vous devez utiliser les outils avec lesquels vous êtes le plus à l’aise et qui vous conviennent le mieux. L'une des plus grandes forces de Linux et de l'open source est qu'il existe généralement de nombreuses options disponibles pour chaque tâche que nous devons accomplir.
su
et sudo
ont tous deux des atouts, et tous deux peuvent être sécurisés lorsqu'ils sont appliqués correctement aux cas d'utilisation prévus. J'ai choisi d'utiliser à la fois su
et sudo
principalement dans leurs rôles historiques car cela fonctionne pour moi. Je préfère su
pour la plupart de mon propre travail car cela fonctionne mieux pour moi et mon flux de travail.
Partagez comment vous préférez travailler dans les commentaires !
Cet article est tiré du chapitre 19 de mon livre La philosophie Linux pour les administrateurs système (Apress, 2018) et est republié avec autorisation.