Gymterview
junior

Как работает sudo? Что такое /etc/sudoers и visudo?

sudo (Substitute User and DO) — утилита, позволяющая выполнять команды от имени другого пользователя (по умолчанию — root) без необходимости знать пароль root.

Принцип работы

  1. Пользователь вводит sudo команда
  2. Система проверяет право на выполнение в файле /etc/sudoers
  3. Запрашивается пароль самого пользователя (не root)
  4. После успешной аутентификации команда выполняется с повышенными привилегиями
  5. Пароль кешируется на 15 минут (по умолчанию)

Файл /etc/sudoers

Основной конфигурационный файл sudo. Определяет, какие пользователи и группы могут выполнять какие команды.

Пример
# Формат: КТО  ОТКУДА=(ОТ_ЧЬЕГО_ИМЕНИ)  ЧТО
root    ALL=(ALL:ALL) ALL

# Все члены группы sudo могут выполнять любые команды
%sudo   ALL=(ALL:ALL) ALL

# Пользователь deployer может перезапускать nginx без пароля
deployer ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx

# Пользователь developer может выполнять любые команды без пароля
developer ALL=(ALL) NOPASSWD: ALL

visudo

Специальный редактор для /etc/sudoers:

Пример
sudo visudo
  • Проверяет синтаксис перед сохранением — защищает от ошибок, которые могут заблокировать доступ к sudo
  • Блокирует файл для предотвращения одновременного редактирования
  • Никогда не редактируйте /etc/sudoers обычным текстовым редактором

Дополнительные файлы

Вместо редактирования основного файла рекомендуется добавлять файлы в каталог /etc/sudoers.d/:

Пример
echo "developer ALL=(ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/developer
sudo chmod 440 /etc/sudoers.d/developer

Полезные команды

Пример
sudo apt update              # Выполнить команду от root
sudo -i                      # Переключиться на root-сессию (login shell)
sudo -u postgres psql        # Выполнить от имени другого пользователя
sudo -l                      # Проверить доступные команды через sudo

В Ubuntu 24.04 пользователь, созданный при установке, автоматически добавляется в группу sudo.

На собеседовании: важно знать, зачем нужен visudo (проверка синтаксиса) и что NOPASSWD используется для автоматизации (CI/CD, скрипты деплоя). Частая ошибка — редактировать /etc/sudoers напрямую через nano/vim, рискуя заблокировать систему при синтаксической ошибке.