Linux

Настраиваем sudoers в Linux: безопасное управление правами

Гайд объясняет, как безопасно настроить sudoers в Linux: от редактирования через visudo до создания гибких правил. Вы получите рабочие конфигурации и избежите фатальных ошибок.

Обновлено 28 апреля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 22.04/24.04Debian 11/12CentOS 8/Stream 9Fedora 38+

Введение / Зачем это нужно

Правильная настройка файла sudoers в Linux позволяет делегировать права администратора без разглашения пароля root и с детальным контролем того, что именно может выполнить пользователь или группа. Гибкие правила снижают риск случайных или злонамеренных действий и помогают соблюсти принцип минимальных привилегий. После этого гайда вы сможете безопасно управлять доступом к повышенным привилегиям на серверах и рабочих станциях.

Требования / Подготовка

  • Пользователь с доступом к sudo или root-привилегиями.
  • Любой поддерживаемый дистрибутив Linux из списка appliesTo.
  • Базовое понимание командной строки и прав доступа в Linux.
  • Установленный пакет sudo (по умолчанию присутствует в большинстве дистрибутивов).

Пошаговая инструкция

Шаг 1: Откройте sudoers через visudo

Никогда не редактируйте /etc/sudoers напрямую через nano или vim. Используйте visudo: эта команда блокирует файл при редактировании и проверяет синтаксис перед сохранением.

sudo visudo

По умолчанию visudo использует nano или редактор по умолчанию. Вы можете изменить редактор через переменную окружения:

sudo EDITOR=vim visudo

Шаг 2: Добавьте правило для пользователя или группы

В конец файла или в подходящий инклюд добавьте строку правила. Базовый синтаксис:

user    host=(runas)    command

Примеры:

# Полный доступ для пользователя admin
admin   ALL=(ALL:ALL) ALL

# Доступ только к systemctl для перезапуска веб-сервера
wwwusr  ALL=(root) /bin/systemctl restart nginx

# Права для группы %admins
%admins ALL=(ALL:ALL) ALL

Для сложных конфигураций используйте алиасы:

User_Alias  DEVTEAM = alice, bob
Cmnd_Alias  WEB_CMDS = /bin/systemctl restart nginx, /bin/systemctl status nginx

DEVTEAM ALL=(root) WEB_CMDS

Шаг 3: Настройте NOPASSWD для доверенных команд

Если нужно разрешить выполнение определённых команд без ввода пароля, добавьте тег NOPASSWD:. Всегда ограничивайте список команд, чтобы не ослаблять безопасность.

# Без пароля только для systemctl restart nginx
deploy  ALL=(root) NOPASSWD: /bin/systemctl restart nginx

# Для группы разработки — чтение логов без пароля
%devs   ALL=(root) NOPASSWD: /usr/bin/journalctl, /usr/bin/tail /var/log/nginx/*

⚠️ Важно: не используйте NOPASSWD: ALL для широких учёток в производственных средах. Это повышает риск компрометации и расширяет возможности злоумышленника при взломе аккаунта.

Шаг 4: Проверьте и примените изменения

После сохранения файла в visudo убедитесь, что синтаксис корректен, а правило работает ожидаемо:

# Проверить синтаксис всех sudoers-файлов
sudo visudo -c

# Посмотреть эффективные права для текущего пользователя
sudo -l

# Выполнить тестовую команду
sudo systemctl restart nginx

Если visudo -c сообщает об ошибке, не покидайте редактор с изменениями до их исправления. Если вы уже сохранили некорректный файл, загрузитесь в recovery mode, перемонтируйте корень с правами записи и исправьте правило.

Возможные проблемы

  • Ошибка синтаксиса после сохранения. Причина: пропущена запятая, лишний пробел или неверный путь к команде. Решение: запустите visudo -c, найдите ошибку и исправьте её в visudo.
  • Права не применяются. Причина: конфликт правил или отсутствие разрешённого хоста/алиаса. Решение: проверьте порядок правил — более специфичные должны быть выше общих, и убедитесь, что хост и пользователь совпадают.
  • «sudo: no tty present» при использовании в скриптах. Причина: требование tty в sudoers. Решение: добавьте Defaults:user !requiretty для нужного пользователя или используйте ssh -t при удалённом вызове.
  • Пользователь не может выполнить команду через sudo. Причина: не указан полный путь к исполняемому файлу. Решение: в sudoers всегда используйте абсолютные пути, например /bin/systemctl, а не systemctl.

Часто задаваемые вопросы

Почему нельзя редактировать sudoers напрямую в текстовом редакторе?
Безопасно ли использовать NOPASSWD в sudoers?
Как проверить синтаксис sudoers без сохранения?
Что делать, если заблокировали sudo права синтаксической ошибкой?

Полезное

Открыть sudoers через visudo
Добавить правило для пользователя или группы
Настроить NOPASSWD для доверенных команд
Проверить и применить изменения