Во всех системах Linux, которыми я управлял, учетная запись root имеет GID и UID, равный 0. Это гарантировано, или возможно, что система будет давать root другим ID?
Во всех системах Linux, которыми я управлял, учетная запись root имеет GID и UID, равный 0. Это гарантировано, или возможно, что система будет давать root другим ID?
Ответы:
На самом деле есть две части вашего вопроса.
У учетной записи суперпользователя всегда есть uid / gid 0/0 в Linux?
Да. Как отметил Рич Хомолка в комментарии , в ядре есть код, который явно проверяет uid 0, когда нужно проверить пользователя root, что означает, что root всегда имеет как минимум uid 0.
Всегда ли имя учетной записи пользователя с uid 0
root
?
No. root
это просто имя, указанное в / etc / passwd или другом хранилище аутентификации. С таким же успехом вы можете вызвать учетную запись admin
, и сама ОС не будет беспокоиться, но некоторым приложениям это может не понравиться, поскольку они ожидают, что существует привилегированная учетная запись с именем root
. Вызов учетной записи uid 0 в * nix root
является очень жестким соглашением, но он не требуется системой (хотя это может требоваться определенным программным обеспечением пользователя, возможно, включая утилиты системного администрирования).
Стоит также отметить , что, как отметил Саймон Рихтер , на BSDs там часто существует вторая UID 0 счета, по соглашению с именем toor
(что «корень» , записанный задом наперед, а также лексически приходит после root
того, как в списке отсортированы в алфавитном порядке). Например, FreeBSD использует его для предоставления пользователю root настраиваемого параметра оболочки, оставляя пользователю root оболочку по умолчанию, которая гарантированно существует в корневом разделе системы (полезно для целей восстановления).
root
и toor
, оба с UID 0.
root
, так что нет проблем, если библиотеки хранилища аутентификации не запутаются у двух пользователей с одинаковым UID (в этом случае BSD не сделает этого так, что Кстати, или библиотеки будут исправлены).
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.
Хорошо для систем, которые используют nonStop сервер, ROOT_UID не 0, а 65535.
Пользователи и группы OSS Среда OSS не предоставляет общих имен пользователей и идентификаторов пользователей UNIX по умолчанию, если они явно не созданы администратором сайта. Однако эквивалентные имена пользователей OSS и идентификаторы пользователей существуют. Например, привилегии, обычно связанные с именем пользователя UNIX root и идентификатором пользователя 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