Полное руководство по sudo в 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 visudovisudo выполняет синтаксический анализ перед сохранением. Если вносимые изменения неверны, вы сможете отменить их или вернуться к редактированию. Не принудительно сохраняйте некорректный 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 отражает вход под другим аккаунтом.

Ограниченные права через sudoers
Иногда нужно позволить пользователю выполнять только конкретную операцию, например устанавливать пакеты, но не перезагружать систему или редактировать системные файлы. В sudoers вы можете перечислить разрешённые команды конкретного пользователя.
Пример: дать пользователю harry право запускать apt-get, но ничего больше:
harry ALL=/usr/bin/apt-getПояснения:
- строка не начинается с % — это правило для конкретного пользователя;
- между именем пользователя и правами обычно табуляция.
После сохранения harry сможет выполнить:
sudo apt-get install fingerНо попытка выполнить:
sudo shutdown nowбудет отклонена.
Проверка синтаксиса sudoers перед применением:
sudo visudo -c
Использование User_Alias для групп пользователей
Если нужно назначить одинаковые правила нескольким пользователям, используйте User_Alias. Это уменьшает дублирование и упрощает управление.
Добавьте в sudoers:
User_Alias INSTALLERS = harry, mary
INSTALLERS ALL=/usr/bin/apt-getТеперь все пользователи, перечисленные в INSTALLERS, могут запускать apt-get.

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

С ответственностью приходит власть
Раздавая 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.
Возможные пути восстановления:
- Войти под root напрямую (если доступен) и исправить /etc/sudoers.
- Зайти в single-user mode или режим восстановления (recovery) через загрузчик и отредактировать файл.
- Если у вас другой локальный пользователь с root-паролем — использовать его.
- В крайнем случае загрузиться с 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 содержат записи о выполненных командах и авторизации.
Пример тест-кейса:
- Логин как harry.
- Выполнить
sudo /usr/bin/apt-get install sl— ожидается успех. - Выполнить
sudo shutdown now— ожидается отказ. - Проверить /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.
Важно: перед массовыми изменениями в правилах привилегий проведите аудит и заранее подготовьте план отката.
Конец статьи.
Похожие материалы
Как стримить с телефона на ПК через OBS
Как удалить аккаунт Reddit — полное руководство
Как выбрать камеру для влогинга
Как сравнить процессоры CPU: практическое руководство