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?
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?
Odpowiedzi:
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 root
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 po root
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).
root
i toor
, 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.
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:
/* 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