以特定的用户身份运行某个程序命令

环境:Windows NT 4.0 +

本文将介绍一个控制台实用程序,在 Windows NT 系统中运行,它以专门的用户身份启动某个程序命令。它用 Windows API 函数 LogonUser 编程,以专门的用户身份/密码登陆到NT。如果登陆成功,则用 CreateProcessAsUseris 产生该用户的专属进程。程序运行截图如下:


LogonUser API调用要求调用者必须具备相当高级别的权限:比如:“Act as part of the operating system”,这是一个不能随便给出的特权,权力极大。本地管理员常常都不会有这个权限。作为工作环境,本文介绍的实用程序因为要执行某些系统调用,所以要首先检查用户是否具备必要的特权,如果没有这种特权则发生如下情况:

实用程序临时将自己作为服务程序安装并在系统账号下运行;

启动新的服务,参数(用户名,进程)必须通过共享内存传递给服务;

然后服务程序试图以特定用户登录并启动进程,通过共享内存将结果返回实用程序;

然后实用程序终止服务,卸载服务并显示结果;

这样做是能行得通的,因为系统账号具有高级特权,同时,本地管理员组有安装服务的权限,实用程序的使用说明可以在命令行敲入程序名,不用带参数,然后回车。

源代码还包含如下的技术内容:

Windows 安全APIs(包括轻量级模板类,用于处理 SIDs、ACEs、ACLs、安全描述符、特权和访问令牌);

使用服务控制管理器编程以安装/配置服务;

编写NT服务(包括一个服务模板类,使用这个类只要20行代码便可以实现一个简单的服务);

使用内存映射文件来共享内存(包含一个模板类,使用这个类可以实现内存映射文件以及其它轻量级Kernel对象的自动管理)

本文配套源码

时间: 2024-11-29 06:54:09

以特定的用户身份运行某个程序命令的相关文章

Linux中如何以不同的用户身份运行程序?

Linux中如何以不同的用户身份运行程序? 在管理Linux的过程当中,有些时候我们需要针对特定的用户,赋予一定的权限去执行某些程序,哪么应该如何去指定以不同的用户身份去运行相应的程序呢?我们可以通过su命令来实现: su - userhttp://www.aliyun.com/zixun/aggregation/11696.html">name -c "/path/to/command" 示例如下: [root@localhost software]# whereis

Win8如何以其他用户身份运行程序解决实际需要

  在多数的使用环境中,我们往往需要以管理员身份运行程序.不过今天小编要介绍的是以其他用户身份运行程序的方法,这有时候也是需要用的. 操作方法 按住 "Shift"键的同时,再右键单击程序的图标,会发现右键菜单多了"以其他用户身份运行"的选项. 点击"以其他用户身份运行"后出现对话框,输入用户名和密码就能迅速切换账户. 系统中有多个用户存在,在管理的时候多数情况需要进入用户账户界面,进行密码设置等操作.

怎样在WIN8系统下使用其它用户身份运行程序

在多数的使用环境中,我们往往需要以管理员身份运行程序.不过今天小编要介绍的是win8系统以其他用户身份运行程序的方法,这有时候也是需要用的.这里告诉大家一个绝招,使用其他身份运行程序技巧,一起看看详细操作方法. 操作方法: 1.按住 "Shift"键的同时,再右键单击程序的图标,会发现右键菜单多了"以其他用户身份运行"的选项; 2.点击"以其他用户身份运行"后出现对话框,输入用户名和密码就能迅速切换账户.   系统中有多个用户存在,在管理的时候多

Win8/Win10下怎么为开始菜单应用添加“以其他用户身份运行”选项

Windows 10系统有时我们需要"以其他用户身份运行"来运行一些程序,而为了方便操作,因此想要在开始菜单应用中直接添加"以其他用户身份运行"选项.这该如何操作呢?   具体方法:   1.按下WIN+R键调出运行,然后输入gpedit.msc回车:     2.打开组策略后,依次展开"用户配置"--"管理模板"--"开始菜单和任务栏":     3.双击打开"在开始中显示"以其他用户

如何自动以管理员身份运行.NET程序?

原文:如何自动以管理员身份运行.NET程序? windows 7和vista提高的系统的安全性,同时需要明确指定"以管理员身份运行"才可赋予被运行软件比较高级的权限,比如访问注册表等.否则,当以普通身份运行的程序需要访问较高级的系统资源时,将会抛出异常. 如何让程序在启动时,自动要求"管理员"权限了,我们只需要修改app.manifest文件中的配置项即可. app.manifest文件默认是不存在的,我们可以通过以下操作来自动添加该文件. (1)进入项目属性页.

在Tomcat工程中,以root用户身份执行系统某程序重启操作,然后再重新启动Linux,会使原本是Tomcat用户的工程文件,变成是Root用户的工程文件了呢?

问题描述 在Tomcat工程中,以root用户身份执行系统某程序重启操作,然后再重新启动Linux,会使原本是Tomcat用户的工程文件,变成是Root用户的工程文件了呢?这种情况下,Tomcat无法正常启动此工程文件供访问,请各位大虾帮忙,谢谢啦! 解决方案 解决方案二:该回复于2009-03-19 10:54:01被版主删除解决方案三:可以用www用户启动吗?我就公司就是这样的解决方案四:给tomcat用户附权限解决方案五:没遇到过顶下解决方案六:没遇到过帮楼主顶一下

linux中Tomcat用普通用户身份运行

在Linux下默认使用tomcat目录下bin/start.sh 脚本来启动tomcat,这样做简单,但是如果需要让tomcat监听在80端口就必须使用root用户来启动tomcat,这样在安全上存在风险,可以通过使用jsvc来启动tomcat. 参考资料 http://commons.apache.org/proper/commons-daemon/jsvc.html 版本说明system: Red Hat Enterprise Linux Server release 5.5Architec

vista(x86)中以管理员身份运行VC程序

方法一.(http://topic.csdn.net/u/20070303/15/457ee919-8a0b-46c4-9dd7-8606631e2108.html) 在exe的工程中找manifest   中的最后一行之前加下面的代码:进行编译就可以了, <ms_asmv3:trustInfo xmlns:ms_asmv3= "urn:schemas-microsoft-com:asm.v3 "> <ms_asmv3:security xmlns:ms_asmv3=

怎样以管理员身份自动运行.NET程序

windows 7和vista提高的系统的安全性,同时需要明确指定"以管理员身份运行"才可赋予被运行软件比较高级的权限, 比如访问注册表等.否则,当以普通身份运行的程序需要访问较高级的系统资源时,将会抛出异常. 如何让程序在启动时,自动要求"管理员"权限了,我们只需要修改app.manifest文件中的配置项即可. app.manifest文件默认是不存在的,我们可以通过以下操作来自动添加该文件. (1)进入项目属性页. (2)选择"安全性"栏目