Windows程序以特定用户身份运行

如果一个程序需要访问文件服务器的共享目录,却不能让执行这个程序的用户访问这个共享目录,怎么办?

解决方法:使用runas命令。

 

具体做法是,在本地先创建一个文件服务器授权了的用户abc,然后在控制台执行下面命令:

runas /savecred /user:abc notebook.exe

这样第一次运行会要密码,第二次运行就不要了。

如果不愿意打开cmd运行敲命令,又觉得写个bat显示DOS窗口难看,可以创建一个run.vbs文件,内容如下:

Set shell = Wscript.createobject("wscript.shell")
tmp = shell.run ("C:\Windows\System32\runas /savecred /user:abc notebook.exe",0)

 

这样就可以让程序以abc身份运行了,由于abc有访问文件服务器的权限,所以程序也就可以访问文件服务器。而运行此程序的用户没有服务器访问权限,所以他就不能访问文件服务器。

对于vbs文件可以使用vbs2exe转成exe文件。

新问题:

由于启动的程序是ruanas为其他账户的,那么运行的程序和当前用户就不在同一个环境了,所以就不能互操作。比如不能把资源管理器中的文件拖拽到改程序。

一下是runas的一些信息,参考自:http://blog.sina.com.cn/s/blog_107000590100mwml.html



从 Windows 2000 开始,微软的视窗操作系统开始提供给当前登录用户以不同的用户身份来运行程序的功能。前提是系统的 RunAs 服务(Windows 2000 下) / Secondary Logon 服务(Windows XP 下)没有被禁用并处于已启动状态。

在必需的 RunAs / Secondary Logon 服务已经启动之后,就可以为程序设定用户身份。对于一般的可执行程序来说,只需要创建指向该可执行文件的快捷方式,然后在按住 Shift 键的同时鼠标右键单击快捷方式,然后单击“运行方式 ...”,在弹出的对话框中设置指定的用户及密码信息即可。这里是微软官方的 HOW TO 指南。

但对于某些特殊类型的快捷方式来说,用 Shift + 鼠标右键唤出的菜单中并没有“运行方式 ...”的设置选项,比如说一些批处理文件(.bat)等有缺省文件类型打开方式的快捷连接。对于这种文件如果需要使用到 RunAs 的功能,可以新建一个空的快捷方式,在快捷方式向导对话框中键入项目的位置为 runas /savecred /usr:administrator "command line to the real application" 即可。其中 /usr: 后面的 administrator 表示以 administrator 用户身份运行程序;command line to the real application 填写实际程序的执行命令; /savecred 参数将自动保存输入的密码,这样在下一次运行快捷方式的时候就不需要再输入密码(该参数在 XP Home Edition 版本中无效),如果不希望系统保存密码去掉该参数即可。

RUNAS 用法:

RUNAS [ [/noprofile | /profile] [/env] [/netonly] ]
         /user: program

RUNAS [ [/noprofile | /profile] [/env] [/netonly] ]
         /smartcard [/user:] program

   /noprofile         指定不应该加载用户的配置文件。
                     这会加速应用程序加载,但
                     可能会造成一些应用程序运行不正常。
   /profile           指定应该加载用户的配置文件。
                     这是默认值。
   /env               要使用当前环境,而不是用户的环境。
   /netonly           只在指定的凭据限于远程访问的情况下才使用。

   /savecred         用用户以前保存的凭据。
                     Windows XP Home Edition 上没有这个选项。
                     该选项会被忽略。
   /smartcard         如果凭据是智能卡提供的,则使用这个选项。

   /user             应使用 USER@DOMAIN 或 DOMAIN\USER 形式
   program         EXE. 的命令行。请参阅下面的例子

例如:
> runas /noprofile /user:mymachine\administrator cmd
> runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
> runas /env /user:user@domain.microsoft.com "notepad "my file.txt""

注意: 只在得到提示时才输入用户的密码。
注意: USER@DOMAIN 跟 /netonly 不兼容。
注意: /profile 跟 /netonly 不兼容。
其中mymachine可以通过我的电脑--属性--好像是第二个选项卡上面查到

刚启动电脑后直接进入受限帐户,使用runas命令时会出现"拒绝访问". 
用户名,密码等都输入正确,但进一遍管理员用户后再回来则一切正常,请教下原因...
试试这个:runas /savecred /user:mymachine\administrator cmd

Runas 
允许用户用其他权限运行指定的工具和程序,而不是用户当前登录提供的权限。 

语法 
runas [{/profile /noprofile}] [/env] [/netonly] [/smartcard] [/showtrustlevels] [/trustlevel] /user:UserAccountName program 

参数 
/profile 
加载用户的配置文件。/profile 是默认值。 
/no profile 
/noprofile 指定不加载用户的配置文件。这使应用程序载入的更加快速,但是在一些应用程序中也会引起错误。 
/env 
指定当前使用的网络环境,而不是用户的本地环境。 
/netonly 
指明指定的用户信息只用于远程访问。 
/smartcard 
/smartcard 表示凭据是否是由智能卡提供的。 
/showtrustlevels 
列出 /trustlevel 开关项。 
/trustlevel 
指定应用程序运行所在的授权级别。使用 /showtrustlevels 查看可用的信任级别。 
/user:UserAccountName 
指定在其下运行程序的用户帐户的名称。用户帐户的格式应是 user@domain 或 domain\user。 
程序 
指定要用在 /user 中指定的帐户运行的程序或命令。 
/? 
在命令提示符显示帮助。 
注释 
管理员可以使用一个权限受限制的帐户执行日常、非管理性的任务,只有在执行特定管理任务时,才使用一个权限更大的帐户。要不经过注销再重新登录就完成这样的任务,可以用一般帐户登录,然后使用 runas 命令来运行需要更大权限的工具。 
有关 runas 命令的使用范例,请参阅“相关主题”。 
尽管 runas 通常由 Administrator 帐户使用,但并非仅限于 Administrator 帐户。任何拥有多个帐户的用户均可以利用备用凭据,使用 runas 运行程序、MMC 控制台或“控制面板”项。 
如果要在计算机上使用 Administrator 帐户,对于 /user:,键入下列参数之一: 
/user:AdministratorAccountName@ComputerName 

/user:ComputerName\AdministratorAccountName 

如果想以域管理员身份使用这个命令,键入下列参数之一: 
/user:AdministratorAccountName@DomainName 

/useromainName\AdministratorAccountName 

runas 命令允许您运行程序 (*.exe)、保存的 MMC 控制台 (*.msc)、程序和保存的 MMC 控制台的快捷方式及“控制面板”项。作为另一组(例如“Users”或“Power Users”组)的成员登录到计算机时,可以以管理员的身份运行。 
可以使用 runas 命令来启动任何程序、MMC 控制器或“控制面板”项。只要提供适当的用户帐户和密码信息,用户帐户就具有登录到计算机的能力,并且程序、MMC 控制台、“控制面板”项在系统中及对该用户帐户均可用. 
runas 命令允许您管理其他域的服务器(运行工具的计算机和要管理的服务器在不同的域中)。 
如果尝试使用 runas 从网络位置启动程序、MMC 控制台或“控制面板”项,可能会因为用来连接网络共享的凭据与用来启动程序的凭据不同而失败。后者的凭据可能无法访问同一网络共享。 
有些项,例如“打印机”文件夹和桌面项,间接由 Windows 2000 打开,而不能使用 runas 命令启动。 
如果 runas 命令失败,则可能是没有运行 RunAs 服务或使用的用户帐户无效。要检查 RunAs 服务的状态,请在“计算机管理”中单击“服务和应用程序”,然后单击“服务”。要测试用户帐户,请尝试使用该帐户登录合适的域。 
范例 
要在本地计算机上以管理员身份启动 Windows 2000 命令提示行实例,请键入: 

runas /user:localmachinename\administrator cmd 
系统提示时,键入管理员密码。 

要使用名为 companydomain\domainadmin 的域管理员帐户启动“计算机管理”管理单元实例,请键入: 

runas /user:companydomain\domainadmin "mmc %windir%\system32\compmgmt.msc" 
当提示时,键入帐户密码。 

要使用名为 domain.microsoft.com 的域中的域管理员帐户 user 启动“记事本”实例,请键入: 

runas /user:user@domain.microsoft.com "notepad my_file.txt" 
当提示时,键入帐户密码。 

要启动命令提示符行窗口、保存的 MMC 控制台、控制面板项或管理其他地点服务器的程序的一个实例,请键入: 

runas /netonly /user:domain\username "command" 
domain\username 必须是有足够权限管理服务器的用户。当提示时,键入帐户密码。


在win2k中,开始→程序→附件 ,找到计算器,按住shift键,点右键,选择“运行方式 ...”,这时候,会弹出对话框,询问你要使用哪个用户身份来运行该程序 。 
不知道大家是否使用过win2k的这个功能,如果大家是使用win2k的英文版本的话,在按住shift后选择的就不是“运行方式 ...”而是“runas...”,也就是今天要讲的这个命令。 
在cmd中输入runas,会得到帮助,今天,我们只将它最简单的用法,就是怎么样使用这个命令来以另外一个用户身份运行一个程序。 

其实,命令非常简单: 
runas /user:user_name program.exe 
user_name是要使用哪个用户运行该程序就写上哪个用户名,program.exe是程序名,如果program.exe不在system32目录下的话,需要指明具体路径。 
为了证明这个过程,做一个实验,那就是使用guest帐号来运行at命令,查看当前的计划任务清单,大家都知道,guest默认情况下是没有此权限的,因此,只要这个命令真的起作用的话,会出现“拒绝访问”的字样,在这里,我们使用这个命令: 
runas /user:guest "cmd.exe cmd/k at.exe" 
cmd.exe 是调用cmd这个程序,而cmd/k则是指cmd命令后跟/k参数,目的是为了是当前的执行结果的屏幕保留。 

(注意:这里由于命令过长,而且中间有空格,所以用引号引起来,如果只有一个命令,例如at.exe的话,那么就不需要有引号了) 
由于运行的程序是在一个新窗口中打开,而不是在原来的cmd窗口中打开,所以,如果我不使用cmd.exe cmd/k这个参数的话,窗口会一闪而过,看不到效果。 

运行完这个命令后,会要求guest的密码,填上,回车,等一会,一会就会出现一个cmd窗口,里面写着“拒绝访问”,而且,在cmd窗口上沿还有“(运行为guest)”的字样。 
这个工具还可以在域中使用,而且还可以加上个人配置文件,实在是很爽 ~~~ 
------- 
RUNAS 用法: 

RUNAS [/profile] [/env] [/netonly] /user: program 

/profile 如果需要加载用户的配置文件 
/env 要使用当前环境,而不是用户的环境。 
/netonly 只在指定的凭据限于远程访问的情况下才使用 
/user 应使用 USER@DOMAIN 或 DOMAIN\USER 形式 
program EXE. 的命令行。参阅下面的例子 

例如: 
> runas /profile /user:mymachine\administrator cmd 
> runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc" 
> runas /env /user:user@domain.microsoft.com "notepad "my file.txt"" 

注意: 只有在被提示时才输入用户的密码。 
注意: USER@DOMAIN 与 /netonly 不兼容。 
这应该是英语吧!!!!!!!
 

runas 命令的使用及RUNAS自动输入密码的方法

from:http://simplorer.blog.51cto.com/447671/415390

在win2k中,开始→程序→附件 ,找到计算器,按住shift键,点右键,选择“运行方式 ...”,这时候,会弹出对话框,询问你要使用哪个用户身份来运行该程序 。
不知道大家是否使用过win2k的这个功能,如果大家是使用win2k的英文版本的话,在按住shift后选择的就不是“运行方式 ...”而是“runas...”,也就是今天要讲的这个命令。
在cmd中输入runas,会得到帮助,今天,我们只将它最简单的用法,就是怎么样使用这个命令来以另外一个用户身份运行一个程序。

其实,命令非常简单:
runas /user:user_name program.exe
user_name是要使用哪个用户运行该程序就写上哪个用户名,program.exe是程序名,如果program.exe不在system32目录下的话,需要指明具体路径。
为了证明这个过程,做一个实验,那就是使用guest帐号来运行at命令,查看当前的计划任务清单,大家都知道,guest默认情况下是没有此权限的,因此,只要这个命令真的起作用的话,会出现“拒绝访问”的字样,在这里,我们使用这个命令:
runas /user:guest "cmd.exe cmd/k at.exe"
cmd.exe 是调用cmd这个程序,而cmd/k则是指cmd命令后跟/k参数,目的是为了是当前的执行结果的屏幕保留 。

(注意:这里由于命令过长,而且中间有空格,所以用引号引起来,如果只有一个命令,例如at.exe的话,那么就不需要有引号了)

例:
(1)runas   /user:administrator   "C:\Program Files\AutoCAD R14\acad.exe"
(2)输入密码:(输入时密码会看不到)
(3)这样就可以用“administrator"用户权限来启动那个程序了,通常我们可以使用它来执行安装程序,即可做到不用切换用户来安装“

由于运行的程序是在一个新窗口中打开,而不是在原来的cmd窗口中打开,所以,如果我不使用cmd.exe cmd/k这个参数的话,窗口会一闪而过,看不到效果。

运行完这个命令后,会要求guest的密码,填上,回车,等一会,一会就会出现一个cmd窗口,里面写着“拒绝访问”,而且,在cmd窗口上沿还有“(运行为guest)”的字样。
这个工具还可以在域中使用,而且还可以加上个人配置文件,实在是很爽 ~~~
-------
RUNAS 用法:

RUNAS [/profile] [/env] [/netonly] /user:<UserName> program

/profile     如果需要加载用户的配置文件
/env       要使用当前环境,而不是用户的环境。
/netonly     只在指定的凭据限于远程访问的情况下才使用
/user    <UserName> 应使用 USER@DOMAIN 或 DOMAIN\USER 形式
program    EXE. 的命令行。参阅下面的例子

例如:
> runas /profile /user:mymachine\administrator cmd
> runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
> runas /env /user:user@domain.microsoft.com "notepad \"my file.txt\""

注意: 只有在被提示时才输入用户的密码。
注意: USER@DOMAIN 与 /netonly 不兼容。
但由于RUNAS每次都要自己输入密码,很是麻烦,我们也可以改用其它方法:
自动输入RUNAS密码的方法 
以非管理员用户登录时,如果要用管理员权限运行程序的话,需要用到 runas 命令,在使用脚本运行时,无法简单的利用管道来输入密码,有以下方法可免除每次需要输入密码的麻烦。
1、使用系统自带的 runas /savecred 选项,第一次输入密码后,会保存凭据。
特点:无法限制能够运行的命令,安全性差。

2、使用 sanur,sanur 是一个小程序,能以管道的方法将密码或者文件中的内容传递给 runas 程序。
runas | sanur password
runas | sanur /i [drive:][path]filename
特点:密码明文保存。
----------------------------------
About Sanur
Sanur is a tiny Win32 console utility that 'pipes' a password into the Windows 2000/XP/2003 Runas utility, thereby making Runas scriptable.
Licencing
Sanur is freeware. There is no fee for personal or corporate use. For more details see the 'readme.txt' file included in sanur.zip.
Usage
Pipe your normal Runas commandline into Sanur and specify the password on Sanur's commandline or use the /i switch to have Sanur read the password from a file:-
RUNAS <options> | SANUR password
RUNAS <options> | SANUR /i [drive:][path]filename
In otherwords, just add | SANUR password to the end of your working Runas command.
Examples
Pipe the password 'pa55w0rd' into Runas:-
runas /u:domain\username program.exe | sanur pa55w0rd
Pipe the password from the file named password.txt into Runas:-
runas /u:domain\username program.exe | sanur /i password.txt
Same as above but any Runas errors, such as a logon failure, will be displayed:-
runas /u:domain\username program.exe >&2 | sanur /i password.txt
Support
As of 2005-01-11 Sanur is no longer supported. If you are having problems getting Sanur to work please read the troubleshooting AND the FAQ pages, or seek an alternative solution. Please don't send me any emails relating to Sanur.
例:runas /u:domain\guest notepad.exe | sanur /i 123.jpg 我们使用guest用户,密码正在123.txt里面,由于密码是用明文存贮,不安全,所以将.txt改为了.jpg,这样就不能直接查看了,并把它设了系统隐藏。

----------------------------------
相关页面:
http://www.commandline.co.uk/sanur_unsupported/index.html

3、使用 lsrunas,功能类似 sanur,不过它无需运行 runas,自带完整的参数来执行。
特点:密码明文保存。
相关页面:
http://www.moernaut.com/default.aspx?item=lsrunas

4、使用 lsrunase,lsrunas 的加强版本,可以使用加密的密码。自带一个小软件 LSencrypt 用来生成加密的字串。
用法:
lsrunase /user:administrator /password:41BngA== /domain: /command:notepad.exe /runpath:c:\
所有的参数必须齐全,其中:
user 为运行的账号
password 为密码加密后的字串
domain 为机器名或域名,也可留空代表本机
command 为要运行的程序名,如果携带参数需要在命令的首尾加引号
runpath 为程序启动的路径
特点:可以较完美的替代 runas,并避免直接将密码明文保存在脚本中。
相关页面:
http://www.moernaut.com/default.aspx?item=lsrunase

5、使用 cpau,cpau 也是一个替代 runas 的程序,并且功能强大,可以使用加密的密码。
用法:
cpau -u administrator -p password -ex notepad -file start_notepad.txt -enc
cpau -file start_notepad.txt -dec
以上命令可以先将要执行的指令加密保存为一个文件,执行时载入此文件。
特点:可以保护执行的脚本及命令不被他人查看,但在使用网络路径时存在一些问题。
相关页面:
http://www.joeware.net/win/free/tools/cpau.htm

6、使用 autoit,autoit 是一个脚本自动化执行的工具,可以完成很多自动化的任务,并且可以将脚本编译成 exe 文件来直接运行,从而达到了隐藏密码信息的目的。
特点:功能强大,但操作复杂。
相关页面:
http://www.autoitscript.com/autoit3/

还有其他一些工具能够完成类似的操作。










本文转自 h2appy  51CTO博客,原文链接:http://blog.51cto.com/h2appy/1100090,如需转载请自行联系原作者
上一篇:Ansible 变量


下一篇:磁盘挂载问题:Fdisk最大只能创建2T分区的盘,超过2T使用parted