Почему опция sudoers NOPASSWD не работает?

75

У меня есть строка NOPASSWD в / etc / sudoers (отредактировано с помощью visudo)

gatoatigrado    ALL=(ALL) NOPASSWD: /bin/set-slow-cpufreq

Тем не менее, выход

gatoatigrado@coral:~> sudo -n /bin/set-slow-cpufreq
sudo: sorry, a password is required to run sudo

Этот вид команды работает на машине OpenSuSE, но не на Ubuntu 11.10. Что я делаю неправильно?

Примечание : я не могу найти соответствующие сообщения системного журнала, например, через tail -f /var/log/syslog.

редактировать

Вот / etc / sudoers.

Defaults    env_reset

# things I've tried copying from an opensuse machine
Defaults always_set_home
Defaults env_keep = "LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS XDG_SESSION_COOKIE"

root    ALL=(ALL:ALL) ALL
gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq
%admin ALL=(ALL) ALL
%sudo   ALL=(ALL:ALL) ALL
gatoatigrado
источник
2
Можете показать в полном объеме sudoers, порядок правил не имеет значения.
энзотиб

Ответы:

118

Вы должны поставить эту строку после строки с правилом для sudoгруппы, потому что, как sudoersговорится на странице руководства :

   When multiple entries match for a user, they are applied in order.
   Where there are multiple matches, the last match is used (which is not
   necessarily the most specific match).
enzotib
источник
5
в качестве дополнительного примечания, это также относится к пользователям в нескольких группах: например, пользователь в группе admin и группе sudo, если правило для sudo следует после admin, тогда правило для sudo переопределяет правило для admin для пользователя в обеих группах.
Populus
2
Спасибо! Я добавил свою строку в конец, /etc/sudoersи теперь она работает. Полное объяснение здесь для людей, которые заинтересованы: techglimpse.com/ubuntu-sudoers-nopasswd-option-not-working
elimisteve
4

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

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

Вставьте свою строку, предоставив разрешение: gatoatigrado ALL=NOPASSWD: /bin/set-slow-cpufreq

Затем сохраните и выйдите, и 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
источник
Я согласен с этим. Некоторая логика в редактировании файла / etc / sudoers казалась нелогичной - я не мог заставить% wheel ALL = (ALL) NOPASSWD: ALL работать так, как это было написано в sudoers, пока я не прочитал пост, где кто-то сказал #includedir Строка /etc/sudoers.d должна быть перед другими строками, такими как% SUDO и% WHEEL. Когда я поставил каталог #include выше разрешений других групп, они начали работать. Затем я сделал файлы для каждой группы в /etc/sudoers.d/, пронумерованные в том же порядке, в каком они были в файле sudoers, но root ALL = (ALL) ALL должен был оставаться sudoers ниже строки #includedir. Weird.
AveryFreeman
На самом деле я думаю, что включенный в список должен остаться в конце sudoers. Вероятно, вы видели, что один из других файлов в вашем sudoers.d отменял ваши изменения. Возможно, в вашем главном файле также была строка ниже, которая ограничивала группу колес. Имейте в виду, что sudoers обрабатывается там, где побеждает последнее правило, применяемое к команде или группе, поэтому более конкретная помощь помогает, но если общая ЛЮБАЯ команда приходит в конце и не имеет NOPASSWD, она переопределит ваши предыдущие исключения. Вот почему у вас должны быть свои правила в отдельных файлах, чтобы они обрабатывались позже.
dragon788
Я так не думаю, это была новая установка арки. Все, что я сделал, это попытался и раскомментировал эту строку. Но это определенно хорошая вещь для проверки, спасибо.
AveryFreeman
Некоторые системы на самом деле не используют wheel и вместо этого используют группу под названием sudo, adm или admin. Я не могу вспомнить поведение Арки, но вы можете запустить idи посмотреть, к каким группам вы принадлежите.
dragon788
Арка использует колесо.
AveryFreeman
4

Просто столкнулся с этим тоже.

Моя ситуация - я настраиваю удаленную систему, которая будет работать без головы. Я включил полное шифрование диска (в противном случае злоумышленник с физическим доступом может делать все, что он хочет). Я хочу авторизоваться только с ключом публикации (я удалю пароль, чтобы схема «есть что-то, знаю что-то» была паролем. Защищенная пара ключей - рут-логин, конечно, полностью отключен)

Установщик Ubuntu запрашивает администратора без полномочий root, который добавляется в группу sudo. Затем я вручную добавил себя в sudoersфайл, используя sudo visudo:

my_username ALL=(ALL:ALL) NOPASSWD:ALL

ПРИМЕЧАНИЕ: если вы используете nopasswd на своем ноутбуке, вы всегда должны блокировать свой компьютер, когда уходите, иначе случайный злоумышленник может пойти на компромисс, когда вы встаёте, чтобы положить сливки в кофе.

Я все еще должен был подтвердить пароль.

Ответ Энзотиба является ключом к тому, что происходит. Группа sudo отображается в sudoers после ввода моего имени пользователя.

Вместо того, чтобы перемещать свою запись ниже строки sudo, я просто удалил строку, которую я ранее добавил, а затем добавил NOPASSWDк записи для%sudo

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

Дополнительное ПРЕДУПРЕЖДЕНИЕ. Всегда редактируйте sudoers с помощью visudo. (sudo visudo) Кроме того, открыв другое окно, переключенное на пользователя root, вы сможете исправить любые ошибки, которые вы можете сделать при изменении файла sudoers.

jorfus
источник
Никогда не стоит включать NOPASSWD для любых / всех команд, это означает, что любой, кто попадет в вашу систему и сможет включить пользователя в группу sudo, сможет ОЧЕНЬ быстро сделать НИЧЕГО ПЛОХОЕ для вашей системы. Я легко могу сделать это всего за несколько минут доступа с использованием LiveCD или путем обмана вашего пользователя для запуска вызываемого cmd, sudoкоторый использует ваши собственные разрешения для добавления другого пользователя в группу sudo в дополнение к выполнению запрошенной команды.
dragon788
2
Не делайте таких заявлений. В безголовой системе вообще нежелательно устанавливать пароль для входа в систему (вместо этого вместо пар ключей). Я включил полное шифрование диска, так что удачи с этим live cd. (что, кстати, позволило бы вам делать всякие забавные вещи в незашифрованной системе независимо от файла sudoers) Также вы не можете писать ни в одно из мест в моем PATH, и я не дам вам оболочку для начала если я не верю, что вы не пытаетесь подорвать систему. Ваша проблема безопасности не является недействительной, она просто устарела и не так универсально применима, как вы предполагаете.
Йорфус
Для тех, у кого нет глубокого понимания безопасности, как вы, такая рекомендация, вероятно, лучше, чем альтернатива, но я согласен, что она не идеальна.
dragon788
@ dragon788 Правда, может быть, мы можем отредактировать наши ответы, чтобы помочь пользователям всех уровней сделать шаг к повышению безопасности. Я добавлю предупреждение, чтобы включить полное шифрование диска, чтобы предотвратить компрометацию, когда злоумышленник имеет физический доступ, и примечание, что, если пользователь ноутбука забывает публично заблокировать свой компьютер, sudo nopasswd может привести к быстрому компрометации. (Хотя я бы предложил установить быструю клавишу блокировки на пять минут и блокировки экрана, это на самом деле может привести к повышению безопасности.)
jorfus
Отличное обновление, мой ответ не содержит каких-либо сильных рекомендаций, кроме этих комментариев, и, как ни странно, на работе, где я использую полное шифрование диска, я в итоге включил NOPASSWD, потому что у меня есть очень безопасный пароль, который становится неудобным для ввода несколько раз, и я использую xautolock для блокировки машины после короткого простоя.
dragon788
0

В удаленной системе сбросьте шифрование, но пусть все будет принадлежать руту, как в группе «Администраторы» - это не 0!
Вы можете изменить #sudo -g Administrators те, кому нужен полный доступ - не в sudo файле, а в .loginпрофиле. Любой стандартный скрипт теперь может иметь доступ к удаленному компьютеру как «root», и вы можете защитить файлы, которые должны быть защищены.
Другая удобная «группа» - это «Песочница» с каталогом входа в кеш браузера и может читать это свободно и ничего больше. Используйте верхний регистр первого символа.

Кнут Н
источник