hostprofi.ru
Подобрать хостинг
Термин

Sudo

краткое определение

Sudo — механизм разграничения привилегий в Linux. Позволяет выполнять команды с правами root без постоянного входа под root. Конфигурируется через /etc/sudoers.

Sudo (superuser do) — стандартный механизм разграничения привилегий в Linux. Вместо постоянной работы под root-аккаунтом (опасно) пользователь получает права суперпользователя временно для конкретной команды. Аудит-лог sudo записывает все привилегированные действия.

Как работает sudo

При вызове sudo команда sudo проверяет файл /etc/sudoers — есть ли у текущего пользователя право выполнить эту команду. Запрашивает пароль пользователя (не root). Выполняет команду с указанными привилегиями. Записывает событие в системный лог.

sudo apt update           # выполнить как root
sudo -u www-data php artisan   # выполнить от имени другого пользователя
sudo su -                 # переключиться в сессию root
sudo -l                   # показать разрешённые команды для текущего пользователя
sudo !!                   # повторить последнюю команду с sudo

Таймаут кэша пароля — 15 минут по умолчанию. Следующие sudo-команды в течение этого времени не требуют повторного ввода пароля.

Конфигурация /etc/sudoers

# Стандартный доступ (пользователь ubuntu на AWS/DigitalOcean)
ubuntu ALL=(ALL) NOPASSWD: ALL

# Разрешить пользователю deploy только перезапускать nginx
deploy ALL=(ALL) NOPASSWD: /bin/systemctl restart nginx, /bin/systemctl reload nginx

# Разрешить группе developers sudo без пароля
%developers ALL=(ALL) NOPASSWD: ALL

Редактировать sudoers только через visudo — проверяет синтаксис перед сохранением. Ошибка в sudoers может полностью заблокировать доступ к привилегиям.

Безопасность

  • Все sudo-команды логируются в /var/log/auth.log (Debian/Ubuntu) или /var/log/secure (RHEL/AlmaLinux).
  • Принцип минимальных привилегий: разрешать только конкретные команды, не ALL=(ALL) ALL.
  • Для CI/CD-систем (CI/CD) создавать отдельного пользователя с NOPASSWD только для необходимых команд.
  • Регулярно проверять sudoers: sudo -l -U username.

История

Sudo создан Бобом Коджиасом (Bob Coggeshall) и Клиффом Спенсером (Cliff Spencer) около 1980 года в SUNY Buffalo. Первая публичная версия — 1986 год. Тодд Миллер (Todd C. Miller) взял руководство разработкой в 1994 году и ведёт проект по сей день. Sudo 1.9 (2019) добавил плагин аудита — интеграцию с LDAP и централизованными системами авторизации.

На что обращать внимание

На облачных VPS (DigitalOcean, Hetzner, AWS) пользователь ubuntu/debian/ec2-user изначально имеет NOPASSWD: ALL — удобно, но небезопасно. Для production ограничить sudo до конкретных команд. UFW управляется через sudo: sudo ufw allow 80/tcp. Перед выполнением деструктивных команд через sudo проверять sudo -n команда --dry-run если поддерживается.

Sudoers и тонкая настройка

Файл /etc/sudoers (редактируется через visudo) позволяет настроить гранулярные права. Пример: разрешить пользователю deploy перезапускать только Nginx без пароля:

deploy ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx

Группа %sudo или %wheel даёт полные права sudo всем участникам. Это стандартный подход для серверов с несколькими администраторами — каждый работает под своим аккаунтом, sudo-сессии логируются с именем пользователя.

Аудит и безопасность

Все sudo-команды записываются в /var/log/auth.log (Debian/Ubuntu) или /var/log/secure (CentOS/AlmaLinux). Запись включает: пользователь, дата/время, команда, рабочая директория. Для централизованного сбора логов используется syslog.

Параметр Defaults requiretty запрещает запуск sudo из скриптов без терминала — защита от автоматизированных атак. Defaults timestamp_timeout=0 требует ввода пароля при каждом вызове sudo без кеширования.

Другие термины