Как запустить команду 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.