как позволить пользователю изменить настройки сети без прав администратора, hostednetwork изменение режима, руны

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

команда netsh здесь является четкой

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

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

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

Я предпочел бы некоторые идеи :)

1
задан 14 November 2014 в 19:54
1 ответ

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

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

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

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

  • Изменить дескриптор безопасности сервиса, чтобы позволить "Пользователям" запускать/останавливать сервис (беззастенчиво взято из другого моего ответа Server Fault response): scdset 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 будет запущена в контексте безопасности SYSTEM.


Если вам нужно, чтобы пользователь мог взаимодействовать с командной строкой, то это усложняется. Возможно, вы могли бы написать какой-нибудь барочный скрипт, позволяющий пользователю указывать аргументы, и, в свою очередь, чтобы эти аргументы были прочитаны скриптом, который "service" разбирает и передает в netsh. Однако, при построении этого скрипта вы должны быть предельно осторожны и не позволять ограниченному пользователю произвольно выполнять код как SYSTEM.

.
1
ответ дан 4 December 2019 в 00:15

Теги

Похожие вопросы