Чи є хорошою практикою запускати демон під некористувальним обліковим записом користувача?


13

Я розробив додаток, який використовує NTP для зміни часу в мережі, для синхронізації двох моїх комп'ютерів. Він працює як root, оскільки лише останнім дозволяється змінювати час і дату в Linux (я думаю).

Тепер я хочу запустити його як користувач. Але мені потрібно отримати доступ до часу.

  • Чи є хорошою практикою запускати демон під некористувальним обліковим записом користувача?
  • Чи потрібно надавати моїй програмі такі можливості , як CAP_SYS_TIME?
  • Чи не вводиться вразливість безпеки?
  • Чи є кращий спосіб?

Зазвичай демон NTP повинен працювати як ntpобліковий запис користувача (принаймні, в системах Linux), тому від вас не потрібно вимагати цих змін. Який пакет NTP ви встановили?

6
Запуск демона під некореневим обліковим записом називається "випаданням привілеїв root" і є загальновідомою хорошою практикою, оскільки обмежує можливі пошкодження вразливості безпеки в демоні.

1
Дивіться у Вікіпедії "Розділ привілеїв ".
Kusalananda

Я склав NTP з джерел. У мене немає групи NTP
Anonymous12223,

@xhaltar Можна створити групу та користувача NTP. Для налаштування запуску послуги (користувача, групи тощо) ви можете створити / відредагувати скрипт служби init, або створити / налаштувати системний блок.
Pl4nk

Відповіді:


15

Чи є хорошою практикою запускати демон під некористувальним обліковим записом користувача?

Так, і це звичайне. Наприклад, Apache запускається як root, а потім передає новий процес у вигляді www-data (за замовчуванням).
Як було сказано раніше, якщо ваша програма зламана (наприклад: введення коду), зловмисник не отримає кореневого доступу, але обмежиться привілеями, які ви надали цьому конкретному користувачеві.

Чи повинен я надати "Здатність", наприклад "CAP_SYS_TIME"?

Це ідея хороша , так як ви не використовувати УИП і граничні вирішення цієї вельми специфічної здатності.

Чи повинен я використати інший спосіб зробити так, щоб це вважалося "хорошою практикою"?

Ви можете збільшити безпеку, наприклад:

  • Запускайте послугу як непривілейований користувач, без оболонки.
  • Використовуйте chroot, щоб заблокувати користувача в його домашній каталог.

Примітка: Chroot не забезпечує захисту, якщо ви користуєтеся root і працюєте в Linux. Користувач root може створити каталог у chroot, відкрити кореневий каталог chroot, chroot до нового каталогу, chdir повернути його назад до реального кореня, а потім chroot до реального кореня. BSD виправляє це, забороняючи приймати директорію fd's в chroot.
Кевін

@Kevin Якщо ви root, ви можете також відстежувати процеси поза chroot, і існує багато інших способів його обійти. Простий chroot не може вкоренитися.
Жил "SO- перестань бути злим"

//, emp.jar.st фактично створює користувача з міркувань безпеки. Дуже хороша практика.
Натан Басанес

Зачекайте, якщо я КОРИСТУВАЧ, чи можу я заблокувати USER у конкретній директорії? Такі як "/ opt" (наприклад)?
Anonymous12223

@xhaltar Щоб заблокувати процес, запущений USERу каталог, ви використовуєте chroot(запустіть його як root користувача). Однак ви повинні створити та ініціалізувати в'язницю (каталог) раніше. Коротше кажучи, ви повинні помістити в цю в'язницю бібліотеки та бінарні файли, потрібні вашому процесу, а потім зателефонувати chroot <path/to/jail> <command>. Хороший підручник з деякими потрібними вам прикладами доступний тут
Pl4nk

13
  • Чи повинен я використати інший спосіб зробити так, щоб це вважалося "хорошою практикою"?

Якщо у вас немає серйозних, неспростовних причин інакше, вам слід просто скористатися пакетом NTP, який постачається з вашим дистрибутивом GNU / Linux. Стандартному демону NTP потрібні роки, щоб дозріти, і вдосконалені функції, такі як уповільнення або пришвидшення годинника вашої системи, щоб синхронізуватися з мережею або GPS-годинником. Він був розроблений для синхронізації годин, тому, швидше за все, це найкращий інструмент для цієї мети.

ntpdдосі зберігається, судячи з останніх оновлень (станом на написання цієї публікації). Якщо вам потрібні додаткові функції, я б радив вам зв’язатися безпосередньо з розробниками, довіряйте, що вони мають сказати з цього приводу.


5

Якщо у вас є програма, яка повинна вміти виконувати функцію X (наприклад, маніпулювати годинником), і ви можете надати їй привілей / владу виконувати функцію X і більше нічого, це краще, ніж надати їй всю банку алфавіту суп. Це відомо як принцип найменшої пільги . Подумайте, що робити, якщо у вашій програмі є помилка - або звичайна помилка програмування, або вразлива вразливість безпеки. Якщо він працює як "root", він може видалити всі файли - або надіслати їх зловмиснику. Якщо єдине, що може зробити програма, - це маніпулювати годинником (і непривілейованими функціями, як-от маніпулювання файлами у замкнутому каталозі), то це найгірше, що може статися, якщо програма перейде в шахрайство.

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