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

143

Предисловие

Это довольно сложный вопрос, связанный с файлом 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', потому что они находились ниже в файл конфигурации?

Джеймс Николсон
источник
7
примечание: ALL = NOPASSWD: ALL должно быть ALL = (ALL) NOPASSWD: ALL, иначе это не сработает ...
Андре Вервийс
см. также этот ответ: askubuntu.com/questions/139723/sudo-does-not-ask-for-password/…
JB.
5
Возможный дубликат Почему опция sudoers NOPASSWD не работает?
Анвар

Ответы:

164

Добавленная вами строка была переопределена. От man sudoers:

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

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

%sudo   ALL=(ALL:ALL) ALL

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

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

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

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

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

Для одного пользователя добавьте эту строку в конец вашего sudoersфайла, используяsudo visudo

superuser ALL=(ALL) NOPASSWD: ALL

Для группы

%supergroup  ALL=(ALL) NOPASSWD: ALL
Федир РЫХТИК
источник
8
Прежде чем я прочитал этот ответ, я сделал, %sudo ALL=NOPASSWD: ALLи это работает. Я единственный, кто находит расширенную форму Бэкуса-Наура действительно трудной для понимания?
Винс
4
@ Vince Когда вы используете вашу команду, я не могу sudoбез пароля как пользователь без привилегий sudo. Например, sudo -u root -iработает, но sudo -u git -iне работает.
NeverEndingQueue
Это гораздо более полезный ответ, чем принятый, который, хотя и отвечает на вопрос ОП, вероятно, не является тем, что большинство людей посещают эту страницу через Google.
Махмуд Аль-Кудси
3

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

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 Software .

Преимущества такого подхода по сравнению с добавлением строки в 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 ).

Борис
источник
(не стесняйтесь редактировать мой ответ, если вы можете придумать лучшее имя файла)
Борис
0

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

%sudo ALL=NOPASSWD: ALL

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

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