Что произойдет, если я создаю учетную запись с именем «root»?


30

Если бы я создал учетную запись пользователя в Ubuntu под названием root, будет ли он автоматически иметь права root? Сломать систему? Вызывает глюк в матрице? Что случилось бы?


25
Там уже есть учетная запись с именем root.
независимо от того, что

Ответы:


46

Имена пользователей должны быть уникальными, поэтому, как отмечается в ответе Оуэна Хайнса , вы не сможете создать этого пользователя. Однако ключевым моментом здесь является то, что полномочия суперпользователя (все возможные разрешения) предоставляются не именем пользователя root, а UID.

Пользователь с UID 0 является суперпользователем.

Таким образом, если пользователь с UID 0 имеет другое имя, и вы создали пользователя с именем root, они не будут иметь никакого специального статуса.

Я отсылаю вас к тегу вики!


Не могли бы вы переименовать существующую учетную запись root и затем создать обычного пользователя root?
Эмори

Как примечание, представляется возможным (хотя я не пытался) изменить имя пользователя uid 0 на что-то другое, поэтому суперпользователь не вызывается root. Не отличная идея, но возможно. Так, например, можно создать учетную запись суперпользователя, вызываемую godс помощью uid 0, а обычного пользователя - rootс помощью uid 1000или какого-то другого числа.
Ян Д. Скотт

15

Это не позволит вам, потому что уже будет rootпользователь.

Но, как сказал Флориан Диш в комментариях:

Некоторые инструменты будут жаловаться, но вы всегда можете отредактировать /etc/passwdи etc/shadowвручную создать второго пользователя с именем root.


2
И если вы сделаете это, что произойдет chown root file?
fkraiem

1
@fkraiem, хм .. хороший вопрос, я не знаю ответа на это.
TheOdd

3
Раньше случалось так, что первый в файле побеждает. Я не знаю сейчас.
Джошуа

5

Во-первых, как, как уже говорили другие, вы меняете пользователя с UID 0 на что-то другое. Затем вы можете создать обычного пользователя с именем root и UID выше 1000. Это будет работать «отлично». Все разрешения и основные функции системы используют UID, а не имя пользователя. На самом деле это хороший первый шаг в усилении системы Linux. (гораздо лучше отключить root, но до sudo мы это делали).

Теперь о том, что произойдет.

Большую часть времени ничего. Все системные вызовы, связанные с авторизацией или аутентификацией, используют UID (о котором я знаю). И так было в течение некоторого времени. Ваша система будет работать как обычно. Системные инструменты будут отражать новое имя пользователя, но продолжают работать в обычном режиме. Другими словами, «корень» условен и не установлен в камне.

Тем не менее, я уверен, что есть некоторые инструменты и программы, которые плохо написаны. Программы, которые проверяют переменную среды $ USER, могут работать неправильно. Обычно это скрипты и небольшие проекты, но вы могли бы потратить некоторое время на отслеживание этого плохого коммита, 6 лет назад в fdisk, который продолжает вызывать у вас головную боль.

Это то, что я делал все время. Это был легкий шаг, подпадающий под правило «непредсказуемых имен пользователей». Однако сегодня существует НАМНОГО лучших способов достижения тех же целей.


ты имеешь в виду UID, я думаю
Занна

1

Как объяснили другие, именно UID = 0 дает пользователю «суперспособности», а не имя пользователя «root». Таким образом, если вам каким-то образом удалось создать другого пользователя с именем «root» (после переименования / удаления исходного) - супер-статус пользователя будет зависеть от UID, который вы ему дали.

Что также приводит к другой интересной идее: вполне возможно иметь несколько пользователей с одинаковым UID (что делает их по существу одним и тем же пользователем с точки зрения разрешений файловой системы, но позволяет иметь разные, скажем, оболочки и домашний каталог). Фактически, некоторые UNIX-подобные системы имеют другую учетную запись суперпользователя, называемую toor (root back ), которая позволяет иметь две учетные записи суперпользователя с различными настройками.


1

Как создать 2-й корень:

Да, теоретически, не должно быть двух пользователей с одинаковыми именами или идентификаторами. А стандартные утилиты надежны и не сделают таких пользователей для вас. Но вы всегда можете редактировать / etc / passwd вручную.

Например, я сделал:

$ sudo adduser root2 # created ordinary user
$ sudo vim /etc/passwd # edit last line, change 'root2' to 'root'. 
$ sudo -u '#1002' id # 1002 is UID of new user, it's in last line of /etc/passwd
uid=1002(root) gid=1002(root2) группы=1002(root2)

Как видите, мы теперь root. Да, это не настоящий root (не uid = 0), но это те же четыре буквы. Впечатляет и бесполезно.

Как лучше создать 2-й «корень»:

Также вы можете сделать другие модификации. Оставьте имя пользователя как есть (ваше имя или root2), но измените uid.

$ tail -n 1 /etc/passwd
root2:x:0:0:,,,:/home/root2:/bin/bash

(см. поля UID и GID равны нулю) Теперь у вас есть обычный (не root) пользователь с почти не подозрительным именем пользователя (или для лучшего эффекта создайте имя пользователя 'johndoe'), но на самом деле этот пользователь обладает суперспособностями!

$ fdisk /dev/sda
fdisk: unable to open /dev/sda: Permission denied
$ sudo -u root2 fdisk /dev/sda

Command (m for help):

Как видите, обычный пользователь не может использовать fdisk в / dev / sda, но root2 может делать все что угодно!

Этот простой трюк иногда используется после взлома системы для обеспечения бэкдора. Даже если настоящий root изменит свои ключи / пароли, хакер все равно будет иметь полный контроль над системой через другого пользователя с uid = 0.

Как работает матрица

На самом деле, ни имя пользователя root, ни uid = 0 само по себе не волшебно. Это просто вопрос соглашения. И это даже не всегда так. (см. этот вопрос: всегда ли у учетной записи root UID / GID 0? ) Код ядра является волшебным. На самом деле, сам код пользовательского пространства - не может сделать ничего, что может сделать root. Даже если работает от имени root! Корневая сила в ядре. например, если вы делаете «cat / etc / shadow» (обычно это может делать только root), программа / bin / cat вызывает функцию libc open (), которая по-прежнему является кодом пользовательского пространства, и эта функция open () выполняет системный вызов ядра. Тогда само ядро ​​решает, что делать. Например, ядро ​​может разрешить некоторые операции, если эффективный пользователь имеет id == 0.

Теоретически, если вы измените какой-то код в ядре и по-разному будете обрабатывать пользователя 'www-data' - некоторые операции могут быть разрешены только для пользователя 'www-data' (и даже не могут получить права root).


0

Большинство «удобных» инструментов проверят это и не позволят вам создать учетную запись с уже введенным именем пользователя.

Если вы обойдете это и вручную добавите в учетную запись / etc / passwd и / etc / shadow вторую корневую учетную запись, то какая из них будет использоваться, я думаю, будет зависеть, если вы поставите ее до или после первоначальной. Как и все учетные записи пользователей в системе Unix, он также будет иметь доступ суперпользователя, только если его UID равен нулю, независимо от имени.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.