Во всех системах Linux, которыми я управлял, учетная запись root имеет GID и UID, равный 0. Это гарантировано, или возможно, что система будет давать root другим ID?
ID 0 имеет все права. Фактическое имя (или имена -multiple-) может отличаться. Например, на моем сервере два пользователя uid 0. Один называется «корень», другой - «тоор».
Hennes
Ответы:
80
На самом деле есть две части вашего вопроса.
У учетной записи суперпользователя всегда есть uid / gid 0/0 в Linux?
Да. Как отметил Рич Хомолка в комментарии , в ядре есть код, который явно проверяет uid 0, когда нужно проверить пользователя root, что означает, что root всегда имеет как минимум uid 0.
Всегда ли имя учетной записи пользователя с uid 0 root?
No.root это просто имя, указанное в / etc / passwd или другом хранилище аутентификации. С таким же успехом вы можете вызвать учетную запись admin, и сама ОС не будет беспокоиться, но некоторым приложениям это может не понравиться, поскольку они ожидают, что существует привилегированная учетная запись с именем root. Вызов учетной записи uid 0 в * nix rootявляется очень жестким соглашением, но он не требуется системой (хотя это может требоваться определенным программным обеспечением пользователя, возможно, включая утилиты системного администрирования).
В ядре есть код для проверки root, uid == 0. Да, он жестко запрограммирован и постоянен.
Богатая Гомолка
1
BSD обычно имеет rootи toor, оба с UID 0.
Simon Richter
@SimonRichter. В этом случае существует учетная запись суперпользователя с именем root, так что нет проблем, если библиотеки хранилища аутентификации не запутаются у двух пользователей с одинаковым UID (в этом случае BSD не сделает этого так, что Кстати, или библиотеки будут исправлены).
CVN
Там же код в ядре , которое использует UID = 0 в качестве представителя корня, и магазины, в переменных с именем «ROOT_UID», но я не нашел ничего (6 лет спустя) , который на самом деле зависит от пользователя , будучи назван «корнем». Независимо от того, находится ли UID в / etc / passwd или нет, в конечном итоге будут запущены процессы с UID = 0. :)
dannysauer
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.
Ой, боль от выбора только одного принятого ответа ...
Танаки
5
@Tanaki Как правило, «примите» ответ, который помог вам больше всего ответить на ваш вопрос, и опишите все ответы, которые вы сочли полезными. Ничто не говорит о том, что вы должны принять самый голосующий или первый письменный ответ.
CVN
1
Хорошо для систем, которые используют nonStop сервер, ROOT_UID не 0, а 65535.
Пользователи и группы
OSS Среда OSS не предоставляет общих имен пользователей и идентификаторов пользователей UNIX по умолчанию, если они явно не созданы администратором сайта. Однако эквивалентные имена пользователей OSS и идентификаторы пользователей существуют. Например, привилегии, обычно связанные с именем пользователя UNIX root и идентификатором пользователя 0, существуют для идентификатора пользователя OSS (UID) 65535 (суперидентификатора), который является пользователем SUPER.SUPER и его псевдонимами.
В 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
Ответы:
На самом деле есть две части вашего вопроса.
Да. Как отметил Рич Хомолка в комментарии , в ядре есть код, который явно проверяет uid 0, когда нужно проверить пользователя root, что означает, что root всегда имеет как минимум uid 0.
No.
root
это просто имя, указанное в / etc / passwd или другом хранилище аутентификации. С таким же успехом вы можете вызвать учетную записьadmin
, и сама ОС не будет беспокоиться, но некоторым приложениям это может не понравиться, поскольку они ожидают, что существует привилегированная учетная запись с именемroot
. Вызов учетной записи uid 0 в * nixroot
является очень жестким соглашением, но он не требуется системой (хотя это может требоваться определенным программным обеспечением пользователя, возможно, включая утилиты системного администрирования).Стоит также отметить , что, как отметил Саймон Рихтер , на 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:
источник