Есть такая замечательная софтинка в том числе и под Windows — OpenVPN. Скажем прямо, я совершенно искренне считаю, что ничего лучше для решения данного класса задач пока ещё ничего не придумали. Её авторы — огромные молодцы. Но как всегда, малину портит Microsoft. Затык в том, что изначально OpenVPN является обычным UserSpace-приложением. И если оно хочет автоматически прописать временные статические маршруты куда-нибудь во вражескую сеть через свежеподнятый линк, ему для этого снова нужны... правильно, повышенные привилегии. То есть "из коробки" из-под обычного пользователя работать не будет, ага.
Воодушевившись "успехом" бодания с 1С-кой из предыдущего псто, я решил пойти тем же путём имени Microsoft Application Compatibility Toolkit. И с удивлением обнаружил, что ничего не получается. Привилегии благополучно выдаются, только вот чтобы прописать маршруты, прав у приложения всё равно почему-то не хватает.
Интенсивное гугление показало, что народ решает эту задачу в основном четырмя разными способами.
- При помощи сторонней утилиты "SuRun". Преимущества: относительно простое и универсальное решение. Недостатки: есть некоторые вопросы по части безопасности и по стабильности работы.
- Добавляет пользователя в локальную группу "Операторы настройки сети" (сорри, нет английской винды под рукой чтоб посмотреть как она называется там). Преимущества: просто, быстро, штатно. Недостатки: пользователю в момент запуска программы приходится ещё раз вводить свой собственный пароль. Некоторых этот момент может сильно обескураживать (да-да, хороший админ должен в своей работе ориентироваться на среднестатистического идиота, не в обиду пользователям будь сказано).
- Создать Task во встроенном виндовом Scheduler-е, выполняемый по событию входа пользователя в систему, который будет запускать нужную софтину из-под желаемого пользователя. Достоинства: прозрачное красивое штатное решение. Недостатки: пароль привилегированного пользователя может поменяться, тогда всё отвалится; если пользователь случайно закроет программу, ему придется делать logoff→logon чтобы запустить её снова; возможны злоупотребления со стороны пользователей в отдельных ситуациях.
- Запускать OpenVPN как сервис, разрешить непривилегированному пользователю осуществлять его пуск-останов. Достоинства: не страдает безопасность, для пользователя всё происходит полностью прозрачно. Недостатки: способ годится только для программ, способных работать как служба (либо надо городить "обёртку"); накладывается ряд ограничений, связанных с запуском приложения как службы (ряд полезных фич OpenVPN-а сразу становится недоступным).
Лично я для решения своей задачи пошел последним, четвёртым путём. Конкретно в моём случае я расценил его наиболее оптимальным. Для этого нужно.
- Скачать с офсайта мелгомягких утилитку под названием "SubInACL" и установить её (либо скопировать exe-шник).
- Выдать нужному пользователю либо сразу встроенной группе "Пользователи" права на запуск-останов службы командой
subinacl /SERVICE "OpenVPNService" /GRANT=Пользователи=TO
где "Пользователи" — логин пользователя либо название группы, "TO" означает выдаваемые разрешения (пуск, стоп). - Установить ключ реестра
HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN-GUI\service_on ly
равным единице.
После проведения таких манипуляций пользователь сможет как обычно запускать OpenVPN GUI, но пункты меню "подключиться—отключиться" будут работать как "запустить службу", "остановить службу". Никаких паролей при этом у него запрошено не будет. Разумеется, всё то же самое можно будет проделать как руками через оснастку "services.msc", так и консольными командами типа "sc start OpenVPNService".
Но вообще, меня такой подход Microsoft-а и раздражает, и расстраивает одновременно. В *NIX-подобных системах каждое устройство (нода) — это обычный файл. Раздал права всем кому нужно куда нужно и не паришься. На крайний случай есть тот же sudo и параметр "NOPASSWD" в конфигах последнего. А тут какая-то мутотень. Вроде у тебя привилегии и есть, а параметры сети поменять всё равно не можешь. А если ты находишься в группе, обладающей правом настройки сети, то тебе всё равно приходится каким-то хитропопым способом запускать софт и зачем-то заново вводить собственный же пароль. И где логика, спрашивается? Вот и приходится изворачиваться нетрадиционными способами, скачивать какие-то утилиты, лазить в реестр. Тьфу!
Очередная порция ненависти к Microsoft-у сгенерирована и выплеснута.