Вопрос 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), которые переопределяли пользовательскую спецификацию «nicholsonjf», поскольку они были еще ниже в файл конфигурации?


106
2017-08-19 00:45


происхождения


note: ALL = NOPASSWD: ALL должно быть ALL = (ALL) NOPASSWD: ALL или иначе оно не работает ... - André Verwijs
см. также этот ответ: askubuntu.com/questions/139723/sudo-does-not-ask-for-password/... - JB.
Возможный дубликат Почему sudoers опция NOPASSWD не работает? - Anwar
@ AndréVerwijs благодарит, это работает для меня - netawater


ответы:


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

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

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

%sudo   ALL=(ALL:ALL) ALL

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

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

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

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


103
2017-09-03 00:55



Для полного решения я хотел бы кое-что увидеть NOPASSWD в этом ответе ... - Daniel Alder
Я думаю, решение должно быть: %sudo ALL=(ALL) NOPASSWD:ALL - Daniel Alder
@DanielAlder: строка спецификации из вопроса nicholsonjf ALL=NOPASSWD: ALL верно. Это было как раз в неправильном месте, как я объяснил в ответе. ------ Runas спецификация - в вашем случае (ALL) - не является обязательным. Если вы опустите спецификацию, вы можете запускать команды как root и вы не можете использовать -u а также -g варианты sudo, - pabouk
Это худший риск для безопасности, поскольку он дает нескольким пользователям доступ к беспроблемному доступу. Если это ваш персональный компьютер, то это неважно - возможно. Я бы просто переместил личную линию, чтобы продержаться. - Mark Williams
Добавление, а не исправление, если вы используете что-то debian / ubuntu (может вообще применяться, не видели его в другом месте). Ваша абсолютная ставка лучшей практики заключается в том, чтобы добавлять пользовательские команды в файл в /etc/sudoers.d/ и оставлять sudoers управляемый менеджером пакетов. - Aquarion


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

superuser ALL=(ALL) NOPASSWD:ALL

Для группы:

%supergroup  ALL=(ALL) NOPASSWD:ALL

109
2018-01-16 15:28



Прежде чем я прочитал этот ответ, я сделал %sudo ALL=NOPASSWD: ALL и это работает. Я единственный, кто считает, что расширенная форма Бэкуса-Наура очень трудно понять? - Vince
@Vince При использовании вашей команды я не могу sudo без пароля как пользователя без привилегий sudo. Например. sudo -u root -i работает, но sudo -u git -i не делает. - NeverEndingQueue
Это гораздо более полезный ответ, чем принятый, который, хотя он и отвечает на вопрос OP, вероятно, не тот, который большинство людей достигает этой страницы через Google, который ищет. - Mahmoud Al-Qudsi


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

%sudo ALL=NOPASSWD: ALL

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


-1
2017-10-04 09:53



@ Eliah, это не то, что отличается от других ответов. Все, что он делает, заменяет местозаполнитель supergroup в ответ Федира с sudo, Что дальше, другой пользователь для группы wheel? Или любая другая группа, которую пользователь использует? - muru
@muru «Все, что он делает, это заменить местозаполнитель supergroup в ответ Федира с sudo«.  Какие? Замена supergroup с sudo в линии %supergroup ALL=(ALL) NOPASSWD:ALL доходность %sudo ALL=(ALL) NOPASSWD:ALL, а не %sudo ALL=NOPASSWD: ALL, - Eliah Kagan
Что, возможно, хуже, так как теперь NOPASSWD предназначен только для root в качестве целевого пользователя. Таким образом, он даже не отвечает на вопрос правильно! - muru
@muru Что есть даже не возможно, однако, является заменой supergroup с sudo, Это его собственный ответ, а не благодарственное сообщение или копия другого ответа. Но да, я согласен: если они не намерены, это будет не так хорошо для большинства пользователей, как методы в других ответах. (Но, особенно учитывая, что в вопросе говорится «все команды», а не «все целевые пользователи», я не думаю, что это действительно даже не пытается ответить на заданный вопрос.) - Eliah Kagan
Это сработало для меня, и я хотел поделиться с другими пользователями :) (при необходимости удалите мой комментарий). - E. Fortes