Чи завжди в кореневому обліковому записі є UID / GID 0?


50

У всіх системах Linux, якими я керував, кореневий обліковий запис має GID та UID 0. Чи гарантовано це, чи можливо, що система видасть root інший ідентифікатор?


3
ID 0 має всі права. Дійсна назва (або імена -multiple-) може відрізнятися. Наприклад, мій сервер має двох uid 0 користувачів. Один називається "корінь", а інший - "тоор".
Геннес

Відповіді:


80

Насправді у вашому питанні є дві частини .

Чи завжди в обліковому записі суперпользователя є uid / gid 0/0 в Linux?

Так. Як вказує Річ Хомолка в коментарі , в ядрі є код, який явно перевіряє uid 0, коли потрібно перевіряти кореневого користувача, а це означає, що у кореня завжди є щонайменше uid 0.

Чи завжди ім'я облікового запису користувача з uid 0 root?

Ні. root - це лише ім'я, вказане в / etc / passwd або іншому магазині аутентифікації. Ви можете так само зателефонувати в обліковий запис admin, і сама ОС не буде байдужою, але деяким додаткам це може не дуже сподобатися, оскільки вони очікують існування привілейованого облікового запису root. Виклик облікового запису uid 0 на * nix root- це дуже тверда умова, але система цього не вимагає (хоча це може знадобитися певним програмним забезпеченням користувача, можливо, включаючи утиліти системного адміністрування).

Варто також відзначити , що, як зазначив Саймон Ріхтер , на BSDs там часто існує друга UID 0 рахунку, за угодою з ім'ям toor(що «корінь» , записаний задом наперед, а також лексично приходить після root того, як в списку відсортовані в алфавітному порядку). Наприклад, FreeBSD використовує його для надання користувачу root користувальницької настройки оболонки, залишаючи кореневому користувачу оболонку за замовчуванням, яка гарантовано існує в кореневому розділі системи (корисно для цілей відновлення).


15
У ядрі є код для перевірки кореня, uid == 0. Так, він жорстко закодований та постійний.
Багата Гомолка

1
У BSD зазвичай є rootі toorобидва з UID 0.
Simon Richter

@SimonRichter У цьому випадку існує обліковий запис суперпользователя з ім'ям root, тому не виникає проблем, якщо бібліотеки магазину аутентифікації не будуть плутати двох користувачів з однаковим UID (у такому випадку BSD не зробить цього так, або бібліотеки виправили б).
CVn

У ядрі є код, який використовує UID = 0 в якості представника root, і зберігає його у змінних під назвою "root_uid", але я не знайшов нічого (через 6 років), що насправді залежить від того, щоб користувач назвав "root". Незалежно від того, чи є UID в / etc / passwd чи ні, зрештою, будуть запущені процеси w / UID = 0. :)
dannysauer

15

1) адміністратор завжди uid == 0. Це закодовано в ядрі. Щоб змінити це, знадобиться деяке кодування в ядрі. Немає сенсу в цьому, тому це не робиться. Наприклад, це було б непослідовно для інших Unix, наприклад, спільних NFS.

2) uid 0 не обов'язково відображається до кореня. Найкращий приклад - FreeBSD. Він має два облікові записи uid == 0, різниця - оболонка. root має shell / bin / sh, що є простою оболонкою, корисною у випадку, коли ваші диски погані і вам потрібен fsck / usr. toor використовує tcsh, що набагато корисніше в не надзвичайних ситуаціях, оскільки в ньому є такі речі, як історія тощо.

Ще один, більш особистий приклад; у мене було одне завдання, де вони мали кореневий еквівалент (тобто uid = 0) рахунок у NIS. Пароль, порожній! Оскільки новий sysadmin не міг запам'ятати корінний пароль на машинах. Я кричав про це з очевидних причин (паролі NIS за визначенням не можуть приховати їх порожнечу). Я не був радий цьому рахунку.

І це насправді не система, яка дає uid 0 - це root, це ти. Ви змінюєте це за допомогою файлів passwd або інших каталогів імен (NIS, ldap), але це не компілюється в. Хоча ви повинні мати принаймні один обліковий запис uid 0 у / etc / passwd, оскільки у вас, можливо, немає мереж, коли вам це справді потрібно. .

Отже, root завжди є uid 0, але uid 0 не обов'язково завжди є root.


1
На жаль, біль вибору лише однієї прийнятої відповіді ...
Танакі

5
@Tanaki Як правило, "прийміть" відповідь, яка допомогла вам найбільше відповісти на ваше запитання, і підсиліть всі відповіді, які ви вважаєте корисними. Ніщо не говорить про те, що ви повинні приймати відповідь, яка найбільше голосує або написана першим.
CVn

1

Добре для систем, які використовують нестандартний сервер, ROOT_UID не 0, а 65535.

Користувачі та групи OSS Середовище OSS не надає загальних імен користувачів та ідентифікаторів користувачів за замовчуванням UNIX, якщо вони явно не створені адміністратором сайту. Однак еквівалентні імена користувачів OSS та ідентифікатори користувачів існують. Наприклад, права, зазвичай пов'язані з коренем імені користувача UNIX та ідентифікатором користувача 0, існують для ідентифікатора користувача OSS (UID) 65535 (супер ідентифікатор), який є користувачем SUPER.SUPER та його псевдонімами.

Дивіться https://h20195.www2.hpe.com/V2/GetPDF.aspx/4AA4-6316ENW.pdf

У coreutils ви можете знайти цей заголовок 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.