Як працює sudo в Linux і чому він замінює root-доступ

10.12.2025 3 хвилин Автор: Lady Liberty

Sudo — один із базових інструментів Linux, який використовується для керування доступом і виконання системних команд. У матеріалі розглядається його роль у щоденній роботі з системою та підхід до розмежування прав без деталей і наперед заданих висновків.

Використання команди sudo у Linux

Команда sudo ( s ubstitute u ser and do , підмінити користувача та виконати) дозволяє суворо певним користувачам виконувати зазначені програми з адміністративними привілеями без введення пароля суперкористувача root . Якщо бути точніше, то команда sudo дозволяє виконувати програми від імені будь-якого користувача, але якщо ідентифікатор або ім’я цього користувача не вказані, то передбачається виконання від імені суперкористувача root . Таким чином, використання sudo дозволяє виконувати привілейовані команди звичайним користувачам без необхідності введення пароля суперкористувача root . Список користувачів та перелік їх прав щодо ресурсів системи може бути налаштований оптимальним чином для забезпечення комфортної та безпечної роботи. Наприклад, команда sudo в Ubuntu Linux використовується в режимі, що дозволяє виконувати будь-які завдання адміністрування системи без інтерактивного входу під обліковим записом root .

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

Командний рядок sudo може бути використаний у таких форматах:

sudo -h | -K | -k | -V

sudo -v [-AknS] [-g group] [-h host] [-p prompt] [-u user]

sudo -l [-AknS] [-g group] [-h host] [-p user] [-u user] [command]

sudo [-AbEHknPS] [-C prompt] [-u user] [VAR=value] [-i|-s] []

sudo -e [-AknS] [-C num] [-g group] [-h host] [-p prompt] [-u user] file

Параметри командного рядка:

  • -A, –askpass – використовувати допоміжну програму для введення пароля

  • -b, –background

  •  виконати команду у фоновому режимі -C файлів >= num

  • -E, –preserve-env – зберегти користувальницьке оточення при виконанні команди

  • -e, –edit – редагувати файли замість виконання команди

  • -g, –group=group – виконати команду від імені або ID вказаної групи

  • -H, –set-home – встановити для змінної HOME домашній каталог вказаного користувача

  • -h, –host – вузлі (якщо підтримується модулем)

  • -i, – login – запустити оболонку входу в систему від імені зазначеного користувача; також можна задати команду

  • -K, –remove-timestamp – повністю видалити файл із timestamp

  • -k, –reset-timestamp – оголосити недійсним файл timestamp

  • -l, –list – показати список прав користувача або перевірити задану команду; у довгому форматі використовується двічі

  • -n, –non-interactive – автономний режим без виведення запитів користувачеві

  • -P, –preserve-groups – зберегти вектор групи замість встановлення цільової групи

  • -p, –prompt=prompt – використовувати вказаний запит пароля

  • -S, –stdin – читати пароль зі стандартного введення

  • -s, –shell – запустити оболонку; також можна задати команду

  • -U, –other-user=user – в режимі списку показувати права користувача

  • -u, –user=user – виконати команду (або редагувати файл) від імені або ID вказаного користувача

  • -V, –version – показати відомості про версію і вийти

  • -v, –validate – оновити тимчасову мітку користувача без виконання команди

  •  припинити обробку

Приклади використання команди sudo :

  • sudo –l – відобразити список команд, доступних для виконання поточного користувача. Крім списку команд, відображаються параметри середовища, які будуть застосовуватися при їх виконанні.

  • sudo –ll – відобразити список команд, доступних для виконання поточного користувача у довгому (розширеному) форматі.

У цьому форматі замість короткого синтаксису для списку дозволених команд у вигляді (ALL: ALL) ALL відображається докладний опис прав користувача:

Sudoers entry:

RunAsUsers: ALL

RunAsGroups: ALL

Команди: ALL

  • sudo lshw -C network – відобразити інформацію про мережеве обладнання з правами суперкористувача root

  • sudo –l –U user1 – переглянути список команд, доступних для виконання користувачеві user1. Для виконання цієї команди користувач повинен бути root або мати право на виконання команди sudo -l, що забезпечується налаштуваннями утиліти sudo у файлі /etc/sudoers

  • sudo ipmitool sensor – виконати команду ipmitool sensor з правами root.

  • sudo su – виконати команду su, тобто. створити сеанс суперкористувача root

  • sudo -i – запустити командну оболонку з правами суперкористувача root. Для виконання цієї команди користувач повинен мати право на виконання програми оболонки в середовищі sudo, наприклад – / bin / bash

  • sudo ls /usr/local/protected – отримати список файлів каталогу, доступного тільки root

  • sudo -u user2 ls ~ – отримати список файлів домашнього каталогу користувача user2

  • sudo -u www vi ~www/htdocs/index.html – редагувати файл ~www/htdocs/index.html від імені користувача www

  • sudo -g adm view /var/log/syslog – переглянути файл системного журналу, доступного тільки суперкористувачу root і членам групи adm

  • sudo -u user1 -g users2 vi /home/users2/textfile.txt – редагувати текстовий файл як користувач user1, з приналежністю до первинної групи users2

  • sudo -E /usr/bin/firefox – запустити браузер firefox від імені суперкористувача root, зберігши параметри середовища поточного користувача. Можливість виконання команд із збереженням середовища користувача має бути дозволена параметром SETENV у налаштуваннях конфігураційного файлу sudo

Файл конфігурації /etc/sudoers

Налаштування sudo визначається вмістом файлу /etc/sudoers . Оскільки помилкові дані в даному файлі можуть призвести до серйозних проблем доступу до ресурсів системи, рекомендується виконувати його зміну за допомогою спеціального редактора sudoedit (у деяких дистрибутивах – visudo ), який підтримує функції перевірки синтаксису та значно знижує ризик створення непрацездатної конфігурації sudo .

Вміст файлу /etc/sudoers визначає імена користувачів і груп, перелік програм, необхідність введення паролів, і деякі інші налаштування, пов’язані з формуванням змінних оточення при зміні користувача. Крім цього файлу, налаштування sudo можуть визначатися вмістом файлів з каталогу /etc/sudoers.d , що дозволяє структурувати систему надання прав на використання sudo у вигляді набору файлів з осмисленими іменами, що корисно за великої кількості користувачів та складної системи розмежування прав. Імена файлів конфігурацій у каталозі /etc/sudoers.d можуть бути будь-якими, але їхній вміст має повністю відповідати формату файлу /etc/sudoers . У іменах файлів не варто використовувати символ . (точка) та ~ (тильда) – такі файли ігноруватимуться.

Синтаксис налаштувань у файлі /etc/sudoers дозволяє використовувати спеціальні псевдоніми (Alias-и), за допомогою яких значно спрощується як налаштування, так і сприйняття конфігураційної інформації sudo .

У конфігураційному файлі /etc/sudoers можливе використання чотирьох різновидів псевдонімів:

  • User_Alias ​​- списки користувачів, для яких налаштовується політика використання sudo .

  • Runas_Alias ​​- списки користувачів, від імені яких може бути задано виконання команд через sudo .

  • Host_Alias ​​– списки вузлів, з яких виконується підключення до системи.

  • Cmnd_Alias ​​- списки команд, що використовуються в налаштуваннях, що виконуються директивами файлу /etc/sudoers

Приклади:

  1. Host_Alias ​​ADMCOMPS = localhost, server, admin – визначає псевдонім ADMCOMPS , який визначає групу комп’ютерів з іменами localhost, server, admin .

  2. Host_Alias ​​MAILSERVERS = 192.168.0.100, smtp2 – визначає групу з двох комп’ютерів із зазначеними IP та ім’ям. Можливе використання адрес підмереж.

  3. User_Alias ​​ADMINS = jsmith, admusr – визначає групу ADMINS , куди входять користувачі з іменами jsmith і admusr .

Аналогічно можна створити псевдоніми для різних наборів команд, доступних для виконання в sudo :

## Група команд, для роботи в мережі, псевдонім Networking

Cmnd_Alias ​​NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/ /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

# Група команд для керування установкою та видаленням програм, псевдонім SOFTWARE Cmnd_Alias

​​SOFTWARE = ​​/bin/rpm, /usr/bin/up2date, /usr/bin/yum

# Група команд для керування системними службами

/sbin/service, /sbin/chkconfig

Аналогічно можна створити псевдоніми для груп команд, виконання яких делегується поодиноким або об’єднаних псевдонімами користувачів.

Основна частина налаштувань у файлі /etc/sudoers визначає правила, що визначають, які користувачі, яких комп’ютерів, які команди можуть виконувати. Формат записів:

user MACHINE=COMMANDS
  • user – імена чи псевдоніми користувачів.

  • MACHINE – імена або псевдоніми комп’ютерів

  • COMMANDS – секція команд, що включає імена чи псевдоніми команд та додаткові параметри.

Зазвичай, у файлі /etc/sudoers присутня директива, що дозволяє виконання користувачеві root будь-яких команд при будь-якому підключенні до системи:

## Allow root to run any commands anywhere

root ALL=(ALL) ALL

Аналогічно можна дозволити виконання через sudo всіх команд користувача , наприклад,

ALL= ALL= ALL= ALL= ALL= ALL

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

user ALL=(ALL) NOPASSWD: /usr/bin/su, /usr/bin/drakxconf – пароль буде запитуватися при виконанні користувачем user через sudo всіх користувачів, крім su і drakxconf

Використання підключатися до системи з різних комп’ютерів та входити до різних груп:

ADMINS localhost=(ALL) NOPASSWD:ALL– дозволити групі користувачів, визначеній псевдонімом “ADMINS” виконувати будь-які команди при підключенні через петлевий інтерфейс “localhost”

без введення пароля. “SOFTWARE”.

Для існуючих у системі груп користувачів можна також дозволяти виконання окремих команд або груп команд:

  • %users localhost=/sbin/shutdown -h now – дозволити локальним користувачам вимкнення комп’ютера.

  • %operators ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom – дозволити членам групи “operators” монтування та розмонтування зазначених пристроїв.

  • %powerusers ALL=NETWORKING, NOPASSWD: /usr/bin/su – дозволити членам групи “powerusers” виконувати команди групи “NETWORKING” із введенням пароля та команду “su” без пароля.

Досить часто виникає необхідність виключення дозволу виконання окремих команд зі списку, об’єднаних псевдонімом . У цьому випадку, перед ім’ям команди або псевдоніма ставиться знак оклику – !

  • ADMINS ALL= ALL, !NETWORKING – дозволити групі користувачів, об’єднаних псевдонімом “ADMINS” виконання всіх команд, крім команд, об’єднаних псевдонімом “NETWORKING”

У наступному прикладі, використовується конфігурація команд, що дозволяє виконання через sudo для всіх користувачів групи “ADMINS”, всіх команд,

ALL !/bin/bash, !/usr/bin/su

Крім налаштувань доступу, у файлі /etc/sudoers є директиви Defaults , що визначають деякі налаштування шляхів виконуваних файлів і створення змінних оточення при виконанні команд: Defaults

secure_path = /sbin:/bin:/usr/sbin env_keep = “COLOS DISPLAY HOSTSIZE INPUTRC KDEDIR LS_COLORS” Defaults env_keep += “MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE” Defaults env_keep += “LC_COLLATE LC_ID Defaults env_keep += “LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE”

Defaults env_keep += “ LC_TIME LC_ALL потрібно. Однак, це значення можна змінити, додавши значення timestamp_timeout у хвилинах:

Defaults timestamp_timeout=1

У разі, якщо команда sudo буде виконуватися не пізніше ніж через 1 хвилину після введення пароля для попередньої команди, то повторно пароль запитуватись не буде. Якщо значення “timestamp_timeout” зробити рівним нулю, то пароль буде запитуватися при кожному запуску sudo , якщо зробити негативним (-1), то повторне введення пароля не буде запитуватися ніколи.

Для запобігання можливості виконання sudo-команд при підключенні через ssh без авторизації, за замовчуванням, повинна використовуватися команда “ssh –t “:

# Disable “ssh hostname sudo“, because it will show the password in clear.

# You have to run “ssh -t hostname sudo“.

#Defaults requiretty

Для визначення додаткового каталогу з файлами конфігурації користувачів sudo використовується директива:

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)

#includedir /etc/sudoers.d

Якщо будь-яке правило не працює, наприклад, за наявності параметра NOPASSWD пароль все одно запитується, обробляються зверху донизу).

Для більшої безпеки під час налаштування sudo необхідно надавати користувачам мінімально необхідні права для виконання необхідних завдань. Бажано використовувати керування правами через групи, а не індивідуально для кожного користувача. Усі дії, виконані через sudo, фіксуються у журналі /var/log/auth.log .

Для того, щоб команди sudo не фіксувалися історією команд (у файлі ~/.bash_history для оболонки bash), можна скористатися такою особливістю більшості оболонок (наприклад bash), що команда, що починається з пробілу, не записується в історію, якщо включено відповідне налаштування. Щоб перевірити налаштування, введіть команду:

echo $HISTCONTROL

Якщо висновок містить ignorespace або ignoreboth , команди, що починаються з пробілу, не будуть зберігатися в історії.

Якщо ignorespace або ignoreboth відсутня, ви можете включити його командою export

export HISTCONTROL=ignorespace

Щоб зробити цю зміну постійною, додайте рядок

export HISTCONTROL=ignorespace

у файл ~/.bashrc Наприклад командою

echo 'export HISTCONTROL=ignorespace'

>> прогалину в історію не заноситься.

Якщо ви бажаєте, щоб команди, що містять sudo, ніколи не записувалися в історію, можна налаштувати змінну HISTIGNORE .

Для цього додайте наступний рядок у файл ~/.bashrc:

export HISTIGNORE="sudo*"

Це виключить з історії всі команди, що починаються з sudo.

Для застосування змін у файлі ~/.bashrc: без перезавантаження використовуйте команду:

source ~/.bashrc

Детальну довідку щодо використання sudo можна отримати за допомогою команд:

man sudo

man sudoers

Висновок

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

Підписатися
Сповістити про
0 Коментарі
Найстаріші
Найновіше Найбільше голосів
Знайшли помилку?
Якщо ви знайшли помилку, зробіть скріншот і надішліть його боту.