Isso parece um trabalho para o Gerenciador de controle de serviços (SCM). O SCM já está equipado para armazenar credenciais com segurança e executar programas com segurança em contextos diferentes do usuário interativo. Os usuários que não são administradores não poderão acessar as credenciais ou interagir diretamente com o contexto de segurança usado para executar serviços, mas terão permissão para iniciar / parar serviços se tiverem permissão.
Primeiro, é importante saber que você pode executar um programa sem serviço como um serviço. Ele gerará uma mensagem de erro (e o serviço não mostrará "Iniciado"), mas o programa será executado. No caso de um comando como seu netsh
, que é executado e sai imediatamente, executá-lo como um "serviço" funcionará muito bem para realizar o que você precisa. (Comandos de execução mais longa seriam problemáticos porque o SCM acabaria com eles quando não respondessem adequadamente.)
Eu não testei isso com netsh
, mas usei outro comando ( net user bob /add
) para "provar" que o Service Control Manager.
-
Crie um serviço que execute seu comando:
sc create ServiceName binPath= "netsh wlan set hostednetwork mode=allow ssid=$WLANSSID key=$WLANKEY"
-
Modifique o descritor de segurança no serviço para permitir que "Usuários" iniciem / interrompam o serviço (descaradamente retirados de outra resposta de falha de servidor minha ):
sc sdset ServiceName D:(A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA)(A;;CCLCSWLOCRRC;;;AU)(A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;RPWPDT;;;S-1-5-32-545)
-
Inicie o serviço como usuário limitado.
sc start SerivceName
Você receberá um erro 1053 "O serviço não respondeu à solicitação de início ou controle em tempo hábil." após o comando netsh
é executado e finalizado. O comando netsh
será executado em um contexto de segurança do sistema.
Se você precisar que o usuário interaja com a linha de comando, isso fica mais complicado. Você provavelmente poderia codificar algum tipo de script barroco para permitir que o usuário especifique os argumentos e, por sua vez, esses argumentos sejam lidos por um script que o "serviço" analisa e alimenta para netsh
. Você deve ser extremamente cuidadoso ao não permitir inadvertidamente ao usuário limitado a capacidade de executar código arbitrariamente como SYSTEM ao construir isso, no entanto.