Чому “sudo -u root echo` whoami` ”не повертає корінь?


11

Як ви використовуєте sudo для запуску команди як фактичного користувача root на Ubuntu? Спочатку я вважав, що це поведінка судо за замовчуванням, поки я не побіг:

myuser@localhost:~$ sudo echo `whoami`
myuser

myuser@localhost:~$ sudo -u root echo `whoami`
myuser

Однак це тип поведінки, який я хочу, але лише в одному рядку:

myuser@localhost:~$ sudo su -
root@localhost:~# echo `whoami`
root

11
чому відлуння whoami? Просто скажіть, sudo whoami .. повертається root
Neo

Відповіді:


26

Насправді він робить запускати їх як корінь. Але те, що відбувається з тобою, полягає в тому, що тик-тики оцінюються перед sudo запуском, як вони потрібні для оцінки команди. Більш безпосередньо, чому б не просто так:

sudo whoami

Ваш whoamiтир кліщів фактично оцінюється в передплаті як поточний користувач, саме тому ви бачите, що ви робите.


2
Це неправильно. sudo працює з root правами, але не як root.
Манфред Мозер

@Moser, то чому його команда друкує "корінь"?
Серін

4
@ManfredMoser: Він працює з УІД 0(нуль), яка є саме те , що люди називають «корінь». (Ви б мали рацію, якби sudoлише розширили свої можливості, фактично не змінивши UID. Але це не те, що це робиться.)
user1686

1
М. Мозер, можливо , вказував на те, що set-UID змінює лише ефективний ідентифікатор користувача процесу, вимагаючи, щоб потім сам процес пішов про зміну реального ідентифікатора користувача, як це і sudoробиться. Але, прочитавши відповідь xyr, це, здається, насправді не було так.
JdeBP

7

Підзаголовок ( whoami) виконується спочатку, як ви, і результат ( myuser) поміщається в sudoкоманду; те, що sudoбачить, є echo myuser. Подумайте про це як про ярлик для:

tmpvar=`whoami`
sudo echo "$tmpvar"

1

Здається, тут відбувається певне переконання ...

Зворотні посилання, очевидно, роблять те, що пояснили інші, розширюючись whoamiперед тим, як викликати "sudo", і залишаючи заднім числом повернення "root", як очікувалося.

Але корисно зрозуміти, що насправді відбувається з судо (8). Тому я насправді переглянув сторінку чоловіка!

"Реальні та ефективні uid та gid встановлюються так, щоб вони відповідали цільовим користувачам ..."

Отже, виявляється, що спостережувана поведінка не має нічого спільного з різницею між ефективним та реальним ідентифікатором користувача.

Також ілюстративно робити "sudo printenv" і порівнювати лише з "printenv", що насправді мене трохи здивувало. Він показує, що [i] деякі експортовані змінні [/ i] доступні, а інші - ні: він повідомляє HOME, PATH, PS1, SHELL, TERM та EDITOR, але інші, як MANPATH, CVSROOT, LD_LIBRARY_PATH або ENV. Це здається трохи дивним, оскільки це може спричинити поведінку програм інакше, ніж вони як оригінальний користувач, або як root.


0

sudo дозволяє запускати будь-яку команду з привілеями root, але не як користувач root. Причина, чому це корисно, полягає в тому, що за допомогою цього налаштування кілька людей можуть мати права root, але всі записи та інше все ще вказує, хто змінив.

Ця настройка краще, ніж спільне використання паролів root. Як такий, він замінив root користувачів на багатьох дистрибутивах, включаючи Ubuntu.

З іншого боку, sudo su робить вас кореневими користувачами, а тому насправді не слід використовувати.

Ця різниця також пояснює вашу спостережувану (правильну) поведінку.


6
Ні. Те, що пояснює поведінку, є дуже простим питанням того, як працює підміна команд в оболонці. Це взагалі нічого спільного з привілеями.
JdeBP

-2

Судо тимчасово надає привілеї тим, хто ви коли-небудь є (якщо вам дозволено в першу чергу судо) привілеї кореневого рівня.

Щоб бути root, вам доведеться увійти як root, який за замовчуванням заблокований в Ubuntu.

Потрібно бути обережними з цим, судо - це не корінь. Якщо ви хочете показати, що Фред виконує щось як sudo, che3d змінні середовища SUDO, SUDO_COMMAND може бути найбільш корисним.


Корінь заблокований в Ubuntu? Ви впевнені в цьому? Я знаю, що це відволікає, але я думав, що вони просто ускладнюють новачка, фактично встановлюючи незрозумілий пароль за допомогою UUID, який можна змінити за допомогою звичайних методів.
Марті Фрід
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.