Я ожидаю позволять обычным пользователям без прав администратора, так, чтобы они могли переключить локальную беспроводную карту на 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 окон показывает пароли в виде открытого текста.
Я предпочел бы некоторые идеи :)
Похоже на работу менеджера управления службами (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.