Запуск OpenVPN у Windows без надання користувачам прав адміністратора
OpenVPN потребує привілеїв для адаптера й маршрутів, а не для всього. Використовуйте службу й делегуйте мережеві права, а потім перевірте з облікового запису користувача.
Користувач двічі клацає на OpenVPN GUI, підтверджує запит UAC і повторює той самий ритуал під час наступного перепідключення. Запит не є помилкою пакування: клієнт створює віртуальний адаптер і редагує таблицю маршрутизації, і обидва є привілейованими змінами. Корисне питання — які саме з цих прав користувачеві справді потрібні. Служба плюс вузьке делегування покривають з’єднання, не роздаючи членство адміністратора.
Які операції справді вимагають підвищення прав
Тунель завершується на віртуальному мережевому інтерфейсі, а встановлення цього інтерфейсу — операція драйвера, яка один раз вимагає прав адміністратора. Після появи адаптера кожне з’єднання все ще записує маршрути і залежно від профілю змінює конфігурацію DNS. Саме ці два кроки спричиняють підвищення прав у звичайному обліковому записі. Ніщо в автентифікації чи шифруванні не вимагає прав адміністратора, і саме тому привілей можна відокремити.
Відокремте час встановлення від часу підключення, перш ніж обирати дозвіл. У них різні власники й різний термін життя.
Використовуйте службу як привілейований компонент
Підтримувана схема запускає службу Windows, яка має потрібні права, а GUI просить службу підключитися. Тоді привілейований код ніколи не виконується в сеансі користувача.
sc query OpenVPNService
sc qc OpenVPNServiceПрацююча служба, шлях до виконуваного файлу якої вказує на встановлений клієнт, — це перший факт, який треба підтвердити, перш ніж щось делегувати. Служба володіє адаптером і маршрутами, тому користувач лише запускає й зупиняє з’єднання. Саме таку схему варто застосовувати на спільних машинах, бо обліковий запис, що клацає «підключитися», не має постійних привілеїв. Прочитайте дескриптор за допомогою sc sdshow перед редагуванням і збережіть відомо справну копію виводу.
Делегуйте зміни маршрутів вбудованій групі
Для клієнта, який має працювати інтерактивно, делегована вбудована група — Network Configuration Operators. Вона охоплює мережеві налаштування та зміни маршрутів, але виключає встановлення програм і загальну адміністративну роботу.
net localgroup "Network Configuration Operators" alice /add
sc sdshow OpenVPNServiceДодавання облікового запису не відбувається тихо: типові політики все ще викликають один запит за сеанс, тож дозвіл зменшує те, що може зробити підвищення прав, а не усуває його. Задокументуйте членство, бо воно тихо накопичується і майже ніколи не переглядається. На шляху через службу редагування дескриптора за допомогою sc sdset може делегувати запуск і зупинку групі, хоча друкарська помилка в дескрипторі може позбавити прав запуску кожен обліковий запис, а скасувати це може лише адміністратор. Перевіряйте будь-яку зміну дескриптора на лабораторній машині, перш ніж вона потрапить на виробничий хост.
Перевірте з облікового запису користувача
Конфігурація, виконана в сеансі адміністратора, нічого не доводить про обліковий запис, який нею користуватиметься. Увійдіть як цей користувач, підключіться й порівняйте стан машини до і після.
route print -4
Get-DnsClientServerAddressТаблиця маршрутизації має отримати маршрути тунелю, а розпізнавач під час підключення має вказувати на сервери, які надає VPN. Після відключення обидва виводи мають збігатися з копіями, знятими заздалегідь, і саме тому важливо зняти їх першими. Оновлення драйверів можуть повернути вимогу прав адміністратора, тож запишіть версію клієнта поруч із результатом. Тримайте файли профілю й ключів читабельними лише для облікового запису, який ними користується, замість того щоб послаблювати дозволи для спільного встановлення.
Запишіть, хто може запускати тунель, яка група це дозволяє і що все ще вимагає адміністратора. Ця нотатка перетворює наступне оновлення клієнта на планову роботу, а не на півдня здогадів.