Résumé: "root" est le nom réel du compte administrateur. "sudo" est une commande qui permet aux utilisateurs ordinaires d'effectuer des tâches administratives. "Sudo" n'est pas un utilisateur.
Longue réponse:
"root" (aka "superuser") est le nom du compte administrateur système. Les origines du nom sont un peu archaïques, mais cela n'a pas d'importance.
L'utilisateur root a l'ID utilisateur 0 et a nominalement des privilèges illimités. Root peut accéder à n'importe quel fichier, exécuter n'importe quel programme, exécuter n'importe quel appel système et modifier n'importe quel paramètre. (Mais voir ci-dessous¹).
Avant l'invention de la commande "sudo", si vous vouliez effectuer des tâches administratives, vous deviez vous connecter en tant que root, soit en obtenant une invite de connexion² d'une manière ou d'une autre, soit avec la su
commande ("su" étant l'abréviation de l'utilisateur substitut.) ³
C'est un peu compliqué, et cela ne vous permet pas non plus d'accorder aux utilisateurs des pouvoirs administratifs partiels. La commande "sudo" (abréviation de "substitute user do") a donc été inventée.
La commande "sudo" vous permet d'exécuter des commandes avec des privilèges de superutilisateur tant que votre ID utilisateur est dans le fichier sudoers, vous donnant l'autorisation nécessaire.
Ainsi, par exemple sudo vi /etc/hosts
, vous permettrait d'éditer le fichier hosts comme si vous étiez en cours d'exécution en tant que root. Vous n'avez même pas besoin du mot de passe root, juste de votre propre mot de passe de connexion.
Et bien sûr, sudo su
cela vous permettrait simplement de devenir root. Le résultat est le même que si vous vous êtes connecté en tant que root ou avez exécuté la su
commande, sauf que vous n'avez pas besoin de connaître le mot de passe root mais vous devez être dans le fichier sudoers.
Le fichier sudoers détermine qui peut utiliser la commande sudo et ce qu'il peut en faire.
Le fichier sudoers est ce qui vous donne plusieurs administrateurs⁴. En effet, vos administrateurs sont root, ainsi que toutes les personnes répertoriées dans le fichier sudoers. Sans le fichier sudoers, le seul administrateur est root.
En fait, dans les organisations où quelqu'un d'autre administre votre ordinateur pour vous, il est assez fréquent de ne pas connaître le mot de passe root de votre propre ordinateur - tant que vous êtes dans le fichier sudoers, cela n'a pas d'importance.
Dans une entreprise pour laquelle je travaillais, avec une batterie de serveurs ginormous, seul un très petit nombre de personnes connaissaient les mots de passe root. Au lieu de cela, il y avait une base de données de qui était autorisé à travailler sur quels serveurs. Un processus automatisé vous ajouterait aux fichiers sudoers des serveurs auxquels vous étiez autorisé à accéder et vous supprimerait lorsque votre autorisation expirait.
¹ Encore une chose: les versions Unix modernes peuvent désormais restreindre même ce que l'utilisateur root peut faire.
Sous SELinux (Security Enhanced Linux), il existe effectivement une liste de contrôle d'accès qui détermine quel programme peut faire quoi, et même root ne peut pas dépasser ces restrictions.
Dans le cadre du système SIP ( System Integrity Protection ) (aka "rootless") d'Apple, certains fichiers et répertoires sont verrouillés afin que seules les applications de la liste blanche appropriée puissent y accéder.
Ces systèmes existent pour protéger un système du cas où un utilisateur malveillant parviendrait à obtenir un accès root. (Ou dans certains cas, pour empêcher les utilisateurs de jailbreaker leurs appareils intégrés.) Pour des raisons évidentes, il est extrêmement difficile de contourner ces restrictions, même avec un accès root.
² L'invite "login:" est un autre morceau archaïque de l'histoire d'Unix, remontant à l'époque où nous utilisions tous des terminaux ascii sur des lignes série, au lieu de systèmes de fenêtres. Vous pouvez toujours obtenir une invite "login:" en tapant simplement login
dans n'importe quelle fenêtre de terminal, ou en ouvrant une connexion ssh (ou telnet ou rsh) à votre ordinateur depuis un autre emplacement. Vous pouvez vous connecter en tant qu'autre utilisateur à partir de là si vous le souhaitez. (Et si votre ordinateur possède des ports série, vous pouvez toujours le configurer pour autoriser les connexions sur eux.)
³ Il est également possible pour des programmes individuels d'avoir un accès root. Ces programmes peuvent faire tout ce qu'un utilisateur avec un accès root peut faire, même lorsqu'ils sont exécutés par un utilisateur ordinaire. Celles-ci sont généralement limitées à des tâches spécifiques. Par exemple, le programme crontab dispose de privilèges root pour pouvoir modifier les tables cron. De toute évidence, "sudo" a des privilèges root pour qu'il puisse faire ce qu'il fait.
⁴ Je vais couvrir un point de plus que j'ai passé en revue précédemment. J'ai utilisé "administrateur" et "root" de manière interchangeable, mais il existe d'autres types d'administrateurs. Ceux-ci sont souvent appelés «comptes de rôle», c'est-à-dire que ces comptes n'appartiennent pas aux humains réels, mais existent plutôt pour remplir un rôle spécifique sur le système. Si vous regardez le /etc/passwd
fichier sur votre système, vous trouverez des dizaines et des dizaines de ces comptes.
Par exemple, si mysql était installé sur votre système, il y aurait un utilisateur "mysql", et tous les fichiers de la base de données, les fichiers de configuration, etc., seraient tous la propriété de cet utilisateur. Seul cet utilisateur aurait les autorisations nécessaires pour accéder aux fichiers et exécuter le serveur mysql. Dans un sens, cet utilisateur serait un compte administrateur, mais uniquement pour mysql.
Si vous deviez effectuer des tâches administratives de base de données, vous deviendriez soit "mysql" avec la su mysql
commande, soit vous utiliseriez sudo
où le fichier sudoers vous donnerait les privilèges mysql pour ces commandes spécifiques.