Eigentlich gibt es zwei Teile zu deiner Frage.
Hat das Superuser-Konto unter Linux immer uid/gid 0/0?
Ja. Wie von Rich Homolka in einem Kommentar erwähnt, gibt es Code im Kernel, der explizit auf uid 0 prüft, wenn nach dem Root-Benutzer gesucht werden muss, was bedeutet, dass Root immer mindestens uid hat 0.
Ist der Name des Benutzerkontos mit uid 0 immer root
?
Nein. root
ist nur ein Name, der in /etc/passwd oder einem anderen Authentifizierungsspeicher aufgeführt ist. Sie könnten das Konto genauso gut admin
nennen , und das Betriebssystem selbst wird sich nicht darum kümmern, aber einige Anwendungen mögen es möglicherweise nicht, weil sie erwarten, dass ein privilegiertes Konto mit dem Namen root
existiert . Aufruf des uid 0-Kontos auf einem *nix root
ist eine sehr stark vertretene Konvention, aber sie wird vom System nicht benötigt (obwohl sie von bestimmter Userland-Software benötigt wird, möglicherweise einschließlich Systemverwaltungsdienstprogrammen).
Es ist auch erwähnenswert, dass, wie von Simon Richter betont, bei BSDs oft eine Sekunde existiert uid 0-Konto mit dem Konventionsnamen toor
(was "root" rückwärts geschrieben ist und auch lexikalisch nach kommt root
in einer alphabetisch sortierten Liste). Zum Beispiel verwendet FreeBSD es, um einem Root-Benutzer eine angepasste Shell-Einstellung bereitzustellen, wodurch der Root-Benutzer eine Standard-Shell erhält, die garantiert auf der Root-Partition des Systems existiert (nützlich für Wiederherstellungszwecke).
1) der Administrator ist immer uid ==0. Dies ist im Kernel kodiert. Es würde etwas Codierung im Kernel erfordern, um dies zu ändern. Das hat nicht viel Sinn, also ist es nicht getan. Zum Beispiel wäre es inkonsistent für andere Unixe, die zum Beispiel dasselbe NFS teilen.
2) uid 0 muss nicht unbedingt root zugeordnet werden. Das beste Beispiel ist FreeBSD. Es hat zwei uid ==0-Konten, der Unterschied liegt in der Shell. root hat die Shell /bin/sh, eine einfache Shell, die nützlich ist, wenn Ihre Festplatten schlecht sind und Sie fsck /usr benötigen. toor verwendet tcsh, was in Nicht-Notfallsituationen viel nützlicher ist, da es Dinge wie Geschichte usw. enthält.
Ein weiteres, persönlicheres Beispiel; Ein Job, den ich hatte, wo sie ein Root-Equiv-Konto (dh UID =0) über NIS hatten. Das Passwort, leer! Weil sich der neue Systemadministrator das Root-Passwort auf den Maschinen nicht merken konnte. Ich habe aus offensichtlichen Gründen darüber geschrien (NIS-Passwörter können per Definition ihre Leerheit nicht verbergen). Ich war nicht glücklich über dieses Konto.
Und es ist wirklich nicht das System, das UID 0 gibt, ist root, sondern Sie. Sie können dies ändern, indem Sie passwd-Dateien oder andere Namensverzeichnisse (NIS, ldap) verwenden, aber es ist nicht einkompiliert. Sie sollten jedoch mindestens ein uid 0-Konto in /etc/passwd haben, da Sie möglicherweise kein Netzwerk haben, wenn Sie es wirklich brauchen .
Root ist also immer UID 0, aber UID 0 ist nicht unbedingt immer Root.
Nun, für Systeme, die den NonStop-Server verwenden, ist ROOT_UID nicht 0, sondern 65535.
OSS-Benutzer und -Gruppen Die OSS-Umgebung bietet keine allgemeinen UNIX-Standardbenutzernamen und -Benutzer-IDs, es sei denn, sie werden ausdrücklich von einem Site-Administrator erstellt. Es gibt jedoch entsprechende OSS-Benutzernamen und -Benutzer-IDs. Zum Beispiel existieren die normalerweise mit dem UNIX-Benutzernamen root und der Benutzer-ID 0 verbundenen Privilegien für die OSS-Benutzer-ID (UID) 65535 (die Super-ID), die der Benutzer SUPER.SUPER und seine Aliase ist.
Siehe https://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf
In Coreutils finden Sie diese Header-Datei 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