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


50

Auf allen von mir verwalteten Linux-Systemen hat das Root-Konto eine GID und eine UID von 0. Ist dies garantiert oder gibt das System dem Root möglicherweise eine andere ID?


3
ID 0 hat alle Rechte. Der tatsächliche Name (oder die Namen -mehrere-) können abweichen. ZB hat mein Server zwei Benutzer mit UID 0. Einer heißt 'root', einer heißt 'toor'.
Hennes

Antworten:


80

Es gibt tatsächlich zwei Teile auf Ihre Frage.

Hat der Superuser-Account unter Linux immer eine UID / GID 0/0?

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

Ist der Name des Benutzerkontos mit der UID 0 immer 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 wird es nicht interessieren, aber einige Anwendungen mögen es möglicherweise nicht ganz, da sie erwarten, dass dort ein privilegiertes Konto mit dem Namen vorhanden ist root. Das Aufrufen des uid 0-Kontos auf einem * nix rootist eine sehr weit verbreitete Konvention, wird jedoch vom System nicht benötigt (obwohl dies möglicherweise von bestimmter Userland-Software, möglicherweise auch von Systemverwaltungsdienstprogrammen, verlangt wird).

Es ist auch erwähnenswert, dass, wie erwähnt von Simon Richter , auf BSDs gibt es oft eine zweite 0 Konto uid, durch Konvention benannt toor(die „root“ rückwärts buchstabiert ist, und kommt auch lexikalisch nach root in eine Liste alphabetisch sortiert). FreeBSD verwendet es beispielsweise, um einem Root-Benutzer eine angepasste Shell-Einstellung zur Verfügung zu stellen, wobei dem Root-Benutzer eine Standard-Shell verbleibt, die garantiert auf der Root-Partition des Systems vorhanden ist (nützlich für Wiederherstellungszwecke).


15
Es gibt Code im Kernel, der nach root sucht, uid == 0. Ja, er ist fest codiert und permanent.
Rich Homolka

1
BSD hat in der Regel rootund toorbeide mit UID 0.
Simon Richter

@SimonRichter In diesem Fall gibt es ein Superuser-Konto mit dem Namen root, so dass dies kein Problem darstellt, solange die Bibliotheken des Authentifizierungsspeichers bei den beiden Benutzern mit derselben UID nicht verwechselt werden (in diesem Fall würden die BSDs dies nicht tun Weise, oder die Bibliotheken würden repariert werden).
ein CVn

Es gibt Code im Kernel , die UID = 0 als Vertreter der Wurzel verwendet und speichert die in Variablen „root_uid“ genannt, aber ich habe nichts (6 Jahre später) finden , die auf dem Benutzer hängt tatsächlich wurde der Namen „root“. Unabhängig davon, ob sich die UID in / etc / passwd befindet oder nicht, werden letztendlich Prozesse mit UID = 0 gestartet. :)
dannysauer

15

1) Der Administrator ist immer UID == 0. Dies ist im Kernel codiert. Es würde etwas Code 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 verwenden.

2) uid 0 muss nicht unbedingt root zugeordnet sein. Das beste Beispiel ist FreeBSD. Es hat zwei UID == 0 Konten, der Unterschied ist die Shell. root hat shell / bin / sh, eine einfache Shell, die nützlich ist, wenn Ihre Festplatten defekt sind und Sie fsck / usr benötigen. toor verwendet tcsh, was in Situationen außerhalb von Notfällen viel nützlicher ist, da es Dinge wie Geschichte usw. enthält.

Ein anderes, persönlicheres Beispiel; Ein Job, den ich hatte, bei dem sie ein Root-Equiv-Konto (dh UID = 0) über NIS hatten. Das Passwort, leer! Weil sich der neue Sysadmin das root-Passwort auf den Rechnern nicht merken konnte. Ich habe aus offensichtlichen Gründen darüber geschrien (NIS-Passwörter können per Definition ihre Unkenntlichkeit nicht verbergen). Ich habe mich über diesen Bericht nicht gefreut.

Und es ist wirklich nicht das System, das UID 0 gibt, sondern Sie. Sie ändern dies mit passwd-Dateien oder anderen Namensverzeichnissen (NIS, ldap), aber es ist nicht in kompiliert. Sie sollten jedoch mindestens ein UID 0-Konto in / etc / passwd haben, da Sie möglicherweise kein Netzwerk haben, wenn Sie es wirklich benötigen .

Root ist also immer uid 0, aber uid 0 ist nicht unbedingt immer root.


1
Oof, der Schmerz der Auswahl nur eine akzeptierte Antwort ...
Tanaki

5
@ Tanaki Akzeptieren Sie im Allgemeinen die Antwort, die Ihnen bei der Beantwortung Ihrer Frage am meisten geholfen hat, und stimmen Sie allen Antworten zu, die Sie für nützlich befunden haben. Es gibt nichts zu sagen, dass Sie die Antwort mit der höchsten oder der höchsten Bewertung akzeptieren müssen.
ein Lebenslauf vom

1

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, diese werden ausdrücklich von einem Site-Administrator erstellt. Es gibt jedoch äquivalente OSS-Benutzernamen und Benutzer-IDs. Beispielsweise existieren die Berechtigungen, die normalerweise dem UNIX-Benutzernamen root und der Benutzer-ID 0 zugeordnet sind, für die OSS-Benutzer-ID (UID) 65535 (die Super-ID), bei der es sich um den Benutzer SUPER.SUPER und seine Aliase handelt.

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.