42

Во всех системах Linux, которыми я управлял, учетная запись root имеет GID и UID 0. Гарантируется ли это, или возможно, что система будет давать root другим ID?

3 ответа3

73

На самом деле есть две части вашего вопроса.

У учетной записи суперпользователя всегда есть uid/gid 0/0 в Linux?

Да. Как отметил Рич Хомолка в комментарии, в ядре есть код, который явно проверяет uid 0, когда нужно проверить пользователя root, что означает, что root всегда имеет как минимум uid 0.

Всегда ли имя учетной записи пользователя с uid 0 всегда root?

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

Стоит также отметить, что, как указал Саймон Рихтер, в BSD часто существует вторая учетная запись uid 0, по соглашению называемая toor ("root" пишется в обратном направлении, а также лексически следует после root в списке, отсортированном по алфавиту). Например, FreeBSD использует его для предоставления пользователю root настраиваемого параметра оболочки, оставляя пользователю root оболочку по умолчанию, которая гарантированно существует в корневом разделе системы (полезно для целей восстановления).

15

1) администратор всегда uid == 0. Это закодировано в ядре. Чтобы изменить это, потребовалось бы некоторое кодирование в ядре. Там нет особого смысла в этом, так что это не сделано. Например, это было бы несовместимо для других unixes, использующих тот же NFS, например.

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

Другой, более личный пример; у меня была одна работа, где у них была корневая учетная запись (т. е. uid = 0) через NIS. Пароль, пусто! Потому что новый системный администратор не мог вспомнить пароль пользователя root на машинах. Я кричал об этом по понятным причинам (пароли NIS по определению не могут скрывать свою пустоту). Я не был доволен этим аккаунтом.

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

Таким образом, root всегда равен uid 0, но uid 0 не обязательно всегда root.

1

Хорошо для систем, которые используют nonStop сервер, ROOT_UID не 0, а 65535.

Пользователи и группы OSS Среда OSS не предоставляет общих имен пользователей и идентификаторов пользователей UNIX по умолчанию, если они явно не созданы администратором сайта. Однако эквивалентные имена пользователей OSS и идентификаторы пользователей существуют. Например, привилегии, обычно связанные с именем пользователя UNIX root и идентификатором пользователя 0, существуют для идентификатора пользователя (UID) OSS 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .