Différence entre l'utilisateur sudo et l'utilisateur root [fermé]

21

Le /etc/sudoersfichier répertorie quels utilisateurs peuvent faire quoi avec la sudocommande

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

Ce concept est difficile à comprendre pour moi.

Si tous les utilisateurs ayant le privilège sudo appartiennent au sudoersgroupe, alors tous peuvent devenir root en donnant la sudo sucommande.

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.

rancho
la source
4
Je pense que vous devez développer sur quelle partie est difficile à comprendre.
garethTheRed
qui est root? Cette question est difficile à comprendre pour moi. Parce que les utilisateurs humn ne peuvent appartenir qu'au groupe sudoers
rancho
@rancho mettez à jour la question, s'il vous plaît
peterph
Réponse simple à votre question sous - jacente (basée sur les commentaires sur la réponse): Il est vrai que la différence entre l' rootaccès et les sudodroits devient inutile si vous autorisez sudo sul'exécution. Cependant, vous n'êtes pas obligé de le permettre. Vous pouvez autoriser un ensemble spécifique de commandes uniquement, par exemple, donner à votre administrateur système junior un sudoaccès uniquement à des commandes de sauvegarde spécifiques.
Wildcard

Réponses:

29

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 sucommande ("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 sucela 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 sucommande, 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 logindans 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/passwdfichier 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 mysqlcommande, soit vous utiliseriez sudooù le fichier sudoers vous donnerait les privilèges mysql pour ces commandes spécifiques.

Edward Falk
la source
1
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.
Edward Falk
1
"Sous SELinux (Security Enhanced Linux), il existe effectivement une liste de contrôle d'accès qui détermine qui peut faire quoi, et même root ne peut pas dépasser ces restrictions." - si même root ne peut pas passer ces restrictions, alors qui crée ces restrictions en premier lieu?
rancho
1
Pour clarifier ceci: "Effectivement, vos administrateurs sont root, ainsi que toutes les personnes répertoriées dans le fichier sudoers." les entrées sudoers ne doivent pas signifier un accès complet à la racine ou même au niveau racine; Je peux accorder à Sven la possibilité de redémarrer un agent de surveillance qui fonctionne en tant que moniseur.
Jeff Schaller
1
The "sudo" command lets you execute commands with superuser privileges as long as your user id is in the sudoers file [..]. Sur ma machine (Solus OS 3), c'est faux. Mon nom d'utilisateur n'est pas dans le fichier sudoers. et je peux encore faire sudo.
Martin Andersson
2
Ancienne réponse et c'est du pédantisme, mais suc'est une abréviation de "utilisateur substitut"; sudoest donc "utilisateur substitut do". Vous pouvez utiliser supour vous connecter en tant qu'autre utilisateur, pas seulement root. Et vous pouvez utiliser sudopour exécuter des commandes en tant qu’autre utilisateur.
josaphatv