web-dev-qa-db-fra.com

Différence entre l'utilisateur Sudo et l'utilisateur root

Le /etc/sudoers fichier répertorie quels utilisateurs peuvent faire quoi avec la commande Sudo

L'utilisateur root crée et modifie le /etc/sudoers fichier.

Ce concept est difficile à comprendre pour moi.

Si tous les utilisateurs ayant le privilège Sudo appartiennent au groupe sudoers, alors tous peuvent devenir root en donnant le Sudo su commande.

Alors, qui est l'utilisateur root réel et comment contrôle-t-il les pouvoirs des utilisateurs du groupe sudoers?

Veuillez me l'expliquer.

24
rancho

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" (alias "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 commande su ("su" étant court pour un utilisateur suppléant.) ³

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 de modifier le fichier hosts comme si vous exécutiez 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 vous permettrait de devenir simplement root. Le résultat est le même que si vous vous êtes connecté en tant que root ou avez exécuté la commande su, 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 ferme 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 y a 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 System Integrity Protection (SIP) (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 dessus.)

³ 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 des privilèges root pour pouvoir éditer les tables cron. Évidemment, "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 le su mysql, ou utilisez Sudo où le fichier sudoers vous donnerait les privilèges mysql pour ces commandes spécifiques.

33
Edward Falk