Sudo

sudo
Команда sudo в терміналі
ТипБезпека
АвториRobert Coggeshall, Cliff Spencer
РозробникTodd C. Miller
Перший випускПриблизно в 1980[2]
Операційна системаUnix-like
Мова програмуванняC
ЛіцензіяISC
Репозиторійgithub.com/sudo-project/sudo
Вебсайтwww.sudo.ws

sudo (англ. substitute user do, дослівно "підмінити користувача та виконати") — це програма для UNIX-подібних операційних систем що дозволяє делегувати повноваження тобто виконувати певні програми з правами доступу інших користувачів. Команда sudo надає можливість користувачам виконувати команди від імені root чи інших користувачів.

Правила, що використовуються sudo для ухвалення рішення про надання доступу, знаходяться в конфігураційному файлі /etc/sudoers. Налаштування конфігураційного файлу може описувати які користувачі, які команди можуть виконувати з правами яких цільових користувачів. Можуть бути прописані додаткові вимоги як наприклад вимога наявності терміналу, вимога введення паролю користувача або групи, вимога вводити пароль щоразу при виконанні команди чи навпаки запам'ятовування факт правильного вводу паролю на деякий час. Для редагування файлу sudoers використовується програма visudo - обгортка над текстовим редактором, яка перевіряє синтаксис конфігураційного файлу і тим самим дозволяє уникнути помилок у правилах.

Основна відмінність від схожої програми su, це те що налаштування відбуваються для поточного користувача, і для виконання потрібно підтвердити повноваження поточного користувача. Наприклад для su потрібно знати пароль root, а для sudo пароль поточного користувача. Це дозволяє і аутентифікувати користувачів, і не розкривати секретний пароль цільового користувача, наприклад root. За замовчуванням для користування sudo користувачі повинні бути в групі wheel або sudo. Для безпеки може бути налаштований механізм аудиту, та реєстрації кожної команди. У випадку якщо були проблеми аутентифікації (користувач не ввів правильно свій пароль) або авторизації (користувач намагався викликати команду на яку не має повноважень), то про це буде сповіщено системному адміністратору.

Приклади

# Користувачі групи sudo можуть виконувати всі команди з повноваженнями root, після введення свого паролю.
%sudo   ALL=(ALL:ALL) ALL

# Користувач user1 має право робити stop, start, restart сервісів без введення пароля.
user1 ALL=(ALL) NOPASSWD: /usr/bin/systemctl start,stop,restart

# Користувач user2 має право робити stop, start, restart сервісів після введення пароля.
user2 ALL=(ALL) ALL: /usr/bin/systemctl start,stop,restart

# Користувач user3 має право виконувати команду /path/to/somecommand від імені privelegeduser, без введення пароля.
user3 ALL=(privelegeduser) NOPASSWD: /path/to/somecommand

Цікаві факти

Значення назви sudo дискусійне. На офіційному сайті сказано що воно походить від su do[3]. Але що означає su в контексті sudo, є предметом обговорень. Тому що комада su історично значила 'superuser', проте зараз sudo забезпечує делегування повноважень інших користувачів ніж суперкористувач, то спільнота вважає що sudo повинно мати ширше значення. su зараз розкривається як "substitute user" - замінити користувача. Таким чином основні трактування це superuser do, та substitute user do, але ще є варіанти англ. "switch user" або "subshell".[4]

Цікавим фактом є походження логотипу від 2019 року у вигляді сендвічу, яке прямо відсилає до коміксу xkcd [5].

Повідомлення що виводилось у випадку неправильного вводу пароля, або відсутності повноважень в файлі sudoers - "This incident will be reported." (Про цей інцидент буде повідомлено) виглядало лякаюче, особливо для користувачів своїх персональних комп'ютерів вдома. І здогадки хто саме отримує були предметом жартів.[6]. Було виправлено в 2022 році[7], що було помічено в спільноті UNIX-користувачів.

Див. також

Посилання

Примітки

  1. A Brief History of Sudo
  2. Miller, Todd C. A Brief History of Sudo. Архів оригіналу за 16 листопада 2018. Процитовано 15 листопада 2018.
  3. https://www.sudo.ws/ Sudo (su “do”)
  4. https://web.archive.org/web/20230224155431/https://pthree.org/2009/12/31/the-meaning-of-su/ "su" can do so much more than Ken and Dennis implemented back then, as already discussed. Surely, the definition of "su" has changed, at least a little? I would hope so. The great thing with human language, is it is dynamic and flexible. We, as a society decide what meanings we put to our words, so as far as we are concerned, "su" could mean so much more than "super user". We can define it to mean "switch user", "substitute user" or "subshell". Or, we can be stubborn, and hold to the old definition from 1975 that "su" means "super user".
  5. https://xkcd.com/149/
  6. https://xkcd.com/838/
  7. https://github.com/sudo-project/sudo/commit/6aa320c96a37613663e8de4c275bd6c490466b01