Использование sudo в Linux

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

Установка

Утилита sudo — важнейшая утилита Linux, позволяющая выполнять команды с правами администратора. По умолчанию она установлена не во всех дистрибутивах. И если она не установлена, то установить её можно из стандартных репозиториев, например:

# apt install sudo

Использование

По умолчанию использовать sudo могут пользователи linux, которые есть в группе sudo. Вот так вы можете добавить своего пользователя в эту группу (в Ubuntu или Debian):

# adduser alex sudo

В других дистрибутивах может не оказаться утилиты adduser, тогда добавить своего пользователя в группу sudo можете с помощью такой команды:

# usermod -aG sudo alex

Командами выше я добавляю пользователя alex в группу sudo. Кстати про группы в Linux я писал в этой статье - Группы пользователей в Linux .

После этого пользователь сможет выполнять любые команды с правами rootВажно: это дает полный контроль над системой, поэтому добавляйте в группу sudo только доверенных пользователей.

Пример выполнения команды с помощью sudo:

$ sudo id
[sudo] пароль для alex:
uid=0(root) gid=0(root) группы=0(root)

При первом использовании sudo система запросит пароль текущего пользователя (не root). По умолчанию он запоминается на 15 минут. Но команда выполняется от имени пользователя root.

Основной конфигурационный файл

Основной конфигурационный файл sudo — /etc/sudoers. Рассмотрим его содержимое (для наглядности я удалил закомментированные строки):

# cat /etc/sudoers

Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

Defaults use_pty

root ALL=(ALL:ALL) ALL
%sudo ALL=(ALL:ALL) ALL

@includedir /etc/sudoers.d

Рассмотрим эти строки:

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

Примеры настроек

Внимание! Не редактируйте /etc/sudoers напрямую — используйте команду visudo, которая проверяет синтаксис перед сохранением. Ошибка в файле может заблокировать доступ к sudo для всех пользователей!

# visudo

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

Чтобы добавить пользователя с полными правами, добавьте строку:

alex ALL=(ALL:ALL) ALL

Или настроить выполнение определённых команд без запроса пароля:

zabbix ALL=(ALL) NOPASSWD: /usr/sbin/hddtemp

Выше я разрешил пользователю zabbix использовать утилиту hddtemp без запроса пароля. То есть пользователь zabbix сможет выполнить sudo hddtemp, и у него не спросит пароль. Обратите внимание NOPASSWD снижает безопасность.

Можно предоставить доступ к определенным командам для группы пользователей:

User_Alias GR_APT = user1, user2
Cmnd_Alias UPDATE = /usr/bin/apt, /usr/bin/apt-get
GR_APT ALL=(ALL:ALL) UPDATE
  • Мы объединили пользователей одним псевдонимом GR_APT.
  • Объединили команды одним псевдонимом — UPDATE.
  • Разрешили пользователям GR_APT выполнять UPDATE.

При этом пароль у этих пользователей будет запрошен, так как здесь мы не использовали NOPASSWD: .

Выполнение команд от мени других пользователей

По умолчанию sudo выполняет команды с правами root, но вы можете указать другого пользователя или группу.

Для выполнения команды от имени пользователя используется опция -u:

$ sudo -u user <команда>

А для выполнения команды от имени группы используется опция -g:

$ sudo -g group <команда>

Опции можно комбинировать:

$ sudo -u user -g group <команда>

Переключение на другого пользователя

Обычно мы переключаемся на другого пользователя с помощью команды su — об этом я писал в статье  Пользователи в Linux . Но sudo тоже умеет это делать. Для этого используем опции:

  • sudo -s — не login shell, аналог su.
  • sudo -i — login shell, аналог su -.

Мы можем указать пользователя с помощью опции -u, а если не будем указывать то переключимся на пользователя root.

$ sudo -i -u user # переключение на пользователя user
$ sudo -i # переключение на пользователя root

Если понравилась статья, подпишись на мой канал в  VK  или  Telegram .