klink0v (klink0v) wrote,
klink0v
klink0v

Пляски с повышением привилегий в Windows. Часть 2: OpenVPN

Есть такая замечательная софтинка в том числе и под Windows — OpenVPN. Скажем прямо, я совершенно искренне считаю, что ничего лучше для решения данного класса задач пока ещё ничего не придумали. Её авторы — огромные молодцы. Но как всегда, малину портит Microsoft. Затык в том, что изначально OpenVPN является обычным UserSpace-приложением. И если оно хочет автоматически прописать временные статические маршруты куда-нибудь во вражескую сеть через свежеподнятый линк, ему для этого снова нужны... правильно, повышенные привилегии. То есть "из коробки" из-под обычного пользователя работать не будет, ага.

Воодушевившись "успехом" бодания с 1С-кой из предыдущего псто, я решил пойти тем же путём имени Microsoft Application Compatibility Toolkit. И с удивлением обнаружил, что ничего не получается. Привилегии благополучно выдаются, только вот чтобы прописать маршруты, прав у приложения всё равно почему-то не хватает.

Интенсивное гугление показало, что народ решает эту задачу в основном четырмя разными способами.


  1. При помощи сторонней утилиты "SuRun". Преимущества: относительно простое и универсальное решение. Недостатки: есть некоторые вопросы по части безопасности и по стабильности работы.

  2. Добавляет пользователя в локальную группу "Операторы настройки сети" (сорри, нет английской винды под рукой чтоб посмотреть как она называется там). Преимущества: просто, быстро, штатно. Недостатки: пользователю в момент запуска программы приходится ещё раз вводить свой собственный пароль. Некоторых этот момент может сильно обескураживать (да-да, хороший админ должен в своей работе ориентироваться на среднестатистического идиота, не в обиду пользователям будь сказано).

  3. Создать Task во встроенном виндовом Scheduler-е, выполняемый по событию входа пользователя в систему, который будет запускать нужную софтину из-под желаемого пользователя. Достоинства: прозрачное красивое штатное решение. Недостатки: пароль привилегированного пользователя может поменяться, тогда всё отвалится; если пользователь случайно закроет программу, ему придется делать logoff→logon чтобы запустить её снова; возможны злоупотребления со стороны пользователей в отдельных ситуациях.

  4. Запускать OpenVPN как сервис, разрешить непривилегированному пользователю осуществлять его пуск-останов. Достоинства: не страдает безопасность, для пользователя всё происходит полностью прозрачно. Недостатки: способ годится только для программ, способных работать как служба (либо надо городить "обёртку"); накладывается ряд ограничений, связанных с запуском приложения как службы (ряд полезных фич OpenVPN-а сразу становится недоступным).

Лично я для решения своей задачи пошел последним, четвёртым путём. Конкретно в моём случае я расценил его наиболее оптимальным. Для этого нужно.


  • Скачать с офсайта мелгомягких утилитку под названием "SubInACL" и установить её (либо скопировать exe-шник).

  • Выдать нужному пользователю либо сразу встроенной группе "Пользователи" права на запуск-останов службы командой

    subinacl /SERVICE "OpenVPNService" /GRANT=Пользователи=TO

    где "Пользователи" — логин пользователя либо название группы, "TO" означает выдаваемые разрешения (пуск, стоп).

  • Установить ключ реестра

    HKEY_LOCAL_MACHINE\SOFTWARE\OpenVPN-GUI\service_only

    равным единице.

После проведения таких манипуляций пользователь сможет как обычно запускать OpenVPN GUI, но пункты меню "подключиться—отключиться" будут работать как "запустить службу", "остановить службу". Никаких паролей при этом у него запрошено не будет. Разумеется, всё то же самое можно будет проделать как руками через оснастку "services.msc", так и консольными командами типа "sc start OpenVPNService".

Но вообще, меня такой подход Microsoft-а и раздражает, и расстраивает одновременно. В *NIX-подобных системах каждое устройство (нода) — это обычный файл. Раздал права всем кому нужно куда нужно и не паришься. На крайний случай есть тот же sudo и параметр "NOPASSWD" в конфигах последнего. А тут какая-то мутотень. Вроде у тебя привилегии и есть, а параметры сети поменять всё равно не можешь. А если ты находишься в группе, обладающей правом настройки сети, то тебе всё равно приходится каким-то хитропопым способом запускать софт и зачем-то заново вводить собственный же пароль. И где логика, спрашивается? Вот и приходится изворачиваться нетрадиционными способами, скачивать какие-то утилиты, лазить в реестр. Тьфу!

Очередная порция ненависти к Microsoft-у сгенерирована и выплеснута.

Tags: windows, администрирование
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 0 comments