Утилита sudo в Linux

В этой статье научимся устанавливать, настраивать и использовать утилиту sudo для выполнения административных действий в Linux.















Настройка и использование sudo в Linux




В прошлых статьях этого курса мы говорили про разницу между Ubuntu и Debian в том, что по умолчанию в:




  • Ubuntu — нельзя переключиться на пользователя root, зато установлена утилита sudo и административные действия можно выполнять используя эту утилиту таким образом:




$ sudo <команда>




  • Debian — root пользователь активен, и для выполнения административных действий нужно на него переключиться, а утилита sudo не установлена:




$ su - root
пароль:

# <команда>




Пришло время поближе познакомиться с утилитой sudo в Linux. В Ubuntu она уже установлена а в Debian её нужно установить таким образом:




alex@deb:~$ su -
Пароль:

root@deb:~# apt install sudo




Основным конфигурационным файлом для этой утилиты является файл /etc/sudoers, посмотрим на него:




root@deb:~# cat /etc/sudoers
#
# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "@include" directives:

@includedir /etc/sudoers.d




В самом верху говориться о том, что редактировать вручную этот файл не нужно, для редактирования нужно использовать утилиту visudo. Рассмотрим остальные не закомментированные строки:




  • Defaults env_reset — сбрасывает все локальные переменные пользователя в оболочке sudo. Это повышает безопасность работы sudo в linux. Так как оболочка использует только стандартные системные переменные. А те переменные, которые создал пользователь, использоваться не будут.
  • Defaults mail_badpass — говорит системе отправлять уведомления о неудачных попытках ввода пароля sudo для настроенного пользователя mailto. По умолчанию это учетная запись root. То есть, если вы настроите почтовую систему для root пользователя, то будете на почту получать оповещения о неудачных попытках ввода пароля для sudo.
  • Defaults secure_path=»/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin» — здесь перечислены пути к каталогам, в которых будут искаться программы при выполнении команд с помощью sudo. То есть, вы вводите команду adduser, и файл программы adduser ищется в этих каталогах. А находится он здесь /usr/sbin/adduser.
  • root ALL=(ALL:ALL) ALL — в этой строке разберём по порядку каждое слово:
    • root — правило для пользователя root;
    • ALL = — применяется ко всем хостам;
    • (ALL:ALL) — root может выполнять команды от лица всех пользователей и групп;
    • ALL — правило работает для всех команд.
  • %sudo ALL=(ALL:ALL) ALL — здесь все также как и в предыдущей строке, но знак процентов (%) перед sudo означают, что это группа, а не пользователь. То есть группа sudo может на всех хостах, от имени любого пользователи или группы, выполнять любые команды.
  • @includedir /etc/sudoers.d — означает что в каталог /etc/sudoers.d можно положить дополнительные конфигурационные файлы.




Даём права на sudo включая пользователя в группу sudo




И так, по умолчанию, выполнять все команды с помощью sudo могут пользователи группы sudo. Получается, нам остаётся только поместить своего пользователя в эту группу:




root@deb:~# adduser alex sudo
Добавляется пользователь «alex» в группу «sudo» ...
Добавление пользователя alex в группу sudo
Готово.




Чтобы изменения применились нужно перезайти под пользователем alex. Проверим работу sudo:




root@deb:~# su alex

alex@deb:/root$ sudo useradd user3

Мы полагаем, что ваш системный администратор изложил вам основы
безопасности. Как правило, всё сводится к трём следующим правилам:

    №1) Уважайте частную жизнь других.
    №2) Думайте, прежде что-то вводить.
    №3) С большой властью приходит большая ответственность.

[sudo] пароль для alex:

alex@deb:/root$ sudo userdel user3




Как видите, система нас предупредила что с помощью sudo мы выполняем команды от имени администратора и нужно быть осторожными. Такое предупреждение даётся пользователю при первом запуске sudo, а в дальнейшем вы не увидите его.




Работая с sudo мы вводим пароль от своего пользователя (alex), а не от root. В примере выше я просто создал и удалил пользователя user3, чтобы продемонстрировать выполнение административных действий.




Даём права на sudo редактируя конфигурационный файл




Дать пользователю права на sudo можно не только включив его в группу sudo. Также вы можете отредактировать конфигурационный файл /etc/sudoers с помощью специальной утилиты visudo:




alex@deb:/root$ sudo visudo




После чего вы начнете редактировать конфигурационный файл. Например, добавим следующую строку:




alex    ALL=(ALL:ALL) ALL




У нас должна получиться такая настройка:







Рядом с root пользователем создаём правило для пользователя alex. Чтобы сохранить файл и выйти из редактора нажмите Ctrl+x, а затем «y«.




Утилита visudo работает в режиме nano. Но в отличие от редактирования напрямую с помощью nano, утилита visudo открывает копию файла /etc/sudoers и перед сохранение файла проверяет его на корректность.




Теперь удалим пользователя alex из группы sudo:




alex@deb:/root$ sudo deluser alex sudo
Удаляется пользователь «alex» из группы «sudo» ...
Готово.




Перезайдем в систему под alex, чтобы применились изменения:




alex@deb:/root$ exit
exit

root@deb:~# su - alex
alex@deb:~$




И проверим, не потеряли ли мы права на sudo:




alex@deb:~$ sudo useradd user3

alex@deb:~$ sudo deluser user3
Удаляется пользователь «user3» ...
Предупреждение: в группе «user3» нет больше членов.
Готово.

alex@deb:~$




Как видим права остались!




Тонкая настройка прав




У меня в системе остались пользователи user1 и user2. Дадим им право обновлять систему, но другие административные действия они не должны выполнять.




И так, выполните команду sudo visudo, чтобы начать редактирование конфигурационного файла.




Объедините пользователей одним псевдонимом GR_APT:




User_Alias      GR_APT = user1, user2




В системах Debian и Ubuntu обновлять систему можно командами apt и apt-get (обновление системы мы будем изучать позже в этом курсе). Обе команды нужно объединить в одну команду-псевдоним APDATE:




Cmnd_Alias      APDATE = /usr/bin/apt, /usr/bin/apt-get




И осталось разрешить GR_APT выполнять команды APDATE:




GR_APT  ALL=(ALL:ALL) APDATE




Вот так должен выглядеть ваш файл после всех изменений:




Разрешаем некоторым пользователям обновлять систему с помощью sudo
Разрешаем некоторым пользователям обновлять систему с помощью sudo




Проверим! Переключимся на пользователя user1 и попробуем выполнить обновление с помощью команды sudo apt update:




alex@deb:~$ su - user1
Пароль:

user1@deb:~$ sudo apt update
Пол:1 http://security.debian.org/debian-security bullseye-security InRelease [44,1 kB]
Сущ:2 http://deb.debian.org/debian bullseye InRelease
Сущ:3 http://deb.debian.org/debian bullseye-updates InRelease
Пол:4 http://security.debian.org/debian-security bullseye-security/main Sources [94,1 kB]
Получено 138 kB за 1с (246 kB/s)
Чтение списков пакетов… Готово
Построение дерева зависимостей… Готово
Чтение информации о состоянии… Готово
Может быть обновлено 12 пакетов. Запустите «apt list --upgradable» для их показа.




Всё получилось!




А теперь попробуем переключиться на root пользователя выполнив su:




user1@deb:~$ sudo su -
Sorry, user user1 is not allowed to execute '/usr/bin/su -' as root on deb.




Как видим, выполнять команду su пользователю user1 используя sudo нельзя.




Создать нового пользователя тоже не получится:




user1@deb:~$ sudo useradd user3
Sorry, user user1 is not allowed to execute '/usr/sbin/useradd user3' as root on deb.




Получается мы дали пользователям user1 и user2 право использовать утилиту sudo, но только для команд apt и apt-get, чтобы обновлять Linux систему.




А ещё, редактируя конфигурационный файл /etc/sudoers, вы можете позволить пользователю выполнять команды под sudo без запроса своего пароля. Для этого перед разрешённой командой нужно указать NOPASSWD: :




alex    ALL=(ALL:ALL) NOPASSWD: ALL




Дополнительные опции утилиты sudo




По умолчанию, утилита sudo выполняет команды от пользователя root, но с помощью опций -u или -g можно выполнить команду от имени другого пользователя или группы, например:




alex@deb:~$ sudo -u user1 id
uid=1003(user1) gid=1005(user1) группы=1005(user1)

alex@deb:~$ sudo -g user1 id
uid=1000(alex) gid=1005(user1) группы=1005(user1),24(cdrom),25(floppy),29(audio),30(dip),44(video),46(plugdev),109(netdev),1000(alex)




Как видите, вначале мы выполнили команду от имени пользователя user1, а затем от имени группы user1. Во втором случае, пользователь у нас остался alex, а первичная группа стала user1.




Ещё одной полезной опцией является опция -i. Она позволяет, как бы, переключиться на пользователя. При этом нужно указать пользователя с помощью опции -u, без этого мы переключимся на root пользователя:




alex@deb:~$ sudo -u user1 -i
user1@deb:~$

user1@deb:~$ exit
выход

alex@deb:~$ sudo -i
root@deb:~#

root@deb:~# exit
выход

alex@deb:~$















2022-01-25T14:23:21
Администрирование Linux