Категория: Доступ и аутентификацияОбновлено 2026-10-22

sudoers (правила sudo)

sudoers это файл политики, /etc/sudoers и файлы в /etc/sudoers.d, который сообщает sudo, какие пользователи могут запускать какие команды от имени каких других пользователей, на каких хостах и нужен ли пароль. Его правят через visudo, которая проверяет синтаксис перед сохранением, потому что сломанный файл может оставить всех без sudo.

Устройство правила sudoers

В руководстве по sudoers правило описано схемой «who where = (as_whom) what». Например:

alan ALL = (root, bin : operator, system) ALL
ray rushmore = NOPASSWD: /bin/kill, PASSWD: /bin/ls, /usr/bin/lprm

Пользователь задаётся именем, #uid для числового идентификатора или %group для группы. ALL это зарезервированное слово, которое подходит всегда. Команды записываются полными именами файлов, а теги NOPASSWD и PASSWD задают поведение по умолчанию для следующих за ними команд.

Алиасы делают правила читаемыми. Их четыре типа: User_Alias, Runas_Alias, Host_Alias и Cmnd_Alias. Имена состоят из заглавных букв, цифр и подчёркиваний и должны начинаться с заглавной буквы, а повторное определение алиаса считается синтаксической ошибкой.

User_Alias WEBTEAM = alice, bob
Cmnd_Alias NGINXCTL = /usr/bin/systemctl reload nginx, /usr/bin/systemctl restart nginx
WEBTEAM ALL = (root) NGINXCTL

Порядок важен: sudo применяет записи по очереди, и побеждает последнее совпадение, которое, как подчёркивает руководство, не обязательно самое точное. Общие правила ставьте раньше, исключения позже.

/etc/sudoers.d и ловушка с именами файлов

Во многих дистрибутивах основной файл подключает каталог строкой @includedir /etc/sudoers.d. Это правильное место для своих правил, по одному файлу на задачу, чтобы обновления пакетов их не затирали. Для каталога руководство называет два правила:

Создавайте и проверяйте файлы через visudo: она блокирует файл, разбирает его и отказывается сохранять при синтаксической ошибке:

sudo visudo -f /etc/sudoers.d/90-deploy
sudo visudo -c
sudo visudo -cf /etc/sudoers.d/90-deploy

Согласно руководству visudo, -c проверяет файл и его включения, а без указания пути ещё и владельца с правами. Код возврата 0 при успехе и 1 при ошибке. Если в запросе есть вариант Q (выйти и сохранить), не выбирайте его: sudo такой файл тоже отвергнет.

Узкое правило и его проверка

Безопасное правило называет одну учётную запись, одного целевого пользователя и одну точную команду. Это правило позволяет учётной записи деплоя перезапускать один сервис без пароля и больше ничего:

deploy ALL = (root) NOPASSWD: /usr/bin/systemctl restart myapp

Проверьте его с обеих сторон. От администратора выведите список разрешённого. От имени самой учётной записи сбросьте кэшированные учётные данные ключом -k и выполните команду неинтерактивно с -n: если потребовался бы пароль, sudo завершится с ошибкой вместо запроса:

sudo -l -U deploy
sudo -k; sudo -n systemctl restart myapp
sudo -n systemctl status myapp

Последняя команда должна быть отклонена: так видно, что правило не шире задуманного. По руководству sudo, -U выводит привилегии другого пользователя и доступен root и пользователям с подходящим разрешением.

Избегайте приёмов, о которых предупреждает руководство. «Вычитать» команды из ALL оператором !, по его словам, как правило неэффективно, а пользователь с ALL может создать собственную программу. Шаблоны в аргументах могут совпасть с пробелами и слэшами. Из редакторов и постраничных просмотрщиков можно выйти в оболочку, если не добавить NOEXEC или, лучше, не использовать sudoedit.

Defaults и место sudoers в укреплении сервера

Строки Defaults меняют поведение sudo глобально или для пользователя, хоста либо команды. Руководство называет такие встроенные значения:

sudoers управляет привилегиями только тех, у кого уже есть учётная запись. Он отделён от UID 0, ведь учётная запись с UID 0 и так обладает всеми правами независимо от настроек sudo. Сочетайте его с отключённым входом под root, SSH по ключам из руководства по защите SSH и аудитом учётных записей из руководства по пользователям, sudo и минимальным привилегиям, где также сказано об обновлении самого sudo.

Пересматривайте /etc/sudoers.d по расписанию. Каждый файл там это постоянная выдача привилегий, а упомянутые в нём записи из /etc/passwd должны по-прежнему существовать и быть нужными.

Связанные термины: Минимальные привилегии, UID 0, /etc/passwd, Вход под root, Двухфакторная аутентификация, sudo (выполнение команд с правами root).

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

Для чего нужен файл sudoers?

Он определяет, какие пользователи и группы могут запускать какие команды от имени каких других пользователей через sudo, на каких хостах и с паролем или без. Он лежит в /etc/sudoers, а дополнительные правила в /etc/sudoers.d.

Почему нужно использовать visudo, а не обычный редактор?

visudo блокирует файл и проверяет синтаксис перед сохранением, а файл с ошибками сохранять отказывается. Синтаксическая ошибка, сохранённая вручную, может сломать sudo для всех, что опасно при отключённом входе под root.

Почему файл в /etc/sudoers.d игнорируется?

Файлы, имена которых заканчиваются на ~ или содержат точку, пропускаются. Переименуйте файл вида deploy.conf в deploy и проверьте командой visudo -c.

Что делает NOPASSWD?

Этот тег позволяет подходящим командам выполняться через sudo без запроса пароля. Применяйте его только в узких правилах, например для одной точной команды одной служебной учётной записи.

Какое правило выигрывает, если подходит несколько?

Используется последняя подходящая запись, и она не обязательно самая точная. Упорядочивайте правила и имена файлов в sudoers.d с учётом этого.

Хотите увидеть, в каком состоянии ваш сервер?

Запустите бесплатную read-only проверку сервера или откройте Security Lab и посмотрите цикл обнаружение, сдерживание, восстановление, проверка в действии.

Получить бесплатную проверку сервераОткрыть Security Lab