Windows - Використовуйте обліковий запис Local Service та / або Network Service для служби Windows


18

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

Я вважаю, що сказане - це добре. Моє запитання: чи потрібно мені для папки, в яку я читаю і пишу, налаштувати роль "Мережева служба" з повним доступом до контролю? Мені цікаво, оскільки моя служба використовує підключення бази даних до іншого сервера, якщо мені знадобиться настройка облікового запису "Служба мережі".

Можливо, я не розумію, що робить обліковий запис "Мережева служба".

Відповіді:


18

Обліковий NT AUTHORITY\NetworkServiceзапис потрібен лише під час спілкування з іншими комп’ютерами в домені, який потребує облікових даних вашого пристрою для контролю доступу. Це не потрібно для простого доступу в Інтернет / мережу. Це потрібно лише для конкретних цілей у домені Active Directory.

Також вся суть NT AUTHORITY\LocalServiceоблікового запису полягає в тому, що він має мінімальні привілеї в системі. Надання більш привілейованого програмного забезпечення знижує безпеку багатьох служб у вашій системі, розроблених для роботи на низькому рівні привілеїв, на який вона розроблена. Якщо ваша послуга вимагає привілеїв, що перевищують ці, ви повинні створити новий обліковий запис для неї з необхідними привілеями та встановити цей обліковий запис на вкладці Вхід у систему властивостей служби. (Це також можна зробити програмно.)

Ви також можете запустити його за допомогою NT AUTORITY\LocalSystemоблікового запису , який має необмежений доступ до вашої системи, але я припускаю, що ви хотіли використовувати LocalServiceобліковий запис для підвищення захищеності, яку він надає.


1
Як би надання повного контролю обліковому запису LocalService в одній папці (і підпапках) знизила безпеку інших служб?
contactmatt

1
@ User19185 Це не зменшує їх безпеку як такі , але це дійсно піднімає профіль атаки. Якщо послуга, що працює як LocalServiceкомпрометована, вона матиме доступ до всього, що ви відкрили LocalService, тоді як зазвичай вона не матиме доступу до нічого. Це була стандартна операційна процедура комп'ютерної безпеки з 70-х років .
Патчі

1
Просто хочу зазначити, що LocalSystemмає більше прав та привілеїв, ніж звичайні облікові записи адміністратора.
Штейн Есмул

@Stein Åsmul: дякую за виправлення! Я оновив свою відповідь, щоб це відобразити.
Патчі

2

Попередня відповідь не з'явилася безпосередньо для вирішення питань, тому я подумав, що додам її.

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

Особисто я не бачу великого питання з цим планом. З BUILTINs вибір вибирається між:

  1. Працює як LOCALSYSTEM - тому, якщо ця послуга порушена, зловмиснику належить все , і негайно.
  2. Працює як LOCALSERVICE - тому якщо ця послуга або будь-яка з багатьох інших служб, що працюють під цим обліковим записом, порушена, зловмисник має доступ до однієї додаткової каталоги. *

Можливо, бажано додавати кілька додаткових ACL, щоб мати можливість використовувати другий варіант. Так, найбезпечнішим варіантом послуги з низькими привілеями, але дуже чутливою до безпеки, буде запуск у спеціально налаштованому обліковому записі служби з низькими привілеями. Але якщо ви не хочете створити новий обліковий запис / керувати паролями для кожної розгорнутої служби, використання LocalService для незначних нечутливих завдань - не така страшна річ. Вам просто потрібно прийняти відповідальне рішення, виходячи з цих міркувань, як, наприклад, те, що знаходиться в цьому каталозі чи цій базі даних, вплив, якщо вони порушені тощо.

Хоча знову ж таки, щонайменше, привілейований принцип, ви повинні встановлювати лише Full Controlякщо Modifyнасправді недостатньо.

2.Моє запитання, чи потрібно мені для папки, в яку я читаю і пишу, налаштувати роль "Мережева служба" з повним доступом до управління? Мені цікаво, оскільки моя служба використовує підключення бази даних до іншого сервера, якщо мені знадобиться настройка облікового запису "Служба мережі".

Якщо у вашій базі даних потрібен інтегрований вхід у систему Windows / SSPI, тоді так, вам потрібно буде використовувати NetworkService (або обліковий запис служби домену) скрізь, тобто дозволи дозволів RunAs та каталогів. Припустимо, що ви також надали ім’я комп’ютера $ або доменний обліковий запис до цієї бази даних. Я сумніваюся, що ви це робите, тому, якщо він використовує звичайну автентифікацію ім'я користувача / pwd, ви повинні мати можливість робити все з LocalService. Вам потрібно надати лише одне право облікового запису на цей каталог, що б ви не використовували у своїх RunA, а не обидва.

3.Я можу нерозуміти, що робить обліковий запис "Мережева служба".

LocalService / NetworkService - це майже однакові облікові записи на локальному комп'ютері. Різниця в основному полягає в тому, що вони можуть робити в мережі. NS може отримати доступ до деяких мережевих ресурсів, оскільки він відображається в мережі як реальний (комп'ютерний) рахунок. Але LS з'явиться як АНОНИМНИЙ, тому йому буде відмовлено здебільшого все в мережі.

До речі, ви повинні використовувати для цього заплановане завдання, а не послугу.

* З Vista і надалі через ізоляцію служби один компрометований процес LocalService не може легко атакувати інший. Кожен процес / екземпляр служби LocalService / NetworkService отримує власний унікальний SID сеансу входу (унікальний власник), на відміну від Windows 2003. Але я не впевнений, що це ідеально і повністю зменшує вразливість DACL щодо файлів та ресурсів. У цьому контексті згадуються обмежені SID та маркери з обмеженим записом .


2

Інші відповіді підтверджують те, що ви говорите про використання локальної служби. Підводячи підсумок, локальна служба - це рекомендований обліковий запис, який слід використовувати разом із вашою службою, якщо вам не потрібні додаткові функції SSPI Active Directory, що надаються в службі мережі.

Для обмеження доступу для читання / запису до певної папки ви можете зробити краще, ніж просто надати доступ до загального облікового запису локальної служби. Проблема, як зазначають інші, полягає в тому, що це також надасть доступ для читання / запису всім іншим службам, що працюють як локальна служба, і якщо всі сервіси зробили це, то поступово локальна служба отримає доступ до більш важливих ресурсів.

Рішення полягає в тому, щоб замість цього ACL папку використовували вашу конкретну службу SID. Тільки у вашому власному сервісному процесі пов’язано ваш SID служби, тому це ще більше блокує ваш ресурс. Ви можете переглянути службу SID за допомогою sc showsid <service name>. Службовий SID генерується від назви служби, тому він буде однаковим на всіх машинах.

Щоб увімкнути використання сервісу SID службою, скористайтеся ChangeServiceConfig2цією SERVICE_SID_INFOструктурою для встановлення SERVICE_SID_TYPE_UNRESTRICTED. Ви також можете встановити SERVICE_SID_TYPE_RESTRICTEDще більш обмежений SID, який дозволяє тільки записувати доступ до ресурсів, явно дозволених за допомогою SID служби.

Це посилання містить описи на високому рівні службових SID та обмежених служб SID: https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2008-R2-and- 2008 / hh125927 (v = ws.10)

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