sudo su “ім’я користувача” проти su “ім’я користувача”


5

Поясніть, будь ласка, у чому різниця між: sudo su "username" vs. su "username"

Хто має більш високі привілеї? Якщо я входжу в root з sudo su "username" , я виконую лише одну команду? Тож може статися, що початок сценарію справно працює, а решта ні? Тож у цьому випадку пропонується su "ім'я користувача" , оскільки воно має більші привілеї? Будь ласка, поясніть мені різницю між двома командами, дякую.

Відповіді:


9

Ось відмінності:

  • su <someuser>запускає оболонку для користувача someuser. Якщо ви не root, вам буде запропоновано пароль someuser.
  • su(без імені користувача) запустіть оболонку для користувача root(після запиту пароля root).
  • sudoзапитує ваш пароль і (якщо у вас є права на sudo) виконує команду з привілеями root ( sudo rebootзапитує ваш пароль і перезавантажує комп'ютер).
  • sudo su <somesuer>виконує suз привілеями root. Тому він не запитує someuserпароль. Однак він попросить ваш пароль, щоб підтвердити свої права на sudo. Після цього він запустить оболонку для користувача -користувача .

Що стосується привілеїв , то різниці для оболонки, яку відкриває sudo su <someuser>або на неї, немає su <someuser>. Це не проблема безпеки, оскільки процес оболонки не може перерости до привілеїв батьківського процесу.

Ви можете побачити різницю, якщо подивитися на дерево процесу. sudo su <someuser>показує (припускаючи bash):

+───bash───su───bash

Поки su <someuser>показує:

+───bash───sudo───su───bash

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

  • Запустіть скрипт із cron (або будь-якого його варіанту) та запустіть його як root
  • Запустіть сценарій зі свого аккаунта і використовувати опцію -S з Суду на зразок цього: echo <yourpassword> | sudo -S su -l <someuser>або ще краще: echo <yourpassword> | sudo -S su -l <someuser> -c '<somecommand>'. Переконайтеся, що сценарій читається лише ви самі, оскільки в ньому є ваш пароль. Більш опосередковано, ви можете зберігати свій пароль у файлі та котувати його до sudo. Тоді ваш сценарій можна прочитати, але файл вашого пароля не може бути.

2
Коли ви запускаєте оболонку як інший користувач, корисно використовувати команду su - <someuser>. Це завантажить усе звичайне середовище користувача. Можливо, трапляються випадки, коли ви цього не хочете, але якщо ви намагаєтеся вирішити проблему, яка виникає у користувача, може бути корисним його оточення, як зазвичай.
unkilbeeg

Але, як я зрозумів, якщо я хочу запустити оболонку як інший користувач, немає суттєвої різниці між su <someuser> і sudo su <someuser>. Обидві команди дають вам однакові привілеї. Тому мій script.sh повинен успішно працювати в обох випадках. Або є якась різниця? Можливо, сценарій успішно працює з su <someuser>, але не з sudo su <someuser>?
Петро

Так. sudo запитує ваш пароль. Якщо він не отримує, він виходить. Отже, використовуйте замість су-сю. Судо су нічого не додає.
agtoever

1
Різниця полягає в тому, що вам не потрібно знати пароль <someuser>, якщо у вас є привілеї root, які sudo suвам дають. Щоб користуватися, suне sudoпотрібно знати пароль користувача. Після входу в оточення те саме. Якщо ви не можете запустити sudo, але знаєте кореневий пароль, ви можете використовувати suйого, su <someuser>і це знову дозволить вам увійти як <користувач>, не знаючи його / її пароль.
AFH

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