Гид по технологиям

Полное руководство по sudo в Linux

9 min read Системное администрирование Обновлено 28 Dec 2025
Полное руководство по sudo в Linux
Полное руководство по sudo в Linux

Символичное изображение Linux и терминала

Быстрые ссылки

  • sudo и права root

  • Файл sudoers

  • Выполнение команды от имени другого пользователя

  • Редактирование sudoers

  • Добавление пользователей в группу sudo

  • Ограничение прав sudo для пользователей

  • Использование User_Alias в sudoers

  • Три полезных приёма sudo

  • С ответственностью приходит власть

Что такое sudo и почему он важен

Команда sudo позволяет запускать команды под другой учётной записью, обычно под root. Это стандартный механизм делегирования прав в UNIX-подобных системах: вместо постоянного входа как root вы используете обычный аккаунт и «поднимаете» привилегии на время выполнения отдельной задачи.

Коротко: sudo — инструмент для временной эскалации прав. Принцип безопасности — минимизировать время и объём полномочий.

Важно: доступ к паролю root даёт полную власть над системой, поэтому безопаснее не делать этого и выдавать привилегии через sudo.

sudo и права root

В Linux многие сущности (файлы, процессы, сокеты) управляются с учётом прав владельца и групп. Пользователь root не ограничен этими правами и может изменить любые объекты в системе. Это удобно, но опасно: ошибка под root может вывести систему из строя.

Поэтому считается лучшей практикой:

  • не входить под root для повседневных задач;
  • пользоваться sudo для единичных команд;
  • давать права по принципу наименьших привилегий — только нужное и только на время.

Пояснение терминов на одну строку:

  • root — суперпользователь без ограничений;
  • sudo — программа для запуска команд от имени другого пользователя;
  • sudoers — конфигурационный файл, в котором описаны, кто и какие команды может выполнять через sudo.

Файл sudoers и его роль

Файл /etc/sudoers описывает правила: кто может использовать sudo и какие команды разрешены. Никогда не редактируйте /etc/sudoers напрямую — используйте visudo, он выполняет проверку синтаксиса и блокирует одновременное редактирование.

visudo вызывает ваш системный редактор (например, nano или vim). Если вы предпочитаете nano в системах, где по умолчанию открыт vim, запустите:

sudo EDITOR=nano visudo

visudo выполняет синтаксический анализ перед сохранением. Если вносимые изменения неверны, вы сможете отменить их или вернуться к редактированию. Не принудительно сохраняйте некорректный sudoers — иначе рискуете заблокировать всех от sudo.

Список sudoers и группы sudo

При установке большинства дистрибутивов пользователь, создаваемый при инсталляции, добавляется в список sudoers или в соответствующую группу (обычно группа называется sudo или wheel — зависит от дистрибутива). Члены этой группы получают возможность выполнять команды с sudo.

Типичная запись в sudoers для группы выглядит так:

%sudo   ALL=(ALL:ALL) ALL

Разбор записи:

  • %sudo — запись для группы sudo;
  • ALL= — правило применимо на всех хостах;
  • (ALL:ALL) — запуск команд от имени всех пользователей и групп;
  • ALL — разрешены все команды.

Добавление пользователя в группу sudo — самый простой способ дать ему root-права через sudo. Например:

sudo usermod -a -G sudo tom

Ключи:

  • -G — список групп;
  • -a — append, добавляет группу без удаления существующих.

После этого пользователь tom будет в группе sudo и сможет выполнять команды с sudo.

Выполнение команды от имени другого пользователя

По умолчанию sudo запускает команду от имени root. Чтобы запустить от имени конкретного пользователя, используйте опцию -u:

sudo -u mary whoami

Результат команды whoami покажет mary.

Чтобы получить интерактивную сессию как другой пользователь (без знания его пароля), используйте:

sudo -i -u mary

В интерактивной сессии выполняются файлы окружения пользователя (например, .bashrc), текущая директория — домашняя директория этого пользователя, и приглашение shell отражает вход под другим аккаунтом.

Вид терминала с сессией mary

Ограниченные права через sudoers

Иногда нужно позволить пользователю выполнять только конкретную операцию, например устанавливать пакеты, но не перезагружать систему или редактировать системные файлы. В sudoers вы можете перечислить разрешённые команды конкретного пользователя.

Пример: дать пользователю harry право запускать apt-get, но ничего больше:

harry    ALL=/usr/bin/apt-get

Пояснения:

  • строка не начинается с % — это правило для конкретного пользователя;
  • между именем пользователя и правами обычно табуляция.

После сохранения harry сможет выполнить:

sudo apt-get install finger

Но попытка выполнить:

sudo shutdown now

будет отклонена.

Проверка синтаксиса sudoers перед применением:

sudo visudo -c

Пример записи в sudoers для harry

Использование User_Alias для групп пользователей

Если нужно назначить одинаковые правила нескольким пользователям, используйте User_Alias. Это уменьшает дублирование и упрощает управление.

Добавьте в sudoers:

User_Alias INSTALLERS = harry, mary

INSTALLERS    ALL=/usr/bin/apt-get

Теперь все пользователи, перечисленные в INSTALLERS, могут запускать apt-get.

Добавление User_Alias в sudoers

Быстрые приёмы sudo

  • Повторить последнюю команду с sudo:
sudo !!
  • Сбросить текущую аутентификацию sudo (заставить ввод пароля снова):
sudo -k
  • Просмотр неудачных попыток sudo и записей аудита:
less /var/log/auth.log

Пример: запись в журнале показывает попытку mary выполнить shutdown с неудачной авторизацией.

Фрагмент /var/log/auth.log с попыткой sudo

С ответственностью приходит власть

Раздавая sudo-права, помните про риск. Всегда применяйте принцип наименьших привилегий и аудит действий.


Роль администратора: чеклист при выдаче sudo прав

  • Проверить, действительно ли пользователь нуждается в правах root.
  • Решить, нужны ли полные права (группа sudo) или ограниченные команды.
  • Если ограниченные — определить список команд с полными путями (/usr/bin/apt-get и т. п.).
  • Добавить правило через visudo или создать файл в /etc/sudoers.d/ с правильными правами (0440).
  • Проверить синтаксис sudo visudo -c.
  • Протестировать от имени пользователя.
  • Включить запись в аудит и оповещение при подозрительной активности.

Шаблоны и примеры для sudoers

Пример файла для администраторов (полный доступ):

%admin ALL=(ALL) ALL

Пример для установки пакетов только через apt-get:

User_Alias INSTALLERS = alice, bob

INSTALLERS ALL=(root) NOPASSWD: /usr/bin/apt-get

Важно: NOPASSWD убирает запрос пароля при sudo — используйте очень осторожно.

Пример запрета на выполнение определённой команды даже при sudo (через запрет в shell нельзя полностью, но можно ограничить в sudoers другими методами) — обычно лучше обеспечивать позитивный список команд.

Методика принятия решения: давать группу или одну команду

Модель принятия решения:

  • Если пользователь регулярно выполняет широкий спектр задач администрирования → добавьте в группу sudo.
  • Если пользователь выполняет одну-две автоматизированные задачи → назначьте конкретные команды через sudoers.
  • Если нужно временно дать права → используйте временную запись и запланируйте удаление через задачу (cron/Ansible).

Decision tree для выдачи прав (Mermaid)

flowchart TD
  A{Пользователь просит права sudo} --> B{Нужны ли регулярные полные права?}
  B -- Да --> C[Добавить в группу sudo]
  B -- Нет --> D{Требуется ограниченный набор команд?}
  D -- Да --> E[Добавить правило в sudoers для конкретных команд]
  D -- Нет --> F[Отказать и предложить временный доступ через поддержку]
  C --> G[Аудит и мониторинг]
  E --> G
  F --> G

Безопасность и усиление контроля

Рекомендации по безопасности:

  • Всегда редактируйте sudoers через visudo.
  • Используйте /etc/sudoers.d/ для модульных правил — один файл на задачу/роль.
  • Установите права 0440 на файлы в /etc/sudoers.d/.
  • Не используйте NOPASSWD без веской причины.
  • Ограничьте список команд и указывайте полные пути.
  • Включите сбор и централизованный экспорт логов sudo в SIEM или централизованный журнал.
  • Рассмотрите использование двухфакторной аутентификации для доступа к аккаунтам, имеющим права sudo.

Восстановление после ошибки в sudoers — план отката

Сценарий: после правки sudoers sudo перестал работать и вы не можете выполнить sudo.

Возможные пути восстановления:

  1. Войти под root напрямую (если доступен) и исправить /etc/sudoers.
  2. Зайти в single-user mode или режим восстановления (recovery) через загрузчик и отредактировать файл.
  3. Если у вас другой локальный пользователь с root-паролем — использовать его.
  4. В крайнем случае загрузиться с Live USB и смонтировать корневую файловую систему, затем править /etc/sudoers и вернуть права 0440.

Ключевые шаги:

  • Перед изменением sudoers делайте резервную копию: cp /etc/sudoers /etc/sudoers.bak.
  • После изменения проверяйте синтаксис visudo -c.

Тесты и критерии приёмки

Критерии приёмки для правил sudoers:

  • Пользователь выполняет команду, которая должна быть разрешена — команда выполняется от имени нужного пользователя.
  • Пользователь пытается выполнить запрещённую команду — доступ запрещён.
  • Синтаксис файла корректен: sudo visudo -c возвращает OK.
  • Файлы в /etc/sudoers.d/ имеют права 0440 и владелец root:root.
  • Логи sudo содержат записи о выполненных командах и авторизации.

Пример тест-кейса:

  1. Логин как harry.
  2. Выполнить sudo /usr/bin/apt-get install sl — ожидается успех.
  3. Выполнить sudo shutdown now — ожидается отказ.
  4. Проверить /var/log/auth.log на соответствующие записи.

Модели зрелости управления sudo

Уровень 0 — хаос: права не документированы, все в группе sudo.

Уровень 1 — базовый: использование групп (sudo) для администраторов, минимальная документация.

Уровень 2 — управляемый: правила через /etc/sudoers.d/, ограничение команд, базовый аудит.

Уровень 3 — зрелый: автоматизированное управление через конфигурационные инструменты (Ansible/Chef), централизованный аудит, ротация прав и периодический обзор.

Сравнение sudo, su и PolicyKit

  • sudo — предоставляет временную эскалацию для отдельных команд и управление правами через sudoers.
  • su — переключение на другого пользователя (обычно требует пароль целевого аккаунта); менее гранулирован.
  • PolicyKit/polkit — управление привилегиями для процессов GUI и сервисов, часто используется в десктопах.

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

Совместимость и заметки по дистрибутивам

  • В Debian/Ubuntu обычно группа называется sudo.
  • В RHEL/CentOS/Fedora группа часто называется wheel.
  • В некоторых системах sudo может быть не установлен по умолчанию — установите через пакетный менеджер.

Чтобы использовать nano в visudo на Fedora:

sudo dnf install nano
sudo EDITOR=nano visudo

Примеры шаблонов и чеклистов для ролей

Роль: Системный администратор

  • Должен иметь членство в группе sudo.
  • Доступ с двухфакторной аутентификацией рекомендован.
  • Все действия логируются и пересматриваются ежемесячно.

Роль: Разработчик

  • Должен получать ограниченный набор команд (установка зависимостей, перезапуск сервисов приложения).
  • Запрос доступа через тикетную систему и автоматическое удаление доступа через указанный срок.

Роль: Служба поддержки

  • Право выполнять диагностические команды, но без возможности изменять системные конфигурации.
  • Действия должны быть прозрачны и записываться в аудит.

Полезные шаблоны для /etc/sudoers.d/

Файл: /etc/sudoers.d/installers

# Разрешить INSTALLERS запускать apt-get с запросом пароля
User_Alias INSTALLERS = harry, mary
INSTALLERS ALL=(root) /usr/bin/apt-get

Файл: /etc/sudoers.d/admins

# Группа администраторов имеет все права
%admin ALL=(ALL) ALL

Права файлов:

sudo chmod 0440 /etc/sudoers.d/installers
sudo chown root:root /etc/sudoers.d/installers

Локальные особенности и подводные камни

  • Указывайте полные пути к бинарникам. Если указать просто apt-get, поведение может зависеть от PATH.
  • Не используйте символы подстановки в путях без тщательной проверки — это может открыть обходы.
  • Будьте осторожны с NOPASSWD: удаление запроса пароля упрощает автоматизацию, но уменьшает контроль.
  • Множественные правила могут перекрываться — порядок и точность важны.

Краткое резюме

  • sudo — безопасный и гибкий инструмент для управления привилегиями.
  • Редактируйте sudoers только через visudo.
  • Применяйте принцип наименьших привилегий: группа sudo для администраторов, конкретные команды для рядовых задач.
  • Палитра дополнительных мер: /etc/sudoers.d/, аудит, централизованные логи, ротация прав.

Краткая памятка для быстрой проверки

  • visudo -c — проверить синтаксис;
  • groups — посмотреть группы текущего пользователя;
  • sudo -l — показать список команд, разрешённых для текущего пользователя;
  • less /var/log/auth.log — просмотр логов sudo.

Глоссарий в одну строку

  • sudo — утилита для запуска команд от имени другого пользователя;
  • sudoers — конфигурационный файл правил для sudo;
  • visudo — безопасный способ редактирования sudoers;
  • User_Alias — алиас пользователей в sudoers;
  • NOPASSWD — параметр, убирающий запрос пароля при sudo.

Важно: перед массовыми изменениями в правилах привилегий проведите аудит и заранее подготовьте план отката.

Конец статьи.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Как стримить с телефона на ПК через OBS
Стриминг

Как стримить с телефона на ПК через OBS

Как удалить аккаунт Reddit — полное руководство
Инструкции

Как удалить аккаунт Reddit — полное руководство

Как выбрать камеру для влогинга
Видео

Как выбрать камеру для влогинга

Как сравнить процессоры CPU: практическое руководство
Hardware

Как сравнить процессоры CPU: практическое руководство

Отключить всплывающее «Открыть в приложении» на Reddit
Инструкция

Отключить всплывающее «Открыть в приложении» на Reddit

Как получать конструктивную обратную связь на фотографии
Фотография

Как получать конструктивную обратную связь на фотографии