Как использовать sudo в Linux без пароля
sudo apt update
sudo systemctl restart nginx
sudo reboot
При работе с Linux приходится очень часто использовать sudo. И каждый раз вводить пароль со временем становится довольно утомительно.
Когда это утомление достигает пика, в конце концов решаешь настроить sudo так, чтобы не вводить пароль.
Вероятно, те, кто читает эту статью, испытывают похожие чувства.
В этой статье я расскажу, как избавиться от необходимости вводить пароль для sudo.

Где находятся настройки sudo и как их изменять?
Основной файл настроек sudo находится здесь:
/etc/sudoers
Настройки sudo могут вызвать серьезные проблемы, если синтаксис будет некорректным. Если вы ошибетесь и заблокируете саму команду sudo, восстановление будет хлопотным. Поэтому используется специальная команда visudo.
sudo visudo
visudo проверяет синтаксис при сохранении и немедленно сообщает об ошибках. Даже в официальном руководстве настоятельно рекомендуется использовать именно visudo.
Но не стоит напрямую изменять /etc/sudoers
При вводе sudo visudo сразу открывается файл /etc/sudoers, и его можно тут же редактировать.
Однако открывать и изменять файл /etc/sudoers напрямую — не лучшая практика.
Я обычно предпочитаю не трогать основной файл конфигурации, а создавать новые файлы в директории /etc/sudoers.d/.
Так проще отслеживать изменения и откатываться назад, если что-то пойдет не так.
sudo спроектирован так, чтобы включать дополнительные настройки из файлов, расположенных в этой директории.
Действительно, в самой последней строке файла /etc/sudoers можно увидеть include /etc/sudoers.d/.
sudo visudo -f /etc/sudoers.d/no-password-common-commands
Имя файла можно выбрать произвольно, главное, чтобы оно было легко узнаваемым в будущем.
Но не стоит давать слишком небрежные имена, иначе потом сами же будете страдать.
Кстати, файлы, имена которых содержат ~ или ., игнорируются sudoers. Об этом говорится в комментариях внутри файла README в этой директории.
Давайте разберем формат настроек
Настройки sudoers имеют примерно такой формат:
Честно говоря... это синтаксис, который невозможно запомнить. Просто запишите его куда-нибудь или добавьте эту страницу блога в закладки.
Используешь его нечасто, но когда понадобится, забываешь.
Имя_пользователя ХОСТ=(ПОЛЬЗОВАТЕЛЬ_ДЛЯ_ВЫПОЛНЕНИЯ) ОПЦИИ: КОМАНДА
Например, если имя пользователя potter и вы хотите выполнять apt update без пароля, это можно записать так:
potter ALL=(ALL) NOPASSWD: /usr/bin/apt
Давайте разберем каждую часть:
potter: Имя пользователя, к которому применяются настройки.ALL: Применять на всех хостах.(ALL): Указывает, от имени какого пользователя можно выполнять команду. Иногда я видел, как люди писали(root). Я используюALL.NOPASSWD: Не запрашивать пароль./usr/bin/apt: "Абсолютный путь" к разрешенной команде.
Если вы не уверены в пути к команде, можете проверить его с помощью which:
~$which apt
/usr/bin/apt
~$which apt-get
/usr/bin/apt-get
~$which reboot
/usr/sbin/reboot
~$which systemctl
/usr/bin/systemctl
Искушение открыть все с помощью ALL
Здесь возникает очень сильное искушение:
potter ALL=(ALL) NOPASSWD: ALL
Выглядит очень чисто. Все команды sudo выполняются без пароля. Удобно, очень удобно.
Это личный выбор, но я считаю, что лучше воздержаться от этого.
Я даже не хочу представлять ситуацию, когда одна неправильно введенная команда выполняется с правами root.
Если скрипт пойдет не так, у вас не будет последнего тормоза в виде ввода пароля. Если кто-то воспользуется открытым терминалом, то это конец. В мире много странных людей...
Выбор за вами.
Разрешение без пароля только для часто используемых команд
Я иду на компромисс и разрешаю выполнение без пароля только для часто используемых команд. Этот подход довольно хорош.
Например, давайте предположим, что вы хотите использовать apt, apt-get, reboot, systemctl без пароля.
Сначала откройте файл конфигурации:
sudo visudo -f /etc/sudoers.d/no-password-common-commands
И добавьте следующую строку:
potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot, /usr/bin/systemctl
Теперь пользователь potter сможет выполнять следующие команды без пароля:
sudo apt update
sudo apt -y upgrade
sudo apt-get update
sudo reboot
sudo systemctl reload nginx
Если вам не хочется открывать все возможности systemctl, можно разрешить только определенные команды:
potter ALL=(ALL) NOPASSWD: /usr/bin/systemctl reload nginx, /usr/bin/systemctl status nginx
Разделение на несколько строк для лучшей читаемости
Если команд становится много, одна строка может выглядеть неаккуратно. В этом случае можно разбить ее на несколько строк с помощью \.
Хотя это привычное разделение строк, часто используемое пользователями Linux, почему-то на практике его редко применяют.
Однако, его использование значительно улучшает читаемость.
potter ALL=(ALL) NOPASSWD: \
/usr/bin/apt, \
/usr/bin/apt-get, \
/usr/sbin/reboot, \
/usr/bin/systemctl
Выглядит хорошо и аккуратно.
Применение к определенной группе
Эта настройка также весьма полезна. На серверах, которыми управляют несколько человек, бывает удобнее использовать группы.
Если вы хотите применить ее только к определенной группе, используйте формат %имя_группы.
Например, для группы admin это будет выглядеть так:
%admin ALL=(ALL) NOPASSWD: /usr/bin/systemctl restart nginx, /usr/bin/apt, /usr/bin/apt-get
Увеличение времени действия пароля
Если полное отключение пароля вызывает беспокойство, есть другой способ: регулировка времени, по истечении которого пароль запрашивается повторно.
По умолчанию, после однократного ввода пароля он не запрашивается в течение 10 или 15 минут, но это время можно изменить.
Это делается с помощью настройки timestamp_timeout.
Например, так sudo не будет запрашивать пароль в течение 60 минут:
Defaults timestamp_timeout=60
Единица измерения — "минуты", но если установить 0, это будет кошмар с постоянным вводом пароля.
Если установить -1, пароль sudo не будет запрашиваться до закрытия терминала. Это почти такая же мощная и удобная опция, как ALL, но может вызывать некоторое беспокойство при использовании.
Конечно, эти настройки — разрешение без пароля и увеличение времени удержания — могут сосуществовать.
Например, их можно комбинировать следующим образом:
Defaults timestamp_timeout=30
potter ALL=(ALL) NOPASSWD: /usr/bin/apt, /usr/bin/apt-get, /usr/sbin/reboot
Часто используемые команды — без пароля, а для остальных команд sudo — 30 минут без запроса после одной аутентификации.
Думаю, это довольно хороший компромисс между удобством и безопасностью.
Уменьшать неудобства хорошо, но не ценой увеличения небезопасности.
Заключение
Убрать ввод пароля для sudo несложно.
Хотя объяснение было долгим, краткий итог таков:
- Создайте отдельный файл конфигурации в
/etc/sudoers.d/с помощьюvisudo.
sudo visudo -f /etc/sudoers.d/no-password-common-commands
- Добавьте правило
NOPASSWD.
Defaults timestamp_timeout=30
potter ALL=(ALL) NOPASSWD: \
/usr/bin/apt, \
/usr/bin/apt-get, \
/usr/sbin/reboot
Решать, насколько открывать пароль, каждый должен сам, но я бы хотел, чтобы вы помнили одно:
Истинный комфорт наступит тогда, когда будут удовлетворены как удобство для пальцев, так и спокойствие души.
Комментариев нет.