Na wszystkich systemach Linux, którymi zarządzałem, konto root ma identyfikator GID i UID równy 0. Czy to jest gwarantowane, czy też możliwe jest, że system nada rootowi inny identyfikator?
ID 0 ma wszystkie prawa. Rzeczywista nazwa (lub nazwy -multiple-) może się różnić. Np. Mój serwer ma dwóch użytkowników UID 0. Jeden o nazwie „root”, drugi o nazwie „toor”.
Hennes
Odpowiedzi:
80
Twoje pytanie składa się z dwóch części .
Czy konto superużytkownika zawsze ma uid / gid 0/0 w systemie Linux?
Tak. Jak zauważył Rich Homolka w komentarzu , w jądrze znajduje się kod, który jawnie sprawdza uid 0, gdy trzeba sprawdzić użytkownika root, co oznacza, że root zawsze ma przynajmniej uid 0.
Czy nazwa konta użytkownika z identyfikatorem UID 0 jest zawsze root?
Nie.root To tylko nazwa wymieniona w / etc / passwd lub innym sklepie z uwierzytelnianiem. Równie dobrze możesz zadzwonić na konto admin, a sam system operacyjny nie będzie się tym przejmował, ale niektóre aplikacje mogą go nie lubić, ponieważ oczekują, że istnieje konto uprzywilejowane o nazwie root. Wywoływanie konta uid 0 na * nix rootjest bardzo silną konwencją, ale nie jest wymagane przez system (chociaż może być wymagane przez niektóre oprogramowanie użytkownika, w tym również narzędzia administracyjne systemu).
W jądrze znajduje się kod do sprawdzenia root, uid == 0. Tak, jest na stałe zakodowany i trwały.
Rich Homolka
1
BSD zazwyczaj ma rooti toor, zarówno z UID 0.
Simon Richter
@ SimonRichter W takim przypadku istnieje konto administratora o nazwie root, więc nie ma problemu, dopóki biblioteki sklepu uwierzytelniania nie będą mylone z dwoma użytkownikami o tym samym UID (w takim przypadku BSD nie zrobiłyby tego, że sposób, inaczej biblioteki zostaną naprawione).
CVn
W jądrze znajduje się kod, który używa UID = 0 jako reprezentatywnego dla roota i przechowuje go w zmiennych o nazwie „root_uid”, ale nie znalazłem niczego (6 lat później), co faktycznie zależy od tego, czy użytkownik nazywa się „root”. Niezależnie od tego, czy identyfikator UID znajduje się w / etc / passwd, czy nie, ostatecznie zostaną uruchomione procesy z / UID = 0. :)
dannysauer
15
1) administrator jest zawsze uid == 0. Jest to zakodowane w jądrze. Aby to zmienić, potrzeba trochę kodowania w jądrze. Nie ma to wiele sensu, więc nie zostało to zrobione. Na przykład byłoby niespójne w przypadku innych unixów korzystających na przykład z tego samego NFS.
2) Uid 0 niekoniecznie odwzorowuje na root. Najlepszym przykładem jest FreeBSD. Ma dwa konta UID == 0, z tą różnicą, że jest powłoką. root ma powłokę / bin / sh, która jest prostą powłoką, przydatną, gdy dyski są uszkodzone i potrzebujesz fsck / usr. toor używa tcsh, który jest znacznie bardziej użyteczny w sytuacjach innych niż nagłe, ponieważ ma takie rzeczy jak historia itp.
Kolejny, bardziej osobisty przykład; jedno zadanie miałem, gdzie mieli konto root equiv (tj. uid = 0) przez NIS. Hasło puste! Ponieważ nowy sysadmin nie mógł zapamiętać hasła roota na komputerach. Krzyczałem na ten temat z oczywistych powodów (hasła NIS z definicji nie mogą ukryć ich pustki). Nie podobało mi się to konto.
I tak naprawdę to nie system, który daje UID 0 to root, to ty. Zmieniasz to za pomocą plików passwd lub innych katalogów nazw (NIS, ldap), ale nie jest to skompilowane. Chociaż powinieneś mieć co najmniej jedno konto uid 0 w / etc / passwd, ponieważ możesz nie mieć sieci, kiedy naprawdę tego potrzebujesz .
Zatem root to zawsze uid 0, ale uid 0 niekoniecznie zawsze jest root.
O, ból związany z wybraniem tylko jednej zaakceptowanej odpowiedzi ...
Tanaki,
5
@Tanaki Ogólnie „zaakceptuj” odpowiedź, która najbardziej pomogła Ci odpowiedzieć na pytanie, i głosuj za wszystkimi odpowiedziami, które uznałeś za przydatne. Nic nie mówi, że musisz zaakceptować najlepiej głosowaną lub pierwszą pisemną odpowiedź.
CVn
1
Cóż, dla systemów, które używają serwera nonStop, ROOT_UID to nie 0, ale 65535.
Użytkownicy i grupy
OSS Środowisko OSS nie udostępnia wspólnych domyślnych nazw użytkowników i identyfikatorów użytkowników UNIX, chyba że są one jawnie utworzone przez administratora witryny. Istnieją jednak równoważne nazwy użytkowników i identyfikatory użytkowników OSS. Na przykład uprawnienia zwykle związane z katalogiem głównym użytkownika UNIX i identyfikatorem użytkownika 0 istnieją dla identyfikatora użytkownika OSS (UID) 65535 (super ID), którym jest użytkownik SUPER.SUPER i jego aliasy.
W coreutils możesz znaleźć ten plik nagłówkowy 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
Odpowiedzi:
Twoje pytanie składa się z dwóch części .
Tak. Jak zauważył Rich Homolka w komentarzu , w jądrze znajduje się kod, który jawnie sprawdza uid 0, gdy trzeba sprawdzić użytkownika root, co oznacza, że root zawsze ma przynajmniej uid 0.
Nie.
root
To tylko nazwa wymieniona w / etc / passwd lub innym sklepie z uwierzytelnianiem. Równie dobrze możesz zadzwonić na kontoadmin
, a sam system operacyjny nie będzie się tym przejmował, ale niektóre aplikacje mogą go nie lubić, ponieważ oczekują, że istnieje konto uprzywilejowane o nazwieroot
. Wywoływanie konta uid 0 na * nixroot
jest bardzo silną konwencją, ale nie jest wymagane przez system (chociaż może być wymagane przez niektóre oprogramowanie użytkownika, w tym również narzędzia administracyjne systemu).Warto również zauważyć, że, jak podkreślił Simon Richter , na BSD tam często istnieje drugi uid 0 konto, umownie nazwany
toor
(który jest „root” wspak, a także leksykalnie przychodzi poroot
w lista posortowana alfabetycznie). Na przykład FreeBSD używa go, aby zapewnić użytkownikowi rootowi niestandardowe ustawienie powłoki, pozostawiając użytkownikowi rootowi domyślną powłokę, która na pewno istnieje na głównej partycji systemu (przydatna do celów odzyskiwania).źródło
root
itoor
, zarówno z UID 0.root
, więc nie ma problemu, dopóki biblioteki sklepu uwierzytelniania nie będą mylone z dwoma użytkownikami o tym samym UID (w takim przypadku BSD nie zrobiłyby tego, że sposób, inaczej biblioteki zostaną naprawione).1) administrator jest zawsze uid == 0. Jest to zakodowane w jądrze. Aby to zmienić, potrzeba trochę kodowania w jądrze. Nie ma to wiele sensu, więc nie zostało to zrobione. Na przykład byłoby niespójne w przypadku innych unixów korzystających na przykład z tego samego NFS.
2) Uid 0 niekoniecznie odwzorowuje na root. Najlepszym przykładem jest FreeBSD. Ma dwa konta UID == 0, z tą różnicą, że jest powłoką. root ma powłokę / bin / sh, która jest prostą powłoką, przydatną, gdy dyski są uszkodzone i potrzebujesz fsck / usr. toor używa tcsh, który jest znacznie bardziej użyteczny w sytuacjach innych niż nagłe, ponieważ ma takie rzeczy jak historia itp.
Kolejny, bardziej osobisty przykład; jedno zadanie miałem, gdzie mieli konto root equiv (tj. uid = 0) przez NIS. Hasło puste! Ponieważ nowy sysadmin nie mógł zapamiętać hasła roota na komputerach. Krzyczałem na ten temat z oczywistych powodów (hasła NIS z definicji nie mogą ukryć ich pustki). Nie podobało mi się to konto.
I tak naprawdę to nie system, który daje UID 0 to root, to ty. Zmieniasz to za pomocą plików passwd lub innych katalogów nazw (NIS, ldap), ale nie jest to skompilowane. Chociaż powinieneś mieć co najmniej jedno konto uid 0 w / etc / passwd, ponieważ możesz nie mieć sieci, kiedy naprawdę tego potrzebujesz .
Zatem root to zawsze uid 0, ale uid 0 niekoniecznie zawsze jest root.
źródło
Cóż, dla systemów, które używają serwera nonStop, ROOT_UID to nie 0, ale 65535.
Użytkownicy i grupy OSS Środowisko OSS nie udostępnia wspólnych domyślnych nazw użytkowników i identyfikatorów użytkowników UNIX, chyba że są one jawnie utworzone przez administratora witryny. Istnieją jednak równoważne nazwy użytkowników i identyfikatory użytkowników OSS. Na przykład uprawnienia zwykle związane z katalogiem głównym użytkownika UNIX i identyfikatorem użytkownika 0 istnieją dla identyfikatora użytkownika OSS (UID) 65535 (super ID), którym jest użytkownik SUPER.SUPER i jego aliasy.
Zobacz https://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf
W coreutils możesz znaleźć ten plik nagłówkowy root-uid.h:
źródło