Файл Sudoers, включите NOPASSWD для пользователя, все команды

Предисловие

Это довольно сложный вопрос, связанный с файлом Sudoers и командой sudo в целом.

ПРИМЕЧАНИЕ. Я внес эти изменения на выделенной машине с Ubuntu Desktop 13.04, которую я использую исключительно в учебных целях. Я понимаю, что активировать NOPASSWD sudo - огромный риск для безопасности.

Вопрос

Изначально мое единственное изменение в файле sudoers (/ etc / sudoers) было одной строкой, пользовательской спецификацией, которая должна была позволить nicholsonjf запускать все команды с sudo без необходимости вводить пароль (см. строку, начинающуюся с 'nicholsonjf'):

# 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
nicholsonjf    ALL=NOPASSWD: ALL

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

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

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

#includedir /etc/sudoers.d

Однако это не сработало, и мне все равно предлагали ввести пароль каждый раз, когда я запускал команду как nicholsonjf. Я смог запустить команды sudo только как nicholsonjf, как только удалил nicholsonjf из групп sudo и admin.

Кто-нибудь может объяснить, почему это сработало?

Это потому, что пользователь 'nicholsonjf' наследовал права sudo от двух групповых спецификаций 'admin' и 'sudo' (см. Ниже в sudoers file), которые переопределяли пользовательскую спецификацию 'nicholsonjf', потому что они находились в файле конфигурации?

149
задан 16 April 2014 в 03:43

5 ответов

Ваша добавленная строка была переопределена. Из man sudoers:

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

В вашем случае nicholsonjf был членом группы sudo, поэтому к нему применилась эта строка:

%sudo   ALL=(ALL:ALL) ALL

Если вы хотите переопределить записи в /etc/sudoers, просто поставьте новые записи после них.

Новая запись должна выглядеть как

myuser ALL=(ALL) NOPASSWD:ALL для одного пользователя или

%sudo ALL=(ALL) NOPASSWD:ALL для группы.

0
ответ дан 16 April 2014 в 03:43

Для одного пользователя:

superuser ALL=(ALL) NOPASSWD:ALL

Для группы:

%supergroup  ALL=(ALL) NOPASSWD:ALL
0
ответ дан 16 April 2014 в 03:43

Поскольку Винс упомянул в комментарии , вы можете использовать эту строку:

%sudo ALL=NOPASSWD: ALL

(Это отличается от строк, показанных в те ответы , и это решило проблему для меня.)

0
ответ дан 16 April 2014 в 03:43

Никогда не предлагать текущему пользователю пароль, когда тот пользователь использует sudo сделать

echo "$USER ALL=(ALL:ALL) NOPASSWD: ALL" | sudo tee /etc/sudoers.d/dont-prompt-$USER-for-password

это создаст названный файл /etc/sudoers.d/dont-prompt-<YOUR USERNAME>-for-sudo-password и будет означать, что пользователь, что Вы выполнили ту команду, как не будет запрошен их пароль при выполнении sudo команда. Вам все еще предложат пароль в других контекстах, таких как установка материала из программного обеспечения Ubuntu графическое приложение.

Преимущества выполнения его этот путь по включению строки echo команда к /etc/sudoers использование sudo visudo (как предложено другими ответами),

  1. /etc/sudoers иногда изменяется системными обновлениями, тогда как файлы в /etc/sudoers.d не
  2. sudo visudo метод подвержен ошибке (как свидетельствуется этим самым вопросом), тогда как копию/вставку команда намного более трудно испортить

Согласно sudo cat /etc/sudoers.d/README эта функция (вставления дополнительных sudoer файлов /etc/sudoers.d) был включен по умолчанию начиная с Debian 1.7.2p1-1, который вышел в конце 1990-х (Ubuntu основана на Debian).

4
ответ дан 10 October 2019 в 13:42

Изучая это, я понял, что в файле / 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 .
  • Команда sed выполняет встроенные обновления файла / etc / sudoers , чтобы разрешить пользователям foo и root беспарольный доступ к группа sudo .
  • Команда sed отключает директиву #includedir , которая позволяет любым файлам в подкаталогах отменять эти встроенные обновления.
2
ответ дан 21 February 2020 в 18:32

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

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