Каким образом у пользователя Итак, я добавил нового пользователя и пошел редактировать Во всяком случае, теперь мне просто любопытно. Как пользователь 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
. Каков механизм, который позволяет это?
Хорошо, я нашел ответ, так что можете поместить его сюда для полноты. В конце /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
В конце.
Краткий ответ без использования какого-либо редактора (проверено на 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>
Я бы создал свой собственный файл в каталоге /etc/sudoers.d/ - файл, созданный Amazon Cloud, может быть перезаписан в случае любого обновления. После создания файла в /etc/sudoers.d добавьте эту запись,
<your user name> 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
(в более старых версиях ubuntu, вам может понадобиться):
sudo service sudo restart
И все!
Изменить: Возможно, вам придется добавить группу администраторов, поскольку я не думаю, что она существует по умолчанию.
sudo groupadd admin
Вы также можете добавить пользователя AWS ubuntu
по умолчанию в группу admin
с помощью этой команды:
sudo usermod ubuntu -g admin
Примечание. Как упоминалось в @hata , вам может потребоваться использовать adm
в качестве имени вашей группы администраторов, в зависимости от того, какая версия Ubuntu используется. сед.
Изучая это, я понял, что в файле / 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
, которая позволяет любым файлам в подкаталогах отменять эти встроенные обновления.