在Windows下安全地调用具有管理员权限的命令

时间:2009-03-22 22:56:34

标签: windows sysadmin

我需要准时发送invoque命令(net sharenetsh ...),要求用户帐户启动的软件具有管理员权限。

在Unix版本中,我会在我的用户模式软件旁边安装一个小小的,谨慎编写的带有suid位的脚本,它会调用所需的命令。

Microsoft Windows下的等效最佳做法是什么?我特别感兴趣的是Vista友好但兼容XP的解决方案。

3 个答案:

答案 0 :(得分:1)

一种方法可能是使用具有管理权限的服务。然后从您的应用程序中,告诉服务调用这些命令。我假设您不希望要求用户知道管理凭据。

答案 1 :(得分:1)

正如BobbyShaftoe所说,在Windows中解决此问题的规范方法是通过服务,因为默认情况下服务在LocalSystem帐户下执行。任何其他方法都需要以管理员用户身份登录,这需要凭据。

Vista需要的其他信息是,客户端应用程序需要通过某种形式的IPC与服务进行通信,这种形式可以跨越会话边界,因为在Vista上,控制台和服务位于不同的会话中。在这种情况下使用的常规IPC方法是命名管道。

相同的解决方案在XP中运行良好。

答案 2 :(得分:0)

您可以使用WinAPI函数LogonUserCreateProcessAsUser以编程方式启动具有不同访问权限的新进程。

对于您的场景,我会编写一个包含所需net命令的批处理脚本,如果需要,可以创建一个新的cmd.exe进程,该进程将脚本名称作为参数。

此解决方案要求您以某种方式将LogonUser中使用的凭据存储在应用程序中,因此可能存在安全风险。