Що буде, якби я створив обліковий запис під назвою "root"?


30

Якщо я створив обліковий запис користувача в Ubuntu, який називається root, чи автоматично він матиме кореневі дозволи? Зламати систему? Викликати збіг у матриці? Що б сталося?


25
Уже є обліковий запис, який називається root.
mikew незалежно від

Відповіді:


46

Імена користувачів повинні бути унікальними, тому, як згадується у відповіді Оуена Хейнса , ви не зможете створити цього користувача. Однак ключовим моментом тут є те, що повноваження суперпользователя (усі можливі дозволи) надаються не іменем користувача root, а UID.

Користувач з UID 0 - це суперпользователь.

Отже, якби користувач з UID 0 мав інше ім’я, а ви створили користувача, який називається root, вони не мали б спеціального статусу.

Я посилаю вас на вікі з тегом!


Чи можете ви перейменувати існуючий корінь облікового запису, а потім створити звичайний корінь користувача?
еморі

Як бічна примітка, видається, що можливо (хоча я ще не намагався) змінити ім'я користувача uid 0 на щось інше, тому супервайзер не викликається root. Не чудова ідея, але можлива. Так можна, наприклад, зробити аккаунт суперпользователя, який називається goduid 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. (набагато краще відключити корінь, але раніше судо ми це робили).

Тепер щодо того, що буде.

Більшість часу нічого. Усі системні дзвінки, які мають відношення до авторизації або автентифікації, використовують UID (про що я знаю). І це вже деякий час. Ваша система буде продовжувати працювати як завжди. Системні інструменти відображають нове ім’я користувача, але продовжують працювати нормально. Іншими словами "корінь" за умовами, а не встановлений в камені.

Однак я впевнений, що є деякі інструменти та програми, які написані погано. Програми, що перевіряють змінну середовища $ USER, можуть діяти неправильно. Зазвичай це сценарії та невеликі проекти, але ви могли витратити деякий час на відстеження того поганого вчинку, 6 років тому, у fdisk, який постійно болить у вас.

Це те, що я робив постійно. Це був легкий крок і підпадає під правило "непередбачуваних імен користувачів". Однак сьогодні набагато кращі способи досягнення тих же цілей.


ви маєте на увазі UID Я думаю
Zanna

1

Як пояснили інші, саме UID = 0 дає користувачеві "суперсили", а не ім'я користувача "root". Отже, якщо вам якимось чином вдалося створити іншого користувача під назвою "root" (після перейменування / видалення вихідного) - супер-статус користувача залежатиме від того, який ви йому надали.

Що також призводить до іншої цікавої ідеї: цілком можливо мати декількох користувачів з однаковим UID (що робить їх по суті тим самим користувачем з точки зору дозволів файлової системи, але дозволяє мати різні, скажімо, оболонки та домашній каталог). Насправді, деякі системи, схожі на UNIX, мають ще один обліковий запис суперпользователя під назвою toor (root назад), який дозволяє мати два облікові записи суперкористувача з різними налаштуваннями.


1

Як створити другий "корінь":

Так, теоретично, не повинно бути двох користувачів з однаковим іменем користувача або однаковими ідентифікаторами. А стандартні утиліти є надійними і не роблять таких користувачів для вас. Але ви завжди можете редагувати / 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)

Як бачите, ми зараз корінь! Так, це не справжній корінь (не uid = 0), але це однакові чотири літери. Вражаючий і марний.

Як створити кращий другий "корінь":

Також ви можете зробити інші модифікації. Залиште ім’я користувача таким, яким є, (ваше ім’я або root2), але змініть uid.

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

.

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

Command (m for help):

Як бачите, звичайний користувач не може використовувати fdisk on / dev / sda, але root2 може робити все, що завгодно!

Цей простий трюк, який іноді використовується після того, як система зламана, щоб забезпечити бекдор. Навіть якщо справжній root змінить свої ключі / паролі, хакер все одно матиме повний контроль над системою через іншого користувача з uid = 0.

Як працює матриця

Власне, ні ім'я користувача "root", ні uid = 0 само по собі не є магічним. Це лише питання конвенції. І це навіть не завжди так. (див. це питання: Чи завжди в кореневому обліковому записі є UID / GID 0? ) Код ядра є магічним. Власне, сам код простору користувача - не може зробити нічого, що може зробити root. Навіть якщо працює як root! Потужність кореня знаходиться в ядрі. наприклад, якщо ви робите "cat / etc / shadow" (це може робити тільки звичайний root), / bin / cat програма викликає функцію libc open (), яка все ще є кодом простору користувача, і ця функція open () виконує системний виклик ядра. Тоді ядро ​​самостійно вирішує, що робити. Наприклад, ядро ​​може дозволити деяку операцію, якщо ефективний користувач має id == 0.

Теоретично, якщо ви зміните якийсь код у ядрі та обробіть користувачем "www-data" по-різному - деякі операції можуть бути дозволені лише для користувача "www-data" (і не дозволяти навіть викорінювати).


0

Більшість інструментів, зручних для користувачів, не дозволять вам створити обліковий запис із уже використаним іменем користувача.

Якщо ви обійдете це і вручну додасте другий кореневий обліковий запис до / etc / passwd та / etc / shadow, то який із них буде використовуватися, я думаю, це залежатиме, якщо ви поставите його до або після оригіналу. Як і всі облікові записи користувачів в системі Unix, він також матиме надрукований доступ, лише якщо його UID дорівнює нулю, незалежно від назви.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.