Додавання NOPASSWD в / etc / sudoers не працює


45

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

Але я не думаю, що це має значення, тому що я поставив себе за "судора", правда?

Що ще важливіше, що мені потрібно зробити, щоб я міг працювати 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

Чи можете ви опублікувати свій файл судорів? Директива є правильною, але вона не може працювати через контекст.
Лети

Дякую @Letizia - будь ласка, дивіться моє оновлення, що-небудь вискочить у вас?
Зак

Напевно, я також повинен зауважити, що я не використовував, visudoоднак будь-які вручну редагування цього файлу не були завданнями копіювання-вставки, я вводив все як є. Але чи visudoредагує інші файли, окрім цього? Це може бути все ...
Зак


Також перевірте будь-які файли в /etc/sudoers.d/них, можливо, вони будуть переважати речі з/etc/sudoers
tokland

Відповіді:


68

Це стало причиною послідовності / впорядкування правил. Останнє правило бере перевагу.

Щоб виправити свою проблему, просто перемістіть свої лінії,

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
умові

Так, звичайно, якщо у вас є більше одного файлу, вони розбираються в упорядкованому лексичному порядку, тому корисно використовувати число, і це замовлення буде легко дізнатися.
Лети

21

Якщо MyUser знаходиться в SUDO групи, то цей порядок рядків не надаватиме доступ без пароля (як зазначено Флоріан Diesch), тому що третя лінія перекриває 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 .


10

Якщо для користувача кілька записів відповідають останнім , використовується останній . Тож якщо 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визначити, який найкращий "останній" буквений лист буде використаний.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.