Как запустить команду 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, Какой механизм это позволяет?

6 ответов

Решение

Хорошо, я обнаружил ответ, поэтому могу также привести его здесь для полноты. В конце /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

В конце.

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

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

и наконец, запустите это:

sudo service sudo restart

И это все!

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

sudo groupadd admin

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

sudo usermod ubuntu -g admin

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

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

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

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

Короткий ответ без использования какого-либо редактора (проверено на 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>

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

RUN \
    groupadd -g 999 foo && useradd -u 999 -g foo -G sudo -m -s /bin/bash foo && \
    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 "foo ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers && \
    echo "Customized the sudoers file for passwordless access to the foo user!" && \
    echo "foo user:";  su - foo -c id

Если вы хотите удалить пароль

sudo passwd -d user

проверьте дополнительную информацию о команде passwd с помощьюpasswd -hна убунту

изменить: команда passwd варьируется от системы к системе. Например, флаг -d находится в системах Ubuntu, но не в MacBook.

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