Чи є коли-небудь вагомий привід запускати судо су?


78

Щоб запустити кореневу оболонку на машинах, де кореневий обліковий запис вимкнено, можна запустити один із:

  • sudo -i: запустіть інтерактивну оболонку входу (читає /root/.bashrcта /root/.profile)
  • sudo -s: запустити інтерактивну оболонку без входу (читається /root/.bashrc)

У світі Ubuntu я дуже часто бачу sudo suзапропонований спосіб отримати кореневу оболонку. Навіщо виконувати дві окремі команди, коли одна буде робити? Наскільки я можу сказати, sudo -iце рівнозначно sudo su -і sudo -sте саме, що sudo su.

Здається, є лише відмінності (порівняння sudo -iзліва і sudo su -справа):

знімок екрана порівняння "sudo -i" та "sudo su -"

І порівнюючи sudo -s(ліворуч) і sudo su(праворуч):

знімок екрана порівняння "sudo -s" та "sudo su"

Основні відмінності (ігнорування SUDO_fooзмінних та LS_COLORS) здаються XDG_fooсистемними змінними у sudo suверсіях.

Чи є випадки, коли ця різниця вимагає використання досить неелегантного sudo su? Чи можу я сміливо сказати людям (як це часто буває), що ніколи не має сенсу бігати sudo suчи я щось пропускаю?


8
Я ніколи не розумів тих модних систем, як ubuntuце заважає користувачам бути стандартними su -. Вони створили проблему, і тепер ведуться нескінченні дискусії щодо того, як її вирішити.
jimmij

16
@jimmij Вам не потрібно знати пароль root su -? Ви не думаєте, що це створює отвір у безпеці в середовищі з багатьма користувачами, де більш ніж одній особі потрібно мати root-доступ?
Ератьєль

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

4
Що таке інструмент різниці?
Josh The Geek

5
@jimmij Як Ubuntu перешкоджає використанню su -? Так, треба було б встановити пароль root, але це банально.
Фізи

Відповіді:


62

Як ви сказали у своєму запитанні, головна відмінність - навколишнє середовище.

sudo su - vs. sudo -i

У випадку, якщо sudo su -це оболонка входу, значить /etc/profile, .profileі .bashrcвони виконуються, і ви опинитеся в домашньому каталозі root із середовищем root.

sudo -iмайже такі ж , як і (імітувати початковий логін) опція запускає оболонку , зазначену в запису бази даних пароля цільового користувача в якості оболонки. Це означає , що Логін конкретних ресурсів , таких як файли , або буде читати і виконана оболонкою.sudo su --i.profile.bashrc.login

sudo su vs. sudo -s

sudo suдзвінки sudoза допомогою команди su. Bash називається інтерактивною оболонкою без входу. Так bashвиконуються тільки .bashrc. Ви можете бачити, що після переходу на root ви все ще знаходитесь в одному каталозі:

user@host:~$ sudo su
root@host:/home/user#

sudo -sчитає $SHELLзмінну і виконує вміст. Якщо він $SHELLмістить, /bin/bashвін викликає sudo /bin/bash, а це означає, що /bin/bashвін запускається як не-вхідна оболонка, тому всі dot-файли не виконуються, а bashсам зчитується. bashrcвиклику користувача. Ваше оточення залишається таким же. Ваш дім не буде домом кореня. Отже, ви root, але в оточенні виклику користувача.

Висновок

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

Доповнення

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

Тож значення sudoзловживали. sudoмав на меті заохотити користувача мінімізувати використання привілеїв root.

Те, що ми маємо зараз, sudoстає все більш популярним. Він інтегрований у майже кожен добре відомий дистрибутив Linux. Оригінальним інструментом для переходу на інший обліковий запис користувача є su. Для старої школи * nix ветеран така штука sudoможе здатися непотрібною. Це додає складності та поводиться швидше до механізмів, відомих нам із сімейства Microsofts os, і, таким чином, суперечить філософії простоти * nix систем.

Я насправді не ветеран, але, на мою думку, sudoзавжди був шипом у моєму боці, з тих пір, коли було запроваджено, і я завжди працював навколо використання sudo, якщо це було можливо. Я найбільше неохоче користуюся sudo. У всіх моїх системах увімкнено кореневий рахунок. Але все зміниться, можливо, настане час, коли suбуде застаріле і sudoзамінено suповністю.

Тому я думаю, що найкраще буде використовувати sudoвнутрішні механізми ( -s, -i) замість того, щоб покладатися на старий інструмент, такий як su.


4
А, значить, до 2004 року насправді тоді була причина бігти sudo su? У той час я використовував дистрибутив без sudo та активних кореневих акаунтів, тому не знаю. Це може пояснити поширеність су-су-мему у світі Ubuntu.
terdon

8
Я ніколи не знав про це sudo -iчи sudo -sраніше - я керував різними видами UNIX з 1991 року, і для мене sudo su -це лише вроджена звичка.
пухнастий

2
Є sudo -sтак само , як sudo $SHELLтоді?
Samuel Edwin Ward

3
(Погоджуючись з @chaos) Причини використання - sudo su -це 1) те, що він працює, і ви точно знаєте, що це робить, і 2), що вам не потрібно пам’ятати інший варіант sudo(коли ви вже знаєте su -) і 3) ви не ' не потрібно пам'ятати, з якою версією sudoви працюєте на даний момент. Навіщо згадувати ще одну дрібницю, коли те, що у вас вже є, працює чудово? Чи є щось su -iкраще, ніж уникнути запису журналу? Я не використовую sudo su -достатньо, щоб переживати з цього приводу.
jrw32982

3
Я щойно побачив оновлення, дуже приємно! Для запису дозвольте зазначити, що я занадто різав * nix зуби на системах без, sudoі я дуже звик su. Мене клопотить саме поєднання двох.
тердон

16

Щоб відповісти прямо на ваше запитання: ні, немає вагомих причин для цього. Крім того, sudo su створює два записи журналу, коли одного вистачить.

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

Однак до вашого списку sudo -sі sudo -iя хотів би додати ще один варіант sudo -sE, який є своєрідною заміною su -m. sudo -sEзберігає ваше оточення, включаючи домашній каталог. Це ризикує, якщо ваш домашній каталог небезпечний (на NFS). Але в умовах, коли багато людей використовують root, це позбавляє вас від необхідності погоджувати вміст кореневого .bashrcфайлу. Мій .bashrcмістить багато спеціалізацій для root, тому я не отримую точно такого ж середовища, як root, але принаймні я отримую саме те середовище, яке я хочу.


4
Якщо він зберігає ваше середовище, в тому числі $HOME, це означає, що всі нові файли, створені в домашній папці, належать root, а не ви. У мене з цієї причини багато важко діагностувати помилки дозволу.
Еріс

sudo -sEа потім echo $HOMEдає /rootна CentOS 7, bash 4.2. -sEне зберігається домашній каталог, як ви заявили.
jeremysprofile
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.