Добавление NOPASSWD в /etc/sudoers не работает

14.04 здесь. Я загрузился в свою машину, добавил следующую строку в /etc/sudoers:

myuser   ALL=NOPASSWD: ALL

А потом попробовал бежать:

sudo mkdir /etc/blah

...и у меня спрашивают мой пароль. Почему?!?

Я делаю нет хочу, чтобы при выполнении этой операции у меня спрашивали пароль. Пожалуйста, обратите внимание, что когда я запускаю ls -ltr / Я получаю:

drwxr-xr-x 94 root root  4096 Jul 30 13:28 etc

Но я не думаю, что это имеет значение, потому что я настроил себя как "sudoer", верно?

Что еще более важно, что мне нужно сделать, чтобы я мог работать sudo mkdir /etc/blah как мой текущий пользователь (myuser) без запроса пароля?

Вот весь мой /etc/sudoers файл:

## 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_resetDefaults        mail_badpassDefaults        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 specificationroot      ALL=(ALL:ALL) ALLfizzbuzz  ALL=NOPASSWD: ALLchadmin   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

Это вызвано последовательностью / упорядоченностью правил. Предпочтение отдается последнему правилу.

Чтобы устранить вашу проблему, просто переместите свои линии,

fizzbuzz  ALL=NOPASSWD: ALLchadmin   ALL=NOPASSWD: ALL

из sudoers файл для

sudo visudo -f /etc/sudoers.d/myOverrides 

Это лучший подход, чем редактирование sudoers файл с помощью обычного текстового редактора. Если вы случайно вставите ошибки в файл, вы больше не сможете запускать sudo. Всегда используйте visudo, так что синтаксис проверяется, и вы получаете предупреждения об ошибках!

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

%admin ALL=(ALL) ALL%sudo   ALL=(ALL:ALL) ALL

Если вы запустите groups команда вы должны увидеть, что ваш пользователь принадлежит к этим группам.

Если мой пользователь находится в потеть группа, то такой порядок строк не обеспечит доступ без пароля (как отметил Флориан Диш), потому что 3-я строка переопределяет 1-ю.

myuser    ALL=(www-data:www-data) NOPASSWD: ALL# Allow members of group sudo to execute any command%sudo   ALL=(ALL:ALL) ALL

Так что просто расположите строки в таком порядке:

# Allow members of group sudo to execute any command%sudo   ALL=(ALL:ALL) ALLmyuser    ALL=(www-data:www-data) NOPASSWD: ALL

Под мой пользователь использование учетной записи sudo -l чтобы проверить, какие разрешения мой пользователь имеет.

Если несколько записей совпадают для пользователя, то последний один используется. Так что, если fizzbuzz и chadmin являются членами групп admin или sudo у них по-прежнему будет запрошен пароль.

Поместите две строки в конце sudoers файл после того, как #includedir линия.

В идеале, если вы настраиваете, какие команды можно запускать с помощью sudo вы должны внести эти изменения в отдельный файл в разделе /etc/sudoers.d/ вместо того, чтобы редактировать sudoers файл напрямую. Вы также должны всегда использовать visudo чтобы отредактировать файл(ы). Вы НИКОГДА не должны предоставлять NOPASSWD на ALL команды.

Пример:sudo visudo -f /etc/sudoers.d/mynotriskycommand

Вставьте свою строку, дающую разрешение:myuser ALL= NOPASSWD: /bin/mkdir

Затем сохраните и выйдите и visudo предупредит вас, если у вас возникнут какие-либо синтаксические ошибки.

Ты можешь бежать sudo -l чтобы просмотреть разрешения, предоставленные вашему пользователю, если какие-либо из пользовательских NOPASSWD команды появляются ПЕРЕД любым %groupyouarein ALL=(ALL) ALL команда в выводе вам будет предложено ввести свой пароль.

Если вы обнаружите, что создаете много таких файлов sudoers.d, то, возможно, вам захочется создать их с именами для каждого пользователя, чтобы их было легче визуализировать. Имейте в виду, что порядок ИМЕН ФАЙЛОВ и ПРАВИЛ внутри файла очень важен, выигрывает ПОСЛЕДНИЙ загруженный файл, независимо от того, является ли он БОЛЕЕ или МЕНЕЕ разрешительным, чем предыдущие записи.

Вы можете управлять порядком имен файлов, используя префикс 00-99 или aa / bb / cc, хотя также имейте в виду, что если у вас есть какие-либо файлы, у которых нет числового префикса, они будут загружаться после нумерованных файлов, переопределяя настройки. Это связано с тем, что в зависимости от ваших языковых настроек "лексическая сортировка", которую использует оболочка, сначала сортирует числа, а затем может чередовать верхний и нижний регистры при сортировке в порядке "возрастания".

Попробуйте запустить printf '%s\n' {{0..99},{A-Z},{a-z}} | sort и printf '%s\n' {{0..99},{A-Z},{a-z}} | LANG=C sort чтобы узнать, печатается ли на вашем текущем языке AaBbCc и т.д. или ABC затем abc чтобы определить, какой префикс "последней" буквы лучше всего использовать.

Возможный дубликат Почему опция sudoers NOPASSWD не работает?

Не могли бы вы опубликовать свой файл sudoers? Директива правильная, но она не может работать из-за контекста.

Спасибо @Letizia - пожалуйста, посмотрите мое обновление, вам что-нибудь бросилось в глаза?

Полагаю, я должен также отметить, что я * не * использовал visudo, однако любые ручные изменения в этом файле не были заданиями копирования и вставки, я ввел все как есть. ** Но редактирует ли visudo другие файлы, кроме этого?** Возможно, это так…

Кроме того, проверьте любые файлы в /etc/sudoers.d/, они могут переопределять вещи из /etc/sudoers