С 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
visudo
ручные правки в этом файле, не были заданиями копирования-вставки, я набрал все как есть. Ноvisudo
редактирует ли другие файлы кроме этого? Это могло бы быть .../etc/sudoers.d/
, они могут быть/etc/sudoers
Ответы:
Это последовательность / порядок правил, которые вызвали это. Последнее правило имеет преимущество.
Чтобы решить вашу проблему, просто переместите линии,
из
sudoers
файла вЭто лучший подход, чем редактирование
sudoers
файла в текстовом редакторе. Если вы случайно вставили ошибки в файл, вы больше не сможете запускатьсяsudo
. Всегда используйтеvisudo
, чтобы синтаксис проверялся и вы получали предупреждения об ошибках!Ваша директива не работает, потому что она переопределена:
Если вы запустите
groups
команду, вы увидите, что ваш пользователь принадлежит к этим группам.источник
nn-somename
Например , имя файла должно соответствовать/etc/sudoers.d/20-myoverrides
Если myuser находится в группе sudo , то этот порядок строк не обеспечит беспарольный доступ (как отметил Флориан Диш), потому что 3-я строка переопределяет 1-ю.
Так что просто поместите строки в следующем порядке:
Под учетной записью myuser используйте,
sudo -l
чтобы проверить, какие разрешения есть у myuser .источник
Если для пользователя совпадают несколько записей, используется последняя . Так что, если
fizzbuzz
иchadmin
являются членами групп,admin
илиsudo
они все равно будут запрашивать пароль.Поместите две строки в конец
sudoers
файла после#includedir
строки.источник
#includedir
это последняя записьsudoers
.В идеале, если вы настраиваете, какие команды можно запускать через,
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, то, возможно, вы захотите создать их по имени для каждого пользователя, чтобы их было проще визуализировать. Имейте в виду, что порядок ИМЕН ФАЙЛОВ и ПРАВИЛ в файле очень важен, выигрывает ПОСЛЕДНЯЯ загрузка, независимо от того, разрешено ли оно БОЛЕЕ или МЕНЬШЕ, чем предыдущие записи.
Попробуйте запустить
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
определить, какой будет наилучший префикс «последней» буквы.источник