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 donne à root un ID différent ?
Réponses
Trop de publicités?Il y a en fait deux parties à votre question.
Le compte super-utilisateur a-t-il toujours un uid/gid 0/0 sous Linux ?
Oui. Comme le souligne Rich Homolka en un commentaire il existe un code dans le noyau qui vérifie explicitement l'uid 0 lorsqu'il s'agit de vérifier l'utilisateur root, ce qui signifie que ce dernier dispose toujours d'au moins uid 0.
Est le nom du compte utilisateur avec uid 0 toujours
root
?
Non. root
est juste un nom, listé dans /etc/passwd ou tout autre magasin d'authentification. Vous pourriez tout aussi bien appeler le compte admin
Le système d'exploitation lui-même ne s'en préoccupe pas, mais certaines applications peuvent ne pas l'apprécier car elles s'attendent à ce qu'il existe un compte privilégié appelé root
. Appeler le compte uid 0 sur un *nix root
est une convention très forte, mais elle n'est pas exigée par le système (bien qu'elle puisse être exigée par certains logiciels userland, y compris les utilitaires d'administration du système).
Il est également intéressant de noter que, comme l'a fait remarquer Simon Richter sur les BSD, il existe souvent un deuxième compte uid 0, nommé par convention toor
(qui est "racine" épelé à l'envers, et qui vient aussi 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 Shell personnalisé, laissant l'utilisateur root avec un Shell par défaut. dont l'existence est garantie sur la partition racine du système (utile à des fins de récupération).
1) l'administrateur est toujours uid == 0. Ceci est codé dans le noyau. Il faudrait coder dans le noyau pour changer cela. Il n'y a pas beaucoup d'intérêt à cela, donc ce n'est pas fait. Par exemple, cela serait incohérent pour d'autres unix partageant le même NFS par exemple.
2) L'uid 0 ne correspond pas nécessairement à root. Le meilleur exemple est FreeBSD. Il a deux comptes uid == 0, 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, qui est beaucoup plus utile dans des situations non urgentes, puisqu'il a des choses comme l'historique, etc.
Un autre exemple, plus personnel, est celui d'un de mes emplois où il y avait un compte root equiv (c'est-à-dire uid=0) sur NIS. Le mot de passe, vide ! Parce que le nouveau sysadmin ne se souvenait pas du mot de passe root sur les machines. J'ai crié à ce sujet pour des raisons évidentes (les mots de passe NIS, par définition, ne peuvent pas cacher leur vide). Je n'étais pas content de ce compte.
Et ce n'est pas vraiment le système qui donne l'uid 0 à root, c'est vous. Vous pouvez changer cela en utilisant les fichiers passwd, ou d'autres répertoires de nommage (NIS, ldap) mais ce n'est pas compilé. Cependant, vous devriez avoir au moins un compte uid 0 dans /etc/passwd, car vous n'aurez peut-être pas de réseau lorsque vous en aurez vraiment besoin.
Ainsi, root est toujours uid 0, mais uid 0 n'est pas nécessairement toujours root.
Pour les systèmes qui utilisent le serveur nonStop, ROOT_UID n'est pas 0 mais 65535.
Utilisateurs et groupes OSS L'environnement OSS ne fournit pas de noms d'utilisateur et d'identifiants par défaut UNIX communs, sauf s'ils sont explicitement créés par un administrateur de site. Cependant, il existe des noms d'utilisateur et des ID d'utilisateur OSS équivalents. Par exemple, les privilèges normalement associés aux noms d'utilisateur UNIX root et l'ID utilisateur de 0 existent pour l'ID utilisateur (UID) OSS de 65535 (l'ID super), qui est 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
/* L'ID utilisateur qui a toujours les privilèges appropriés au sens de POSIX.
Copyright 2012-2016 Free Software Foundation, Inc.
Ce programme est un logiciel gratuit : vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 3 de la licence, soit (à votre choix) toute autre version de la licence. (à votre choix) toute version ultérieure.
Ce programme est distribué dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même la garantie implicite de MERCHANTABILITÉ ou d'ADÉQUATION À UN USAGE PARTICULIER. Voir la Licence Publique Générale GNU pour plus de détails.
Vous avez dû recevoir une copie de la licence publique générale GNU (GNU General Public License). avec ce programme. Si ce n'est pas le cas, consultez http://www.gnu.org/licenses/ .
Écrit par Paul Eggert. */
ifndef ROOT_UID_H_ #define ROOT_UID_H_
/* L'ID utilisateur qui a toujours les privilèges appropriés au sens de POSIX. */ #ifdef __TANDEM