Как использовать sudo на Linux — права, настройка и лучшие практики
sudo позволяет временно исполнить команду от имени другого пользователя (обычно root), не входя в систему под ним. Правильная конфигурация sudoers и использование групп/алиасов даёт гибкую модель делегирования прав: можно давать полный доступ, конкретные команды или ограниченные роли. Всегда редактируйте sudoers через visudo, минимизируйте привилегии, фиксируйте изменения и применяйте меры безопасности (аудит, ограничение команд, NOLOGIN для сервисных учёток).
Быстрые ссылки
- sudo и права root
- Список sudoers
- Выполнение команды от имени другого пользователя
- Редактирование файла sudoers
- Добавление пользователей в группу sudo
- Ограничение прав sudo для пользователей
- Использование User_Alias в sudoers
- Три быстрых приёма sudo
- Безопасность и ответственность

Что такое sudo и зачем оно нужно
sudo (substitute user do, ранее superuser do) — утилита для однократного повышения привилегий при выполнении команд. Вместо того чтобы постоянно работать под учётной записью root (что рискованно), администраторы обычно работают под обычной учётной записью и поднимают права только для конкретных команд. Это снижает площадь потенциальной ошибки и позволяет вести аудит: какие пользователи и какие команды запускали с повышенными правами.
Определение в одну строку: sudo — инструмент для временного выполнения команд от имени другого пользователя с возможностью детального контроля и аудита.
Важное: всегда редактируйте файл sudoers только через visudo. Неправильный синтаксис может заблокировать доступ к sudo для всех.
sudo и права root
В Linux почти всё обрабатывается как файл или через файловый интерфейс ядра. Права на файлы и каталоги — один из ключевых механизмов контроля доступа. Но у учётной записи root этих ограничений нет: root может изменить любые файлы и процессы. Это делает root мощным, но и опасным: ошибки или компрометация root приводят к полному контролю над системой.
Поэтому лучшая практика — не работать постоянно под root. Вместо этого используйте sudo для выполнения отдельных задач. sudo сохраняет журнал (audit), позволяет делегировать права выборочно и минимизировать длительную привилегированную сессию.
Список sudoers и базовая логика
Когда вы устанавливаете большинство современных дистрибутивов, пользователь, созданный в процессе установки, автоматически получает возможность использовать sudo (попадает в список sudoers или в соответствующую группу, например sudo или wheel). Содержимое, кто и какие команды может запускать с sudo, хранится в файле /etc/sudoers и в файлах под /etc/sudoers.d/. Но править напрямую /etc/sudoers опасно: используйте visudo — он заблокирует файл и проверит синтаксис.
Ключевые элементы sudoers:
- Определения пользователей и групп (user, %group).
- Алиасы: User_Alias, Runas_Alias, Host_Alias, Cmnd_Alias.
- Правила вида: who hosts = (runas) commands
Примеры:
- %sudo ALL=(ALL:ALL) ALL — члены группы sudo могут запускать любые команды как любые пользователи/группы.
- harry ALL=/usr/bin/apt-get — пользователь harry может запускать только apt-get с sudo.
Выполнение команды от имени другого пользователя
По умолчанию sudo выполняет команду как root. Чтобы запустить команду как другой пользователь, используется опция -u.
sudo -u mary whoamiВывод whoami в этом примере — mary.
Чтобы получить интерактивную сессию как другой пользователь (так, будто вы залогинились он в неё), применяется -i:
sudo -i -u maryВнутри вы можете выполнять команды: pwd, whoami, ls -hl и затем выйти через exit. Профили и скрипты входа пользователя (например, .bashrc, .profile) будут выполнены для этой сессии.

Ключевые заметки:
- sudo запрашивает ваш собственный пароль (не пароль пользователя, под которого вы запускаете команду).
- Если вы часто запускаете интерактивные команды под другим пользователем, рассмотрите делегирование соответствующих прав вместо передачи пароля.
Редактирование файла sudoers
Редактируйте sudoers только через visudo. visudo:
- Блокирует файл от одновременного редактирования несколькими пользователями.
- Проверяет синтаксис перед сохранением.
- Позволяет откатить изменения при ошибках.
Примеры использования редактора по умолчанию:
- На Ubuntu/Manjaro visudo может открыть nano.
- На Fedora часто открывается vim.
Чтобы заставить visudo использовать nano (например, на Fedora), выполните:
sudo dnf install nano
sudo EDITOR=nano visudo
Важно: не используйте «принудительную» запись некорректного файла, если visudo предупредит об ошибках — лучше откатить изменения и исправить синтаксис.
Добавление пользователей в группу sudo
На многих дистрибутивах есть группа sudo (или wheel). Строка в sudoers вида %sudo ALL=(ALL:ALL) ALL даёт всем членам этой группы полный доступ через sudo.
Добавление пользователя tom в группу sudo:
sudo usermod -a -G sudo tomГде:
- -G указывает дополнительные группы,
- -a добавляет группу к уже существующим (без -a вы перезапишете список групп).
Проверка групп пользователя:
groupsЕсли Tom в группах tom и sudo, он получит права sudo. Mary, если остаётся только в группе mary, права иметь не будет.
Пример: попытка открыть /etc/shadow без sudo завершится отказом; с sudo — при наличии прав будет доступ.

Ограничение прав sudo для отдельных пользователей
Иногда нужно разрешить пользователю выполнить всего одну или несколько конкретных команд с повышенными правами (например, установка пакетов), но не давать полный root-доступ. Это делается добавлением строки в sudoers с указанием полного пути к разрешённым командам.
Пример: дать harry право запускать только apt-get:
# откройте visudo
sudo visudo
# добавьте строку
harry ALL=/usr/bin/apt-getОбратите внимание: путь к команде должен быть абсолютным. Можно перечислять несколько команд через запятую.
Проверка синтаксиса:
sudo visudo -cПример использования harry:
sudo apt-get install fingerПопытка выполнить другую команду требующую sudo (например shutdown) будет отклонена.

Использование User_Alias и других алиасов
Если вам нужно присвоить одни и те же права нескольким пользователям, вместо дублирования строк лучше использовать User_Alias.
Пример:
# в sudoers
User_Alias INSTALLERS = harry, mary
INSTALLERS ALL=/usr/bin/apt-getТеперь и harry, и mary могут запускать apt-get, и изменение списка пользователей производится в одном месте.

Полезные алиасы:
- Cmnd_Alias — группирует команды (например, PKGMGMT = /usr/bin/apt-get, /usr/bin/dnf).
- Runas_Alias — группирует учётные записи, от имени которых можно запускать команды.
- Host_Alias — если у вас централизованное управление sudo через сеть.
Пример Cmnd_Alias:
Cmnd_Alias PKGMGMT = /usr/bin/apt-get, /usr/bin/apt, /usr/bin/dnf
Installer ALL = (root) PKGMGMTТри быстрых приёма sudo
- Повтор последней команды с sudo:
sudo !!- Сбросить срок аутентификации (чтобы снова запросил пароль):
sudo -k- Просмотр неудачных и успешных попыток в журнале аутентификации:
less /var/log/auth.log
В логе будут строки с указанием пользователя, TTY и команды.
Практическое руководство — шаг за шагом (Playbook)
Ниже — рабочий набор действий для повседневных сценариев администратора.
- Добавить пользователя в систему и дать ограничённые права на установку пакетов:
sudo adduser developer
sudo usermod -a -G developers developer
sudo EDITOR=nano visudo
# Добавить в sudoers:
User_Alias PKG_ADMINS = developer
Cmnd_Alias PKG_CMD = /usr/bin/apt-get, /usr/bin/apt
PKG_ADMINS ALL=(root) PKG_CMD- Дать пользователю один off-boarding шаг: удалить из группы sudo и проверить логи.
sudo deluser developer sudo
sudo tail -n 200 /var/log/auth.log- Быстрая проверка синтаксиса sudoers:
sudo visudo -c- Откат при ошибках: если visudo пометил файл как некорректный, восстановите из резервной копии или из /etc/sudoers.d/.
Критерии приёмки:
- Пользователь может выполнить только разрешённые команды.
- visudo -c возвращает OK.
- Все изменения задокументированы и под контролем версий (например, в CMDB).
Рольовые чек-листы
Администратор:
- Использовать visudo для правок.
- Минимизировать список команд для пользователей.
- Включить аудит и хранить записи логов.
- Регулярно пересматривать членство в группах sudo.
Разработчик/DevOps:
- Запрашивать минимум прав для задач.
- Использовать sudo для кратковременных действий, не держать открытые root-сессии.
- Документировать команды, требующие прав.
Оружник безопасности/инженер SOC:
- Настроить централизованный сбор логов.
- Настроить оповещения на неудачные попытки sudo или запуск критичных команд.
Когда sudo не подходит (контрпримеры)
- Для автоматизации в CI/CD: не храните пароль пользователя для выполнения sudo. Вместо этого используйте отдельные сервисные учётные записи с ограниченными правами или инструменты управления конфигурацией (Ansible, Salt) с безопасным хранением ключей.
- Если нужен постоянный фоновой доступ к ресурсам от имени сервиса — используйте системные сервисы (systemd service с нужным пользователем) вместо назначения sudo права «всегда».
- Не давайте sudo на shell (например, /bin/bash) напрямую: это эквивалентно передачи root.
Модель зрелости делегирования привилегий
- Уровень 0 — все пользователи root: рискованно.
- Уровень 1 — группа sudo для нескольких администраторов: удобно, но широко.
- Уровень 2 — назначение прав по ролям с алиасами и списками команд: баланс безопасности и удобства.
- Уровень 3 — централизованное управление sudo, аудит, интеграция с LDAP/AD и CI: промышленный подход.
Рекомендации по безопасности и жёсткое укрепление
- Ограничивайте команды по абсолютным путям.
- Используйте Cmnd_Alias, чтобы группировать команды и минимизировать дублирование.
- Не разрешайте запуск shell-утилит (sh, bash) через sudo.
- Включите запись команд в лог (Defaults logfile=”/var/log/sudo.log” или централизованный rsyslog).
- Настройте timeout на аутентификацию (Defaults timestamp_timeout=0 или другое значение).
- Отключите NOPASSWD для команд, которые могут быть использованы в атаке, если это не требуется по автоматизации.
- Регулярно проверяйте /etc/sudoers.d/ на неожиданные файлы.
Пример безопасной строки:
Cmnd_Alias SYSTEM = /usr/sbin/shutdown, /usr/bin/systemctl
AdminGroup ALL=(ALL) NOPASSWD: SYSTEMЗдесь AdminGroup может выключать и перезапускать службы без ввода пароля, но не имеет полного shell-доступа.
Советы по отладки и частые ошибки
- Ошибка синтаксиса в sudoers — используйте visudo -c, и просмотрите последнее сохранённое состояние.
- Если вдруг вы потеряли доступ к sudo на всех учётках, загрузитесь в однопользовательский режим или используйте live-образ для восстановления /etc/sudoers.
- Помните, что пути к программам важны: /usr/bin/apt и /usr/bin/apt-get — разные записи.
Совместимость и миграция
- На Debian/Ubuntu основная группа называется sudo; на RHEL/Fedora/ CentOS — wheel. Учитывайте это при написании инструкций и скриптов.
- Централизованное управление через LDAP/AD: можно управлять членством в группах глобально и использовать sudoers.d с шаблонами.
Чеклист для проверки непосредственно перед изменением прав
- Сделать резервную копию /etc/sudoers и каталога /etc/sudoers.d/.
- Выполнить visudo -c после изменений.
- Записать изменения в систему контроля конфигураций (git, CMDB).
- Уведомить заинтересованные команды.
Карта принятия решений (Mermaid)
flowchart TD
A[Нужно ли sudo?] -->|Нет| B[Не назначать sudo]
A -->|Да| C[Нужен полный доступ?]
C -->|Да| D[Добавить в группу sudo/wheel]
C -->|Нет| E[Указать конкретные команды в sudoers]
E --> F{Несколько пользователей?}
F -->|Да| G[Создать User_Alias]
F -->|Нет| H[Добавить строку для пользователя]
D --> I[Проверить audit и логирование]
G --> I
H --> IКороткая шпаргалка команд (cheat sheet)
- Открыть sudoers: sudo EDITOR=nano visudo
- Проверка синтаксиса: sudo visudo -c
- Добавление пользователя в группу sudo: sudo usermod -a -G sudo USER
- Повтор последней команды с sudo: sudo !!
- Сброс кеша пароля sudo: sudo -k
- Просмотр логов sudo: less /var/log/auth.log
Частые вопросы (FAQ)
Q: Нужен ли абсолютный путь к команде в sudoers?
A: Да — всегда указывайте полный путь к исполняемому файлу, иначе злоумышленник может подменить команду в PATH.
Q: Можно ли дать sudo без запроса пароля?
A: Да, через NOPASSWD, но это уменьшает уровень защиты; используйте только для автоматизации, где это действительно необходимо.
Q: Как откатить ошибочный sudoers?
A: Используйте visudo, восстановите резервную копию файла /etc/sudoers или загрузитесь в однопользовательский режим для правки.
Однострочная глоссарий
- sudo: утилита для выполнения команд от имени другого пользователя.
- visudo: безопасный редактор sudoers с проверкой синтаксиса.
- sudoers: конфигурационный файл /etc/sudoers и /etc/sudoers.d/.
- User_Alias, Cmnd_Alias: алиасы в sudoers для группировки учёток и команд.
Краткое резюме
- Используйте sudo для минимизации времени работы с правами root.
- Редактируйте sudoers только через visudo и проверяйте синтаксис.
- Делегируйте права точечно: алиасы, конкретные команды, группы.
- Настройте аудит и логи, регулярно пересматривайте права.
Похожие материалы
Outlook и Hotmail на Android — настройка и советы
Сменить поисковик по умолчанию в Android
Как отследить потерянный смартфон, планшет или ПК
Windows 11: устройство застряло в режиме планшета
Плагин Zoom для Outlook: установка и использование