Что такое sudo в Linux?

«Что такое sudo в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

sudo (substitute user do) — это программа, которая позволяет разрешенному пользователю выполнить команду с привилегиями другого пользователя, по умолчанию — суперпользователя (root). В отличие от прямого входа под root, sudo обеспечивает аудит и гибкое управление правами.

Ключевые принципы и использование:

  • Аутентификация: sudo запрашивает пароль текущего пользователя, а не root.
  • Конфигурация: Правила доступа настраиваются в файле /etc/sudoers с помощью утилиты visudo. Это предотвращает синтаксические ошибки.
  • Логирование: Все команды, выполненные через sudo, логируются (обычно в /var/log/auth.log или /var/log/secure), что критически важно для безопасности и аудита.

Примеры команд:

# Обновить список пакетов с правами root
sudo apt update

# Выполнить команду от имени другого пользователя (например, www-data)
sudo -u www-data cat /var/log/nginx/error.log

# Открыть интерактивную root-сессию в текущем каталоге
sudo -i

Пример записи в /etc/sudoers для DevOps:

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

Использование sudo в скриптах автоматизации должно быть тщательно продумано, часто предпочтительнее использовать ограниченные права через sudoers, чем запускать весь скрипт от root.