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?
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?
Antworten:
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 root
ist 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).
root
und toor
beide mit UID 0.
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).
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.
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