sudo без пароля: NOPASSWD в Linux
Когда пишешь автоматизацию — скрипты, cron-задачи, Ansible playbook — рано или поздно сталкиваешься с проблемой: команда требует sudo, а ввести пароль некому. Процесс просто висит или падает.
Решение — NOPASSWD в sudoers. Пользователю разрешают выполнять определённые команды без пароля. Настраивается в две минуты, но важно сделать это аккуратно.
Быстрый способ
Добавить правило для текущего пользователя без правки основного файла:
echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/$USER
Правило ляжет в /etc/sudoers.d/ — отдельный файл для пользователя, не трогает основной sudoers.
Ручная правка через visudo
Открывать sudoers нужно только через visudo:
sudo visudo
visudo проверяет синтаксис перед сохранением. Ошибка в sudoers — и ты теряешь доступ к sudo на всей машине. Это неприятно.
Правило для конкретного пользователя:
myuser ALL=(ALL:ALL) NOPASSWD: ALL
Для группы:
%sudo ALL=(ALL:ALL) NOPASSWD: ALL
Ограничить конкретными командами
NOPASSWD: ALL — это широко. Лучше указать только те команды, которые реально нужны:
username ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/systemctl
Для автоматизации обычно достаточно двух-трёх команд. Не нужно открывать всё.
Проверить результат
sudo -l
Выведет список разрешённых команд для текущего пользователя. NOPASSWD-правила будут видны явно.
Когда это оправдано
- Cron-задачи, которые перезапускают сервисы или обновляют пакеты
- Ansible и другие системы управления конфигурацией
- CI/CD-пайплайны, которые деплоят на сервер
Во всех остальных случаях лучше обойтись без NOPASSWD — пароль при sudo существует не для красоты.
Если настраиваешь автоматизацию на серверах и нужна помощь с правами и безопасностью — пиши на [email protected] или заходи на 1it.pro.