Как работает sudo? Что такое /etc/sudoers и visudo?
sudo (Substitute User and DO) — утилита, позволяющая выполнять команды от имени другого пользователя (по умолчанию — root) без необходимости знать пароль root.
Принцип работы
- Пользователь вводит
sudo команда - Система проверяет право на выполнение в файле
/etc/sudoers - Запрашивается пароль самого пользователя (не root)
- После успешной аутентификации команда выполняется с повышенными привилегиями
- Пароль кешируется на 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, рискуя заблокировать систему при синтаксической ошибке.