Le compte root a-t-il toujours UID / GID 0?


50

Sur tous les systèmes Linux que j'ai gérés, le compte root a un GID et un UID de 0. Est-ce garanti, ou est-il possible que le système attribue à la racine un ID différent?


3
L'ID 0 a tous les droits. Le nom réel (ou les noms -multiple-) peuvent différer. Par exemple, mon serveur a deux utilisateurs 0 uid. L'un s'appelle 'root', l'autre 'toor'.
Hennes

Réponses:


80

Votre question comporte en fait deux parties .

Est-ce que le compte superutilisateur a toujours uid / gid 0/0 sous Linux?

Oui. Comme Rich Homolka l'a souligné dans un commentaire , il existe dans le noyau un code qui vérifie explicitement l'ID 0 lorsqu'il faut vérifier l'utilisateur root, ce qui signifie que l'utilisateur root a toujours au moins l' ID 0.

Le nom du compte d'utilisateur avec uid 0 est-il toujours root?

N ° root est juste un nom, répertorié dans / etc / passwd ou dans un autre magasin d'authentification. Vous pouvez tout aussi bien appeler le compte adminet le système d'exploitation lui-même ne s'en souciera pas, mais certaines applications pourraient ne pas l'apprécier car elles s'attendent à ce qu'il existe un compte privilégié nommé root. Appeler le compte uid 0 sur un * nix rootest une convention très stricte, mais elle n’est pas requise par le système (bien que cela puisse être requis par certains logiciels utilisateur, y compris éventuellement les utilitaires d’administration du système).

Il est également intéressant de noter que, sur pointé par Simon Richter , sur BSDs il existe souvent un second uid 0 compte, par convention nommé toor(qui est en arrière orthographié « root », et vient également lexicalement après root dans une liste triée par ordre alphabétique). Par exemple, FreeBSD l'utilise pour fournir à l'utilisateur root un paramètre de shell personnalisé, laissant à l'utilisateur root un shell par défaut dont l'existence est garantie sur la partition racine du système (utile pour la récupération).


15
Il y a du code dans le noyau pour vérifier la racine, uid == 0. Oui, c'est codé en dur et de manière permanente.
Rich Homolka

1
BSD a généralement rootet toor, les deux avec UID 0.
Simon Richter

@SimonRichter Dans ce cas, il existe un compte superutilisateur avec le nom root. Par conséquent, aucun problème ne survient tant que les bibliothèques du magasin d'authentification ne sont pas confondues avec les mêmes utilisateurs avec le même UID (dans ce cas, les BSD ne le feraient pas de cette manière). manière, ou les bibliothèques seraient réparées).
un CVn

Il y a du code dans le noyau qui utilise UID = 0 en tant que représentant de root et le stocke dans des variables nommées "root_uid", mais je n'ai rien trouvé (6 ans plus tard) qui dépend du nom de l'utilisateur nommé "root". Que l'UID soit dans ou etc / passwd ou non, il y aura finalement des processus lancés avec UID = 0. :)
dannysauer

15

1) l'administrateur est toujours uid == 0. Ceci est codé dans le noyau. Il faudrait un peu de code dans le noyau pour changer cela. Cela n'a pas beaucoup de sens, donc ce n'est pas fait. Par exemple, il serait incohérent pour d'autres unix partageant le même NFS par exemple.

2) UID 0 ne mappe pas nécessairement à la racine. Le meilleur exemple est FreeBSD. Il a deux uid == 0 comptes, la différence étant le shell. root a shell / bin / sh, qui est un simple shell, utile lorsque vos disques sont défectueux et que vous avez besoin de fsck / usr. toor utilise tcsh, ce qui est beaucoup plus utile dans des situations non urgentes, car il contient des éléments tels que l'historique, etc.

Un autre exemple, plus personnel; un de mes emplois où ils avaient un compte équivalent (c.-à-d. uid = 0) sur NIS. Le mot de passe, vide! Parce que le nouvel administrateur système ne pouvait pas se souvenir du mot de passe root sur les ordinateurs. J'ai crié à ce sujet pour des raisons évidentes (les mots de passe NIS, par définition, ne peuvent pas cacher leur espace). Je n'étais pas content de ce compte.

Et ce n’est vraiment pas le système qui donne l’identifiant 0, c’est la racine, c’est vous. Vous changez cela en utilisant des fichiers passwd, ou d'autres répertoires de nommage (NIS, ldap), mais ils ne sont pas compilés. Bien que vous deviez avoir au moins un compte uid 0 dans / etc / passwd, car vous pourriez ne pas avoir de réseau lorsque vous en avez vraiment besoin .

Donc, root est toujours uid 0, mais uid 0 n'est pas nécessairement root.


1
Oof, la douleur de ne choisir qu'une seule réponse acceptée ...
Tanaki

5
@Tanaki En général, "acceptez" la réponse qui vous a le plus aidé à répondre à votre question et affichez toutes les réponses que vous avez trouvées utiles. Rien ne dit que vous devez accepter la réponse la plus votée ou la première écrite.
un CVn

1

Pour les systèmes qui utilisent le serveur non-stop, ROOT_UID n'est pas 0 mais 65535.

Utilisateurs et groupes OSS L'environnement OSS ne fournit pas les noms d'utilisateur et les ID utilisateur UNIX par défaut courants, à moins qu'ils ne soient explicitement créés par un administrateur de site. Cependant, des noms d'utilisateur et des identifiants d'utilisateur OSS équivalents existent. Par exemple, les privilèges normalement associés au nom d'utilisateur UNIX root et à l'ID utilisateur 0 existent pour l'ID utilisateur OSS (UID) de 65535 (super ID), qui correspond à l'utilisateur SUPER.SUPER et à ses alias.

Voir https://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf

Dans coreutils, vous pouvez trouver ce fichier d’en-tête root-uid.h:

/* The user ID that always has appropriate privileges in the POSIX sense.

   Copyright 2012-2016 Free Software Foundation, Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.

   Written by Paul Eggert.  */

#ifndef ROOT_UID_H_
#define ROOT_UID_H_

/* The user ID that always has appropriate privileges in the POSIX sense.  */
#ifdef __TANDEM
# define ROOT_UID 65535
#else
# define ROOT_UID 0
#endif

#endif
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.