Hat das Root-Konto immer eine UID / GID 0?

77615
Tanaki

Auf allen Linux-Systemen, die ich verwaltet habe, verfügt das Root-Konto über eine GID und eine UID von 0. Wird dies garantiert oder ist es möglich, dass das System Root eine andere ID gibt?

39
ID 0 hat alle Rechte. Der tatsächliche Name (oder die Namen -multiple-) können sich unterscheiden. Mein Server hat zB zwei Benutzer mit 0 Benutzernamen. Eines heißt "root", eines heißt "toor". Hennes vor 10 Jahren 3

3 Antworten auf die Frage

71
a CVn

Ihre Frage besteht eigentlich aus zwei Teilen .

Hat das Superuser-Konto unter Linux immer uid / gid 0/0?

Ja. Wie Rich Homolka in einem Kommentar hervorhebt, gibt es Code im Kernel, der explizit nach UID 0 sucht, wenn er nach dem Root-Benutzer suchen muss, was bedeutet, dass Root immer mindestens UID 0 hat.

Ist der Name des Benutzerkontos immer mit UID 0 root?

Nr. root Ist nur ein Name, der in / etc / passwd oder einem anderen Authentifizierungsspeicher aufgeführt ist. Sie können das Konto genauso gut anrufen admin, und das Betriebssystem selbst interessiert sich nicht dafür, aber einige Anwendungen mögen es nicht, da sie davon ausgehen, dass dort ein privilegiertes Konto mit dem Namen "" existiert root. Das Aufrufen des UID-0-Kontos auf einem * nix rootist eine sehr strikte Konvention, die jedoch vom System nicht verlangt wird (auch wenn dies von bestimmten Userland-Software, möglicherweise einschließlich der Dienstprogramme für die Systemadministration, verlangt wird).

Es ist auch erwähnenswert, dass, wie darauf hingewiesen, Simon Richter dort oft ein, auf BSDs existiert zweites Konto uid 0, von dem Namen Konvention toor(die „root“ rückwärts buchstabierte, und auch lexikalisch kommt nach root einer Liste alphabetisch sortierte). FreeBSD verwendet es beispielsweise, um einem Root-Benutzer eine angepasste Shell-Einstellung zur Verfügung zu stellen. Dem Root-Benutzer bleibt eine Standard-Shell, die garantiert in der Root-Partition des Systems vorhanden ist (nützlich für Wiederherstellungszwecke).

Es gibt Code im Kernel, um nach root zu suchen, uid == 0. Ja, es ist hart codiert und permanent. Rich Homolka vor 10 Jahren 13
BSD hat normalerweise "root" und "toor", beide mit der UID 0. Simon Richter vor 10 Jahren 0
@SimonRichter In diesem Fall gibt es ein Superuser-Konto mit dem Namen "root". Daher gibt es kein Problem, solange die Authentifizierungsspeicherbibliotheken bei den beiden Benutzern mit derselben UID nicht verwirrt werden (in diesem Fall würden die BSDs nicht verwendet.) tun Sie es auf diese Weise, oder die Bibliotheken werden repariert). a CVn vor 10 Jahren 0
14
Rich Homolka

1) Der Administrator ist immer UID == 0. Dies ist im Kernel codiert. Um dies zu ändern, müsste im Kernel eine Codierung vorgenommen werden. Das hat nicht viel Sinn, also wird es nicht getan. Es wäre beispielsweise inkonsistent für andere Unixe, die beispielsweise dasselbe NFS verwenden.

2) UID 0 muss nicht unbedingt root zugeordnet werden. Das beste Beispiel ist FreeBSD. Es hat zwei UID-Konten == 0, wobei der Unterschied die Shell ist. root hat 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 Situationen, in denen es sich nicht um Notfälle handelt, viel nützlicher ist, da es Dinge wie Geschichte usw. gibt

Ein anderes, persönlicheres Beispiel; Ich hatte einen Job, bei dem sie über ein Root-Äquivalent (dh UID = 0) über NIS verfügten. Das Passwort, leer! Weil sich der neue sysadmin nicht an das Root-Passwort der Maschinen erinnern kann. Ich habe aus offensichtlichen Gründen darüber geschrien (NIS-Passwörter können definitionsgemäß ihre Leerheit nicht verbergen). Ich war nicht glücklich über diesen Bericht.

Und es ist wirklich nicht das System, das angibt, dass uid 0 root ist, sondern Sie. Sie ändern dies durch die Verwendung von passwd-Dateien oder anderen Namensverzeichnissen (NIS, ldap), aber es ist nicht kompiliert. Sie sollten jedoch mindestens ein Konto mit UID 0 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 root.

Oof, der Schmerz, nur eine akzeptierte Antwort zu wählen ... Tanaki vor 10 Jahren 1
@Tanaki "Akzeptieren" Sie im Allgemeinen die Antwort, die Ihnen am meisten bei der Beantwortung Ihrer Frage geholfen hat, und alle Antworten, die Sie für nützlich erachteten. Es gibt nichts zu sagen, dass Sie die am höchsten gewählte oder zuerst geschriebene Antwort akzeptieren müssen. a CVn vor 10 Jahren 4
0
Nuxwin

Für Systeme, die den nonStop-Server verwenden, ist ROOT_UID nicht 0, sondern 65535.

OSS-Benutzer und -Gruppen Die OSS-Umgebung stellt keine allgemeinen UNIX-Standardbenutzernamen und Benutzer-IDs bereit, es sei denn, sie werden explizit von einem Site-Administrator erstellt. Gleiche OSS-Benutzernamen und Benutzer-IDs sind jedoch vorhanden. Beispielsweise sind die Berechtigungen, die normalerweise dem UNIX-Benutzernamen root und der Benutzer-ID 0 zugeordnet sind, für die OSS-Benutzer-ID (UID) von 65535 (Super-ID) vorhanden, die der Benutzer SUPER.SUPER und seine Aliasnamen ist.

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

In coreutils finden Sie die 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