我希望让普通用户也能无管理员权限,以便他们可以将本地无线网卡切换到托管网络(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/显示windows api接口显示明文密码。
我更喜欢一些想法:)
答案1
这看起来像是服务控制管理器 (SCM) 的工作。SCM 已经具备安全存储凭据和在不同于交互用户的上下文中安全执行程序的功能。非管理员用户将无法访问凭据或直接与用于执行服务的安全上下文交互,但如果他们有权限,则可以启动/停止服务。
首先,重要的是要知道你能将非服务程序作为服务运行。它将生成一条错误消息(并且服务不会显示“已启动”),但程序将执行。对于像您的这样的命令netsh
,它会执行并立即退出,将其作为“服务”运行就可以很好地完成您的需要。(运行时间较长的命令会有问题,因为当它们没有正确响应时,SCM 最终会终止它们。)
我还没有用 测试过这个netsh
,但是我确实使用了另一个命令(net user bob /add
)来“证明”服务控制管理器。
创建一个执行命令的服务:
sc create ServiceName binPath= "netsh wlan set hostednetwork mode=allow ssid=$WLANSSID key=$WLANKEY"
修改服务上的安全描述符以允许“用户”启动/停止该服务(厚颜无耻地取自我的另一个 Server Fault 答案):
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
命令将在 SYSTEM 安全上下文中运行。
如果您需要用户能够与命令行交互,那么这会变得更加复杂。您可能可以编写某种巴洛克式脚本,以允许用户指定参数,然后让“服务”解析并提供给的脚本读取这些参数。netsh
但是,您需要非常小心,不要在构建此脚本时无意中允许受限用户以 SYSTEM 身份任意执行代码。