Як керувати доступом sudo в Linux

Команда sudo дозволяє запускати команди в Linux так, ніби ви були кимось іншим, наприклад, root. sudo також дозволяє детально контролювати, хто може отримати доступ до можливостей root. Надайте користувачам повний доступ або дозвольте їм використовувати невелику підмножину команд. Ми покажемо вам, як.

Дозволи sudo та Root

Ми всі чули (надмірне спрощення), що все в Linux є файлом. Насправді, практично все в операційній системі, від процесів, файлів, каталогів, сокетів і каналів, зв’язується з ядром через файловий дескриптор. Отже, хоча все не є файлом, більшість об’єктів операційної системи обробляються так, як ніби вони є. Де можливо, дизайн Linux і Unix-подібних операційних систем дотримується цього принципу.

Концепція «все є файлом» є далекосяжною в Linux. Тоді легко побачити, як права доступу до файлів у Linux стали одним з основних привілеїв і прав користувачів. Якщо у вас є файл або каталог (особливий тип файлу), ви можете робити з ними що завгодно, зокрема редагувати, перейменовувати, переміщувати та видаляти їх. Ви також можете встановити дозволи на файл, щоб інші користувачі або групи користувачів могли читати, змінювати або виконувати файл. Усі керуються цими дозволами.

Усі, окрім суперкористувача, відомі як root. Корневий обліковий запис – це обліковий запис із особливими привілеями. Він не обмежений дозволами на жодний з об’єктів операційної системи. Користувач root може робити все, що завгодно, і майже в будь-який час.

Звичайно, кожен, хто має доступ до пароля root, може зробити те ж саме. Вони можуть спричинити хаос як зловмисно, так і випадково. Насправді, користувач root також може спричинити хаос, зробивши помилку. Ніхто не є непогрішим. Це небезпечна річ.

Ось чому зараз вважається найкращою практикою взагалі не входити в систему як root. Увійдіть за допомогою звичайного облікового запису користувача та використовуйте sudo to підвищити свої привілеї на короткий термін вони вам потрібні. Часто це просто подати одну команду.

Список sudoers

sudo вже було встановлено на комп’ютерах Ubuntu 18.04.3, Manjaro 18.1.0 та Fedora 31, які використовувалися для дослідження цієї статті. Це не сюрприз. sudo існує з початку 1980-х років і став стандартним засобом роботи суперкористувача майже для всіх дистрибутивів.

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

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

Виконання команди від імені іншого користувача

Спочатку це називалося «суперкористувач робити», тому що ви могли робити речі як суперкористувач. Його область застосування тепер розширена, і ви можете використовувати sudo для виконання команди, наче будь-який користувач. Його було перейменовано, щоб відобразити цю нову функціональність. Тепер це називається «замінний користувач робить».

  6 найкращих додатків для чату Pidgin для користувачів Linux

Щоб використовувати sudo для виконання команди від іншого користувача, нам потрібно використовувати параметр -u (користувач). Ось ми збираємося запускати хто я команда як користувач mary. Якщо ви використовуєте команду sudo без параметра -u, ви запускаєте команду від імені root.

І, звичайно, оскільки ви використовуєте sudo, вам буде запропоновано ввести пароль.

sudo -u mary whoami

У відповідь whoami повідомляється, що обліковий запис користувача, який запускає цю команду, — mary.

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

sudo -i -u mary
pwd
whoami
ls -hl
exit

Ви ввійшли як mary. Файли «.bashrc», «.bash_aliases» і «.profile» для облікового запису користувача mary обробляються так, як якщо б власник облікового запису mary увійшов у систему.

Командний рядок змінюється, щоб відобразити, що це сеанс для облікового запису користувача mary.
Команда pwd повідомляє, що ви зараз у Mary’s домашній каталог.
whoami повідомляє нам, що ви використовуєте обліковий запис користувача mary.
Файли в каталозі належать обліковому запису користувача mary.
Команда exit повертає вас до ваш звичайний сеанс облікового запису користувача.

Редагування файлу sudoers

Щоб додати користувачів до списку людей, які можуть використовувати sudo , потрібно відредагувати файл sudoers. Дуже важливо, щоб ви робили це лише за допомогою команди visudo. Команда visudo запобігає спробі кількох людей одночасно відредагувати файл sudoers. Він також виконує перевірку синтаксису та синтаксичний аналіз на вміст файлу під час його збереження.

Якщо ваші правки не проходять тести, файл не буде збережено наосліп. Ви отримуєте варіанти. Ви можете скасувати та відмовитися від змін, повернутися назад і знову відредагувати зміни або примусово зберегти неправильні зміни. Останній варіант – дуже погана ідея. Не піддавайтеся спокусі зробити це. Ви можете опинитися в ситуації, коли всі випадково не зможуть використовувати sudo.

Хоча ви починаєте процес редагування за допомогою команди visudo, visudo не є редактором. Він викликає один із ваших існуючих редакторів для редагування файлу. На Manjaro та Ubuntu запущена команда visudo простий редактор нано. У Fedora Visudo запустив більш потужний —але менш інтуїтивно зрозумілий—вім.

Якщо ви хочете використовувати nano на Fedora, ви можете зробити це легко. Спочатку встановіть nano:

sudo dnf встановити nano

І тоді візудо потрібно було викликати за допомогою цієї команди:

sudo EDITOR=nano visudo

Схоже, це хороший кандидат на псевдонім. Відкривається редактор nano із завантаженим у нього файлом sudoers.

Додавання користувачів до групи sudo

Використовуйте visudo, щоб відкрити файл sudoers. Або скористайтеся цією командою або описаною вище, щоб вказати редактор на ваш вибір:

sudo visudo

Прокручуйте файл sudoers, поки не побачите визначення запису %sudo.

Знак відсотка вказує, що це визначення групи, а не визначення користувача. У деяких дистрибутивах рядок %sudo має хеш # на початку рядка. Це робить рядок коментарем. Якщо це так, видаліть хеш і збережіть файл.

  Як призупинити скрипт Bash за допомогою команди Linux Sleep

Рядок %sudo розбивається так:

%sudo: назва групи.
ALL=: Це правило застосовується до всіх хостів у цій мережі.
(ВСЕ:ВСІ): члени цієї групи можуть виконувати команди як усі користувачі, так і всі групи.
Усі: члени цієї групи можуть виконувати всі команди.

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

У нас є два користувача, Tom і Mary, з обліковими записами користувачів tom і mary відповідно. Ми додамо обліковий запис користувача tom до групи sudo за допомогою команди usermod. Параметр -G (групи) визначає групу, до якої ми збираємося додати обліковий запис tom. Параметр -a (додати) додає цю групу до списку груп, у яких уже перебуває том облікового запису користувача. Без цього параметра Том облікового запису користувача буде розміщено в новій групі, але видалено з будь-яких інших груп.

sudo usermod -a -G sudo tom

Давайте перевіримо, до яких груп входить Марія:

groups

Обліковий запис користувача mary є лише в групі mary.

Давайте перевіримо з Томом:

groups

Обліковий запис користувача tom — і, отже, Tom — знаходиться в групах tom і sudo.

Давайте спробуємо змусити Мері зробити щось, що вимагає привілеїв sudo.

sudo less /etc/shadow

Мері не може заглянути всередину обмеженого файлу «/etc/shadow». Вона отримує м’яку відмову за спробу використовувати sudo без дозволу. Давайте, як справи у Тома:

sudo less /etc/shadow

Як тільки Том введе свій пароль, йому буде показано файл /etc/shadow.

Просто додавши його до групи sudo, він був піднесений до елітних рангів тих, хто вміє використовувати sudo. Повністю необмежений.

Надання користувачам обмежених прав sudo

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

Давайте познайомимося з Гаррі, власником облікового запису Гаррі. Він не в групі sudo, і він не має привілеїв sudo.

groups

Гаррі корисно встановлювати програмне забезпечення, але ми не хочемо, щоб він мав повні права sudo. Без проблем. давайте запустимо Visudo:

sudo visudo

Прокручуйте файл униз, поки не пройдете визначення груп. Ми збираємося додати рядок для Гаррі. Оскільки це визначення користувача, а не визначення групи, нам не потрібно починати рядок зі знаком відсотка.

Запис для облікового запису Гаррі:

harry    ALL=/usr/bin/apt-get

Зверніть увагу, що між «гаррі» та «ALL=» є вкладка.

Це означає, що обліковий запис користувача Гаррі може використовувати перераховані команди на всіх хостах, підключених до цієї мережі. У списку є одна команда, яка називається «/usr/bin/apt-get». Ми можемо надати Гаррі доступ до кількох команд, додавши їх до списку команд, розділених комами.

  Як записати робочий стіл Linux у Wayland

Додайте рядок до файлу sudoers і збережіть файл. Якщо ви хочете ще раз перевірити, чи синтаксично правильний рядок, ми можемо попросити Visudo сканувати файл і перевірити синтаксис для нас, використовуючи параметр -c (лише перевірити):

sudo visudo -c

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

sudo apt-get install finger

Гаррі надано відповідні права sudo, і він може встановлювати програмне забезпечення.

Що станеться, якщо Гаррі спробує використати іншу команду, яка вимагає sudo?

sudo shutdown now

Гаррі не може виконувати команду. Ми успішно надали йому конкретний, обмежений доступ. Він може використовувати призначену команду і нічого більше.

Використання псевдонімів користувачів sudoers

Якщо ми хочемо надати Мері ті самі привілеї, ми можемо додати рядок у файл sudoers для облікового запису користувача mary точно так само, як ми зробили з Гаррі. Інший, більш акуратний спосіб досягти того ж самого – використовувати псевдонім User_Alias.

у файлі sudoers псевдонім User_Alias ​​містить список імен облікових записів користувачів. Ім’я User_Alias ​​можна використовувати у визначенні для представлення всіх цих облікових записів користувачів. Якщо ви хочете змінити привілеї для цих облікових записів користувачів, у вас є лише один рядок для редагування.

Давайте створимо псевдонім User_Alias ​​і використаємо його в нашому файлі sudoers.

sudo visudo

Scroll down in the file until you come to the User_Alias specification line.


Додайте псевдонім User_Alias, ввівши:

User_Alias INSTALLERS = harry, mary

Кожен елемент розділяється пробілом, а не табуляцією. Логіка розкладається так:

User_Alias: Це повідомляє Visudo, що це буде псевдонім користувача.
ВСТАНОВЛЕНИКИ: Це довільна назва для цього псевдоніма.
= Гаррі, Мері: список користувачів, які потрібно включити в цей псевдонім.

Тепер ми відредагуємо рядок, який ми додали раніше для облікового запису користувача harry:

harry    ALL=/usr/bin/apt-get

Змініть його так, щоб він читав:

INSTALLERS    ALL=/usr/bin/apt-get

Це говорить про те, що всі облікові записи користувачів, які містяться у визначенні псевдоніму User_Alias ​​«INSTALLERS», можуть запускати команду apt-get. Ми можемо перевірити це з Мері, яка тепер має змогу встановлювати програмне забезпечення.

sudo apt-get install colordiff

Мері може встановити програмне забезпечення, оскільки вона знаходиться в псевдонімі User_Alias ​​«INSTALLERS», і цей User_Alias ​​отримав ці права.

Три швидкі прийоми судо

Коли ви забудете додати sudo до команди, введіть

sudo !!

І остання команда буде повторена з додаванням sudo на початок рядка.

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

sudo -k

Ви коли-небудь замислювалися, де ви можете побачити невдалі спроби команди sudo? Вони переходять до файлу «/var/log/auth.log». Ви можете переглянути його за допомогою:

less /var/log/auth.log

Ми бачимо запис облікового запису користувача mary, який увійшов на TTY pts/1, коли вона спробувала запустити команду вимкнення від імені користувача «root».

З великою силою…

…приходить можливість делегувати частину цього іншим. Тепер ви знаєте, як надати іншим користувачам можливість вибірково.