Как настроить отсутствие пароля для sudo в Linux?

Вопрос или проблема

Как настроить доступ к sudo без пароля на дистрибутивах RHEL (Fedora, CentOS и т.д.) или Ubuntu? (Если это работает одинаково на всех дистрибутивах, то это еще лучше!)

Настройки: персональное и/или лабораторное/учебное оборудование, где нет опасений по поводу несанкционированного доступа (т.е. устройства находятся в непубличных сетях, и все пользователи являются полностью доверенными, а содержимое устройств – “обычное”).

Я немного изменил этот ответ по сравнению с предыдущими версиями. Я бы предложил один из трех подходов:

  • Рекомендуется: создайте группу пользователей, которые могут использовать sudo без пароля:

    %wheel         ALL = (ALL) NOPASSWD: ALL
    

    и добавьте все учетные записи пользователей, которые могут использовать эту группу.

  • Сравнительно безопасно, но неудобно: предоставьте доступ к sudo без пароля четкому списку пользователей:

    User_Alias     EVERYONE = user1, user2, user3, ...
    EVERYONE       ALL = (ALL) NOPASSWD: ALL
    

    но вам придется редактировать конфигурацию sudo каждый раз, когда вы хотите изменить список пользователей с доступом.

  • Небезопасно: если вы действительно хотите предоставить доступ к sudo без пароля всем учетным записям пользователей, благодаря комментарию от medina, вы можете написать

    ALL            ALL = (ALL) NOPASSWD: ALL
    

В каждом случае строки из блока кода следует добавить в /etc/sudoers (используя команду visudo, конечно, которая обеспечит отсутствие синтаксических ошибок), или в файл под /etc/sudoers.d, если ваша система настроена на включение этих файлов в конфигурацию sudo (спасибо Xetius). Обратите внимание, что строки в конфигурации sudo обрабатываются в порядке сверху вниз, и более поздние строки переопределяют более ранние, поэтому если вы хотите избежать переопределения, вы должны разместить это ближе к концу (спасибо a1an).

Причина, по которой я рекомендую использовать группу, а не предоставлять общий доступ к sudo без пароля всем пользователям – хотя я знаю, что именно это и спрашивалось в вопросе – заключается в том, что, особенно в современном мире, значительный риск безопасности возникает из-за компрометации других сервисов, работающих на системе. Конечно, вы можете полностью доверять всем реальным людям, имеющим доступ, но доверяете ли вы почтовому серверу? Системному регистратору? Демону Docker? Как и другим сервисам, которые работают на машине? И более того, доверяете ли вы любому случайному человеку в Интернете, который мог воспользоваться уязвимостью в одном из этих сервисов, чтобы заставить его делать что-то? Предоставление доступа к sudo без пароля всем пользователям означает, что любой, кто взломает один из этих сервисов таким образом, чтобы позволить им выполнять команды, сможет сразу запустить команды от имени root, что, вероятно, приведет к полной компрометации системы. Верно, что отказ в доступе к sudo не обязательно означает, что они не могут компрометировать систему, но, по крайней мере, вы можете затруднить им это.

Конечно, разные системы имеют разные требования, и вы вполне можете оказаться в ситуации, когда вы действительно можете доверять, что никто не получит неправильный доступ к этому компьютеру, или что на самом деле никто не сможет сделать что-то слишком плохое, если это произойдет. Но по крайней мере, задумайтесь об этом. И в случае сомнений, лучше ограничить доступ по умолчанию, потому что иногда оказывается, что вы не можете доверять своей системе так, как думаете, и если что-то пойдет не так, будет слишком поздно.

Я попробовал решения выше, но безуспешно. Следующее решение сработало для меня: отредактируйте файл /etc/sudoers и добавьте следующую строку

username ALL=(ALL) NOPASSWD: ALL

Ключевым моментом является то, что его нужно добавить после последней строки, которая гласит:

#includedir /etc/sudoers.d

Я попробовал все ответы на этой странице, и ни один из них не дал полезных результатов. В конечном итоге я разобрался, используйте эту команду, чтобы просмотреть свои права sudo:

sudo -l

Это должно дать вывод, похожий на следующий:

User gmurphy may run the following commands on this host:
    (root) NOPASSWD: ALL
    (ALL) ALL

Это показывает, что я настроен с правами root, но я все еще являюсь частью группы (admin), которая соответствует правилу sudo, ожидающему пароль (“(ALL) ALL”). Это заставляло sudo запрашивать у меня пароль. Правило, о котором идет речь, касалось пользователей администраторов:

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

Как только я закомментировал это, я был в состоянии использовать sudo без пароля. Надеюсь, это будет полезно кому-то другому.

В файле /etc/sudoers есть пример именно этого внизу файла:

## То же самое без пароля
# %wheel        ALL=(ALL)       NOPASSWD: ALL

Существует еще один способ сделать это, не затрагивая файл sudoers.

  • Отредактируйте /etc/pam.d/su и снимите комментарий с нижестоящей строки:

    auth           sufficient      pam_wheel.so trust use_uid
    
  • Добавьте пользователя в группу wheel.

Это старая тема, но интересно, что никто не добавил системный по умолчанию authenticate в этот список ответов. Использование записи

Defaults  !authenticate

В файле sudoers позволило бы любому пользователю использовать свои определенные команды sudo без какой-либо аутентификации паролем. Это часть стандартной спецификации sudo и переносимо на все платформы, как указано в вопросе. И если вам нужно ограничить это для конкретного пользователя, попробуйте

Defaults:<user_name>  !authenticate 

Существует еще один способ сделать это, не затрагивая файл sudoers.

  • Отредактируйте /etc/pam.d/sudo и добавьте нижестоящую строку:

    auth           sufficient      pam_wheel.so trust use_uid
  • Добавьте пользователя в группу wheel.

Благодарности “topdog” и “Daniel Serodio” за первоначальный ответ по поводу “su”, а не “sudo”. Я использовал это как справку и без стыда скопировал и изменил их пост.

echo -e "\n$USER ALL=(ALL) NOPASSWD: ALL\n" | sudo tee -a /etc/sudoers
sudo cat /etc/sudoers

Повторно откройте терминал и проверьте, что у вас не запрашивают пароль:

sudo echo "it works!"

Специально для Micro OS (opensuse) – мне нужно было использовать:

# /etc/sudoers.d/userpw

Defaults !targetpw

## Раскомментируйте, чтобы разрешить членам группы wheel выполнять любую команду
# %wheel ALL=(ALL) ALL

## То же самое без пароля
# %wheel ALL=(ALL) NOPASSWD: ALL
  • Поскольку файловая система в Micro OS неизменяемая, установите группу wheel следующим образом:
transactional-update pkg in system-group-wheel
reboot
usermod -a -G wheel my-username

Ответ или решение

Для настройки безпарольного использования sudo в операционных системах Linux, таких как RHEL (включая Fedora, CentOS) или Ubuntu, необходимо внести изменения в файл конфигурации sudoers. Для этого удобно использовать команду visudo, которая проверяет синтаксис и предотвращает ошибки, которые могут заблокировать доступ к sudo.

Шаги для настройки безпарольного sudo:

  1. Откройте терминал.

  2. Запустите visudo:

    sudo visudo

    Использование visudo гарантирует, что вы не оставите файл sudoers с ошибками.

  3. Добавьте настройки для безпарольного доступа:

    • Рекомендуемый способ – создание группы пользователей, которые могут использовать sudo без ввода пароля. Вам нужно добавить следующую строчку (при этом %wheel или другая группа должна уже существовать):

      %wheel ALL=(ALL) NOPASSWD: ALL

      Затем добавьте нужных пользователей в эту группу:

      sudo usermod -aG wheel username
    • Необходимый доступ только для отдельных пользователей. Если вы хотите предоставить доступ конкретным пользователям, добавьте следующее:

      User_Alias EVERYONE = user1, user2, user3
      EVERYONE ALL=(ALL) NOPASSWD: ALL
    • Иногда можно дать доступ всем пользователям (только если вы уверены в безопасности вашей системы):

      ALL ALL=(ALL) NOPASSWD: ALL

    Обратите внимание: рекомендуется использовать первый вариант с группой для минимизации рисков.

  4. Сохраните изменения и выйдите из редактора.

Важные моменты:

  • Если у вас есть правила, которые требуют пароля для определённых групп (например, %admin), убедитесь, что эти правила стоят ниже в файле sudoers, чтобы они не перекрывали ваши новые правила.
  • Проверьте текущие разрешения с помощью команды:
    sudo -l

Альтернативные методы:

Некоторые системы используют PAM (Pluggable Authentication Modules) для управления доступом. Вы можете настроить безпарольный доступ, изменив файлы конфигурации PAM:

  1. Измените /etc/pam.d/sudo:

    auth sufficient pam_wheel.so trust use_uid

    Это позволит пользователям группы wheel использовать sudo без пароля.

  2. Добавьте пользователя в группу wheel:

    sudo usermod -aG wheel username

Проверка корректности настройки:

После внесения всех изменений попробуйте выполнить команду:

sudo echo "It works!"

Если вы не были запрошены ввести пароль, настройка выполнена успешно.

Заключение:

Настройка безпарольного доступа к sudo может значительно упростить взаимодействие с системой в доверенной среде. Тем не менее, необходимо помнить о рисках, связанных с безопасностью. Всегда применяйте принцип наименьших привилегий и учитывайте, кто и что имеет доступ к вашему серверу.

Оцените материал
Добавить комментарий

Капча загружается...