Как запустить команду sudo без пароля?

Каким образом у пользователя ubuntu в образах AWS для Ubuntu Server 12.04 есть пароль sudo без пароля для всех команд, если в /etc/sudoers нет конфигурации для него? Я использую Ubuntu Server 12.04 на Amazon. Я хочу добавить нового пользователя, который будет вести себя так же, как и пользователь Ubuntu по умолчанию. В частности, я хочу без пароля sudo для этого нового пользователя.

Итак, я добавил нового пользователя и пошел редактировать /etc/sudoers (конечно, используя visudo). При чтении этого файла казалось, что пользователь по умолчанию ubuntu получает свой пароль без пароля sudo от того, что является членом группы admin. Поэтому я добавил к этому нового пользователя. Который не работал. Затем я попытался добавить директиву NOPASSWD в sudoers. Что тоже не сработало.

Во всяком случае, теперь мне просто любопытно. Как пользователь ubuntu получает права доступа без пароля, если они не определены в /etc/sudoers. Каков механизм, который позволяет это?

249
задан 12 October 2012 в 19:02

5 ответов

Хорошо, я нашел ответ, так что можете поместить его сюда для полноты. В конце /etc/sudoers есть то, что я считал просто комментарием:

#includedir /etc/sudoers.d

Однако на самом деле это включает в себя содержимое этого каталога. Внутри которого находится файл /etc/sudoers.d/90-cloudimg-ubuntu. Который имеет ожидаемое содержимое

# ubuntu user is default user in cloud-images.
# It needs passwordless sudo functionality.
ubuntu ALL=(ALL) NOPASSWD:ALL

Так вот где находится настройка sudo для пользователя ubuntu по умолчанию.

Вы должны отредактировать этот файл с помощью visudo. Следующая команда позволит вам отредактировать правильный файл с помощью visudo.

sudo visudo -f /etc/sudoers.d/90-cloudimg-ubuntu

И добавить строку типа:

aychedee ALL=(ALL) NOPASSWD:ALL

В конце.

351
ответ дан 12 October 2012 в 19:02

Краткий ответ без использования какого-либо редактора (проверено на bash, очень рискованно для выполнения на удаленных хостах).

Настройте sudo для работы без пароля для текущего пользователя:

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

Проверьте отредактируйте с помощью:

sudo visudo -c

Проверьте, можете ли вы использовать sudo без пароля:

sudo cat /etc/sudoers | grep "$USER"

... или просто попробуйте с помощью:

sudo <anything>
4
ответ дан 12 October 2012 в 19:02

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

<your user name> ALL=(ALL) NOPASSWD:ALL

Перезагрузите систему, и это будет работать.

9
ответ дан 12 October 2012 в 19:02

Я обнаружил, что самое простое, что нужно сделать, чтобы легко Чтобы воспроизвести это поведение на нескольких серверах, было следующее:

sudo visudo

Измените эту строку:

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

на эту строку:

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

И переместите ее в эту строку:

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

теперь у вас должно быть следующее:

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#

Defaults        env_reset
Defaults        mail_badpass
Defaults        secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# Host alias specification

# User alias specification

# Cmnd alias specification

# User privilege specification
root    ALL=(ALL:ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL

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

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d

затем для каждого пользователя, которому требуется доступ к sudo С паролем :

sudo adduser <user> sudo

и для каждого пользователя, которому требуется доступ к sudo БЕЗ пароля :

sudo adduser <user> admin

(в более старых версиях ubuntu, вам может понадобиться):

sudo service sudo restart

И все!

Изменить: Возможно, вам придется добавить группу администраторов, поскольку я не думаю, что она существует по умолчанию.

sudo groupadd admin

Вы также можете добавить пользователя AWS ubuntu по умолчанию в группу admin с помощью этой команды:

sudo usermod ubuntu -g admin

Примечание. Как упоминалось в @hata , вам может потребоваться использовать adm в качестве имени вашей группы администраторов, в зависимости от того, какая версия Ubuntu используется. сед.

98
ответ дан 12 October 2012 в 19:02

Изучая это, я понял, что в файле / etc / sudoers есть строка, которая не является комментарием, а директивой который заставляет любой файл или папку в каталоге / etc / sudoers / * переопределять содержимое / etc / sudoers .

Это небольшая хитрая директива, как кажется быть прокомментированной строкой на первый взгляд. Это выглядит так:

#includedir /etc/sudoers.d

Вот как я реализовал пользователя без полномочий root и без пароля в эфемерном образе Docker для использования в конвейере CICD с базовым образом ubuntu: 18.04 :

RUN \
  useradd -U foo -m -s /bin/bash -p foo -G sudo && passwd -d foo && passwd -d root && \
  sed -i /etc/sudoers -re 's/^%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
  sed -i /etc/sudoers -re 's/^root.*/root ALL=(ALL:ALL) NOPASSWD: ALL/g' && \
  sed -i /etc/sudoers -re 's/^#includedir.*/## Removed the #include directive! ##"/g' && \
  echo "Customized the sudoers file for passwordless access!" && \
  echo "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
  echo "root ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
  echo "foo user:";  su foo -c 'whoami && id' && \
  echo "root user:"; su root -c 'whoami && id'

Что происходит с приведенным выше кодом:

  • Созданы пользователь и группа foo .
  • Пользователь foo добавляется к обоим foo и группа sudo
  • Домашний каталог установлен в / home / foo .
  • Оболочка установлена ​​на / bin / bash .
  • Пароли для foo и root удаляются.
  • ] sed выполняет встроенные обновления файла / etc / sudoers , чтобы разрешить пользователям foo и root беспарольный доступ к sudo ] команда.
  • Команда sed отключает директиву #includedir , которая позволяет любым файлам в подкаталогах отменять эти встроенные обновления.
2
ответ дан 17 October 2019 в 16:12

Другие вопросы по тегам:

Похожие вопросы: