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

47

С 14.04 здесь. Я SSHed в мою машину, добавил следующую строку /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_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
fizzbuzz  ALL=NOPASSWD: ALL
chadmin   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
Zac
источник
Не могли бы вы опубликовать файл sudoers? Директива верна, но она не может работать из-за контекста.
Лети
Спасибо @Letizia - пожалуйста, посмотрите мое обновление, что-нибудь выскакивает у вас?
Зак
Полагаю, я должен также отметить, что я не использовал visudoручные правки в этом файле, не были заданиями копирования-вставки, я набрал все как есть. Но visudoредактирует ли другие файлы кроме этого? Это могло бы быть ...
Зак
2
Возможный дубликат Почему опция sudoers NOPASSWD не работает?
Анвар
Кроме того, проверьте любые файлы в /etc/sudoers.d/, они могут быть /etc/sudoers
важными

Ответы:

69

Это последовательность / порядок правил, которые вызвали это. Последнее правило имеет преимущество.

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

fizzbuzz  ALL=NOPASSWD: ALL
chadmin   ALL=NOPASSWD: ALL

из sudoersфайла в

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

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

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

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

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

Лети
источник
nn-somenameНапример , имя файла должно соответствовать /etc/sudoers.d/20-myoverrides
условию
Да, конечно, если у вас более одного файла, они анализируются в отсортированном лексическом порядке, поэтому рекомендуется использовать число, и этот порядок будет легко узнать.
Лети
22

Если myuser находится в группе sudo , то этот порядок строк не обеспечит беспарольный доступ (как отметил Флориан Диш), потому что 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) ALL
myuser    ALL=(www-data:www-data) NOPASSWD: ALL

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

Kostyantyn
источник
11

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

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

Флориан Диш
источник
Действительно, поэтому комбинация @ Letizia и ваших ответов является наилучшей, поскольку по умолчанию #includedirэто последняя запись sudoers.
Муру
0

В идеале, если вы настраиваете, какие команды можно запускать через, 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определить, какой будет наилучший префикс «последней» буквы.

dragon788
источник