Чому система має /etc/sudoers.d? Як слід редагувати його?


48

Востаннє я запитав про ризик цих (у / etc / sudoers):

    user_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf
    %group_name ALL=(ALL) /usr/bin/vim /etc/httpd/confs/httpd.conf

Поки я думав над цією проблемою, я знайшов /etc/sudoers.d каталог. Файли в каталозі повинні мати функції, подібні до / etc / sudoers (тобто вищезазначені сценарії залишаються проблематичними навіть у /etc/sudoers.d), проте одна стаття сказала, що ми не повинні використовувати каталог, оскільки ми не можемо використовувати visudoдля редагування файлів у це. Тобто ми втрачаємо право на використання, sudoякщо помилимося в каталозі.

Якщо це правда, чому ми маємо /etc/sudoers.d ? Або у нас є гарний спосіб редагувати файли в /etc/sudoers.d ?

Відповіді:


45

Зміни, внесені до файлів, /etc/sudoers.dзалишаються в силі, якщо ви оновите систему. Це може запобігти блокування користувачів під час оновлення системи. Ubuntu схильна до подібної поведінки. Інші дистрибутиви також використовують цей макет.

З мого досвіду, правила щодо файлів у цьому каталозі втрачають більше ніж для /etc/sudoers. Сюди входить:

  • Помилки у файлі не спричинили sudoзбій. Однак файл було проігноровано.
  • Правила дозволу видаються менш суворими. Це дозволяє застосованій групі чи іншим читати файл. Я не вірю, що це було можливо /etc/sudoers. rootДля забезпечення безпеки потрібно обмежувати дозволи на запис . Поточна версія sudo Ubuntu дозволяє дозволу читання для групи або інших. (Ця можливість дозволяє перевіряти доступ sudo, використовуючи без кореневого доступу.)

visudoКоманда тільки по замовчуванням /etc/sudoers. Він буде редагувати та перевіряти будь-який файл, який ви вказали за допомогою -fпараметра. Я використовую цю можливість для редагування файлів, які будуть автоматично встановлені як /etc/sudoersабо в /etc/sudoders.d. Однак визначень з інших файлів можливо не знайти. Найкраще зробити файл незалежним.

Можливість мати окремі файли спрощує додаток, щоб включити sudoможливість встановлення та видалити їх, коли він не встановлений. Автоматизовані засоби конфігурації також можуть використовувати цю можливість.

Я використав цю можливість для виділення змін, необхідних для надання доступу до певних груп користувачів у конкретних системах.


1
Дві риси sudoers.d, які ви згадали, здаються дуже важливими та корисними. Дякую!
aob

Дивіться мою відповідь та попередження про те, чому це насправді не риси sudoers.d.
dragon788

1
Категорично не погоджуйтеся з твердженням "Помилки у файлі не спричинили sudoпомилку". Я зламав sudo на RHEL з неправильним синтаксисом у файлі з /etc/sudoers.d. Це вимагало значних зусиль для виправлення, і я думаю, що рекомендується завжди використовувати visudo -fдля редагування цих файлів.
79E09796

@ 79E09796 Я зламав файли в /etc/sudoers.d, не викликаючи проблем з правилами в інших файлах. YMMV. Якщо ви порушите конфігурацію sudo, яка потрапляє в систему, у вас виникнуть проблеми. Якщо у вас є доступ до перезавантаження системи, порівняно легко перезавантажитись у режимі відновлення та виправити файл. Я погоджуюся, що найкраще застосовувати visodo для редагування або принаймні перевірки змін у файлах конфігурації sudo.
BillThor

62

Так, ви можете використовувати visudoдля редагування цих файлів. Все, що вам потрібно зробити, це вказати ім'я файлу, який ви хочете відредагувати за допомогою -fпараметра. Наприклад:

visudo -f /etc/sudoers.d/somefilename

Або, якщо потрібно:

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

Документація

Від man visudo:

-f sudoers
Вкажіть та альтернативне розташування файлів sudoers. За допомогою цієї опції visudo редагує (або перевіряє) файл судорів на ваш вибір, а не типовий параметр / etc / sudoers. Використовуваний файл блокування - це вказаний файл судорів із доданим до нього ".tmp". Тільки в режимі перевірки аргументом до -f може бути "-", що вказує на те, що судери будуть зчитуватися зі стандартного вводу.

Підсумовуючи:

  1. Синтаксис: Обидва visudoі visudo -f виконує ту ж перевірку синтаксису .

  2. Дозволи / власність: як додана функція для адміністрування великих систем , відредаговані файли visudo -fне перевіряються на власність чи дозволи: це дозволяє перевірити синтаксис файлу в автономному режимі або як частину системи контролю ревізії.

Навіщо використовувати /etc/sudoers.d/

Зазвичай /etc/sudoersзнаходиться під контролем менеджера пакунків вашої дистрибуції. Якщо ви внесли зміни до цього файлу, і менеджер пакунків хоче оновити його, вам доведеться вручну перевірити зміни та затвердити спосіб їх об'єднання в нову версію. Розміщуючи локальні зміни у файлі в /etc/sudoers.d/каталозі, ви уникаєте цього кроку вручну, і оновлення може продовжуватися автоматично.

Коли sudoігнорується файл у /etc/sudoers?

Якщо ваш /etc/sudoersфайл містить рядок:

#includedir /etc/sudoers.d

потім sudoбуде читати файли в каталозі /etc/sudoers.d.

Винятки становлять:

  1. Файли, імена яких закінчуються на ~
  2. Файли, імена яких містять .символ

Це робиться (a) для зручності менеджерів пакунків, а також (b), щоб ігнорувати файли резервного копіювання з редакторів.


Дякую, але в мене є одне сумніви. Чи visudo -fбезпечно?
aob

5
Так, visudo -fредагування в безпечному режимі так само, як звичайне visudo. Ось чому ми маємо visudoі чому він пропонує такий -fваріант.
John1024

Прекрасна примітка про те, як дозволи ігноруються при використанні, -fоскільки це може байт того, хто потім копіює його в /etc/sudoers.d/, не перевіряючи їх двічі.
dragon788

1
ДЯКУЙТЕ за розділ про винятки. Я назвав свій файл чимось на зразок /etc/sudoers.d/mysudorules.sudoі не міг за все життя зрозуміти, чому правила всередині не застосовувалися, перш ніж читати вашу відповідь.
Зарот

1
Дякуємо, що згадали про винятки. Мій файл в розділі /sudoers.d/mysite.co.ukне працював і після перейменування на mysiteнього працює! :)
J86

20

чому ми маємо /etc/sudoers.d?

Оскільки автоматизовані інструменти (наприклад, шеф-кухар чи лялька) простіше /etc/sudoersвводити окремі файли в цей каталог, а не вносити зміни , які можуть бути крихкими.

Файли в /etc/sudoers.d(фактично) об'єднані. Ви побачите кілька інших примірників цього шаблону /etc, таких як /etc/cron.dі /etc/logrotate.d.


Я не знав, що є інші подібні каталоги. Дякую.
аоб

14

Ще одна перевага використання, visudo -fяк згадується в деяких відповідях, - це відповідна опція -cабо --checkте, що підтверджує, що у вас немає недійсної інформації у файлі sudoers.d або будь-якому іншому файлі, який ви можете ввести у sudoers.d. Це дійсно зручно у випадках, згаданих з автоматизованими інструментами, як можна запустити, наприклад

sudo visudo -c -q -f /home/myuser/mysudoers && \
sudo chmod 600 /home/myuser/mysudoers && \
sudo cp /home/myuser/mysudoers /etc/sudoers.d/mysudoers

Це мовчки перевіряє файл (немає результату через -q), і лише якщо це НЕ повертає помилку (вихід 1 означає недійсний файл судорів), тоді він скопіює файл у sudoers.d, таким чином ви зможете створити файл і працюйте над ним, не встигаючи правильно вперше (використання sudo visudo -f /etc/sudoers.d/myfileмає бути успішним, або він відкидає вміст, якщо ви не виправите його).

Також слово обережності щодо цих тверджень з інших відповідей.

Мій досвід вважає, що правила щодо файлів у цьому каталозі більш вільні, ніж для / etc / sudoers. Сюди входить:

Помилки у файлі не спричинили збій судо. Однак файл було проігноровано. Правила дозволу видаються менш суворими. Я дозволяю застосованій групі прочитати файл. Я не вірю, що це можливо з / etc / sudo.

Файли в /etc/sudoers.d повинні дотримуватися того ж синтаксису, що і / etc / sudoers, тому що під кришками система просто об'єднує всі файли з останнім у "виграші", якщо є кілька записів для одного і того ж особлива обстановка.

Якщо дозволи у файлах /etc/sudoers.d/ дозволу невірні (для запису в усьому світі), то вони ігноруються, це може спричинити занедбаність недійсних файлів sudo. d файл з правильними дозволами.

Ви можете дозволити файлам sudoers бути читаними у всьому світі, якщо ви випадково дозволите "іншим" дозвіл на запис, який вам потрібно, щоб sudo як інший користувач, або з кореневого терміналу, запустіть цю команду. Це також може порушитися, якщо файл належить комусь, крім root: root.

sudo chmod 644 /etc/sudoers.d/mysudoers
sudo chown root:root /etc/sudoers.d/mysudoers

Я щойно підтвердив, що якщо я запускаюсь, chmod o+w /etc/sudoers.d/vagrantя більше не можу користуватися судом як бродячий користувач, він запросить мене на пароль і потім вийде з ладу.

Коли я побіг sudo -lпереглядати застосовані дозволи команд як іншого дійсного користувача sudo, мені також надійшло попередження про дозволи файлів. Це та сама команда, яку я використовував для підтвердження того, що "бродячий" користувач втратив sudo, коли я застосував o+wдозволи до файлу, що дав цьому дозволу користувач sudo.


3

Лише короткий доповнення до будь-якої загальної відповіді ... жодна з інших відповідей не вирішила мого питання, а це було значення порядку.

Якщо ваші рядки працюють у sudoers, але не sudoers.d, спробуйте перемістити #include навколо або змінити порядок файлів sudoers.d (за допомогою префіксації цифрою). Здається, що саме конкретне має бути спочатку у файлі.

У мене було щось на кшталт:

somebody ALL=(ALL): somecommand
somebody ALL=(someoneelse) NOPASSWD: somecommand

А 2-й не мав ефекту, тому що перший вже відповідав. NOPASSWD - це не умова, а певний спосіб змінити дію.

І це було не очевидно, оскільки його не було в одному файлі, через каталог sudoers.d.

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