Вопрос или проблема
Как настроить доступ к 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) – мне нужно было использовать:
-
https://documentation.suse.com/sles/15-SP2/html/SLES-all/cha-adm-sudo.html#sec-sudo-usecases-userpw
-
В opensuse пользователь
wheel
устанавливается как пакет:system-group-wheel
-
Добавьте вашего пользователя в группу
wheel
:sudo usermod -a -G wheel USERNAME
# /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
:
-
Откройте терминал.
-
Запустите
visudo
:sudo visudo
Использование
visudo
гарантирует, что вы не оставите файлsudoers
с ошибками. -
Добавьте настройки для безпарольного доступа:
-
Рекомендуемый способ – создание группы пользователей, которые могут использовать
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
Обратите внимание: рекомендуется использовать первый вариант с группой для минимизации рисков.
-
-
Сохраните изменения и выйдите из редактора.
Важные моменты:
- Если у вас есть правила, которые требуют пароля для определённых групп (например,
%admin
), убедитесь, что эти правила стоят ниже в файлеsudoers
, чтобы они не перекрывали ваши новые правила. - Проверьте текущие разрешения с помощью команды:
sudo -l
Альтернативные методы:
Некоторые системы используют PAM (Pluggable Authentication Modules) для управления доступом. Вы можете настроить безпарольный доступ, изменив файлы конфигурации PAM:
-
Измените /etc/pam.d/sudo:
auth sufficient pam_wheel.so trust use_uid
Это позволит пользователям группы
wheel
использоватьsudo
без пароля. -
Добавьте пользователя в группу
wheel
:sudo usermod -aG wheel username
Проверка корректности настройки:
После внесения всех изменений попробуйте выполнить команду:
sudo echo "It works!"
Если вы не были запрошены ввести пароль, настройка выполнена успешно.
Заключение:
Настройка безпарольного доступа к sudo
может значительно упростить взаимодействие с системой в доверенной среде. Тем не менее, необходимо помнить о рисках, связанных с безопасностью. Всегда применяйте принцип наименьших привилегий и учитывайте, кто и что имеет доступ к вашему серверу.