Назад | Перейти на главную страницу

как разрешить пользователю изменять настройки сети без прав администратора, изменение режима размещенной сети, runas

Я надеюсь сделать это возможным для обычных пользователей, без прав администратора, чтобы они могли переключить локальную беспроводную карту в размещенную сеть (режим Windows softAP).

команда netsh здесь ясна

netsh wlan set hostednetwork mode=allow ssid=$WLANSSID key=$WLANKEY 

поскольку я не хочу, чтобы пользователи могли устанавливать программное обеспечение, я не даю им прав локального администратора.

Я знаю, что есть несколько продуктов, которые шифруют пароли runas, но http://micksmix.wordpress.com/2013/03/20/capturing-credentials-from-encrypted-runas-software/ показывает, что интерфейс API Windows показывает пароли в открытом виде.

Я бы предпочел несколько идей :)

Похоже, это задание для диспетчера управления службами (SCM). SCM уже оборудован для безопасного хранения учетных данных и безопасного выполнения программ в контекстах, отличных от контекстов интерактивного пользователя. Пользователи, не являющиеся администраторами, не смогут получить доступ к учетным данным или напрямую взаимодействовать с контекстом безопасности, используемым для выполнения служб, но им будет разрешено запускать / останавливать службы, если у них есть разрешение.

Во-первых, важно знать, что вы жестяная банка запускать не обслуживающую программу как услугу. Будет сгенерировано сообщение об ошибке (и служба не покажет «Запущена»), но программа будет выполнена. В случае такой команды, как ваша netsh, который выполняется и немедленно завершается, запуск его как «службы» будет работать нормально, чтобы выполнить то, что вам нужно. (Более длинные команды будут проблематичными, потому что SCM в конечном итоге завершит их, если они не ответят должным образом.)

Я не тестировал это с netsh, но я использовал другую команду (net user bob /add), чтобы «доказать», что Service Control Manager.

  • Создайте сервис, который выполняет вашу команду: sc create ServiceName binPath= "netsh wlan set hostednetwork mode=allow ssid=$WLANSSID key=$WLANKEY"

  • Измените дескриптор безопасности службы, чтобы разрешить «Пользователям» запускать / останавливать службу (бесстыдно взято из другой ответ на ошибку сервера): sc sdset ServiceName D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWPDT;;;S-1-5-32-545)

  • Запустите службу как ограниченный пользователь. sc start SerivceName

Вы получите сообщение об ошибке 1053 «Служба не ответила на запрос запуска или управления своевременно». после в netsh команда выполняется и завершается. В netsh команда будет запущена в контексте безопасности СИСТЕМЫ.


Если вам нужно, чтобы пользователь мог взаимодействовать с командной строкой, это усложняется. Вероятно, вы могли бы написать какой-то сценарий в стиле барокко, чтобы пользователь мог указывать аргументы и, в свою очередь, считывать эти аргументы сценарием, который "служба" анализирует и передает в netsh. Однако вы должны быть очень осторожны, чтобы случайно не позволить ограниченному пользователю произвольно выполнять код как СИСТЕМУ при его построении.