Board logo

标题: [转贴] 域普通用户环境下执行脚本Xcacls.vbs更改目录权限 [打印本页]

作者: VBScript    时间: 2012-4-6 16:07     标题: 域普通用户环境下执行脚本Xcacls.vbs更改目录权限

前言(感觉要说的东西很多,就来个前言吧)

作为域管理员,不能给普通用户太大的权限,一般把域帐号加入本地的“Power users”组就可以了。但是要注意一些问题。有时候用管理员安装的软件,域帐号却无法运行,这可能是域帐号对软件的安装目录缺少完全控制权限。(这一般是因为安装软件的打包设计比较烂,根本没有安装成所有用户可用的功能)。这时通常的做法是切换至管理员帐号(本地管理员或域管理员),选择“软件安装目录”,右键“共享和安全”,在“安全”选项卡,点“添加”,选择“域帐号”,授予域帐号完全控制权限。然后再切换回域帐号,看一下软件能否正常运行。这个过程非常繁琐,等待的时间很长,效率很低,那么有什么简单的方法来实现呢?如果你对此感兴趣,就继续看吧!

一、先说一下如何在普通用户权限下运行程序。

方法有几种,第一种利用Windows自带的Runas命令。第二种利用第三软件来实现,例如:CPAU等。

1、Runas命令,在使用该命令时,会弹出对话框,输入密码后,即可执行命令。

Runas命令用法:
RUNAS [ [/noprofile | /profile] [/env] [/netonly] ]
/user:<UserName> program
RUNAS [ [/noprofile | /profile] [/env] [/netonly] ]
/smartcard [/user:<UserName>] program
/noprofile 指定不应该加载用户的配置文件。这会加速应用程序加载,但可能会造成一些应用程序运行不正常。
/profile 指定应该加载用户的配置文件。这是默认值。
/env 要使用当前环境,而不是用户的环境。
/netonly 只在指定的凭据限于远程访问的情况下才使用。
/savecred 用用户以前保存的凭据。Windows XP Home Edition 上没有这个选项。该选项会被忽略。
/smartcard 如果凭据是智能卡提供的,则使用这个选项。
/user <UserName> 应使用 USER@DOMAIN 或 DOMAIN\USER 形式

program EXE. 的命令行。请参阅下面的例子

例如:

runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"
runas /env /user:user@domain.microsoft.com "notepad \"my file.txt\""
Runas /netonly /user:domain\zhangsan cmd

解释一下上面的命令。以域名“domain”域管理员帐号“zhangsan”运行“CMD”命令。这样就可以在这个CMD命令窗口中输入要运行的程序,例如:输入Compmgmt.msc,就以域管理员身份打开了计算机管理。/netonly 参数是指不在本地生成“zhangsan”的本地配置文件。

2、CPAU是具有Runas功能的一个第三方程序,可以在该程序命令中指定域管理员的帐号和密码,这样可以避免CMD中输入命令,并且CPAU还支持把命令写入一个加密的文本文件中,再通过执行该文件文件来执行命令,保密程序更高了。

CPAU 用法:

CPAU -u 用户 [-p 密码] -ex "程序或命令" [参数]

用户 用于登录的用户名(一般指管理员)例:Domain\Domainadm

密码 用户的密码[密码]

程序或命令 要执行的程序或命令

参数:

-profile 使用本地登录配置文件代替网络登录
-localwithprofile –profile的别名
-lwp -profile的别名
-localwithoutprofile 使用本地登录但不加载配置文件
-lwop -localwithoutprofile的别名
-k 使用命令cmd /k 关闭打开的窗口
-c 程序执行完成后使用命令cmd /c 关闭打开的窗口
-pipepwd 指定传入密码的方法
-enc 为最终用户加密任务
-dec 解密任务
-file 指定创建或执行的文本文件
-wait 等待进程完成
-outprocexit 同-wait一起使用,使用 errorlevel参数来代替CPAU的错误提示
-cwd x 指定工作目录
-hide 新进程隐藏运行
-title x 指定命令窗口的标题
-crc file[,file,file] 这个参数允许在加密文件文件中加入CRC错误校验信息。当CRC校验出错时,提醒所执行的文件不是要运行的文件,重新选择文件。
-nowarn 网络登录时不输出警告信息

示例1:

cpau -u joehome\joe -p logon -ex "perl cleanup.pl" -lwp

以joehome\joe用户运行脚本perl cleanup.pl。

示例2:

cpau -u joehome\joe -p logon -ex "perl cleanup.pl" -enc -file cleanup.job

把以joehome\joe用户运行脚本perl cleanup.pl 的命令写入cleanup.job中

示例3:

cpau -dec -file cleanup.job -lwp

执行命令文件nup.job

示例4:

cpau -u joehome\joe -p logon -ex "perl cleanup.pl" -wait -lwp

以joehome\joe用户运行脚本perl cleanup.pl并等待进程完成

示例5:

cpau -u joe -p logon -ex notepad.exe -lwp

以joee用户运行notepad.exe

示例6:

cpau -u joehome\joe -p logon -ex logonscript.cmd -lwp

在当前目录以joehome\joe 运行logonscript.cmd 。

示例7:

cpau -u joehome\joe -p logon -ex logonscript.cmd -lwp -cwd c:\temp

在目录c:\temp中以joehome\joe 运行logonscript.cmd 。

示例8:

cpau -u administrator -p password -ex notepad -file start_notepad.txt -enc

cpau -file start_notepad.txt –dec

说明一下:第一行命令把“cpau -u administrator -p password -ex notepad”加密写入文件

start_notepad.txt,第二行命令通过执行start_notepad.txt,来执行命令“cpau -u administrator

-p password -ex notepad”。
作者: VBScript    时间: 2012-4-6 16:07

二、介绍一下Xcacls.vbs脚本的功能及用法

要设置和使用 Xcacls.vbs,请按照下列步骤操作:

1. 从以下 Microsoft 网站获得 Xcacls.vbs 的最新版本:
http://download.microsoft.com/download/f/7/8/f786aaf3-a37b-45ab-b0a2-8c8c18b... (http://download.microsoft.com/download/f/7/8/f786aaf3-a37b-45ab-b0a2-8c8c18b...)

2. 双击“Xcacls_Installer.exe”。当提示您提供放置提取文件的位置时,请指定一个位于计算机的搜索路径设置中的文件夹(如 C:\Windows)。

3. 将默认脚本引擎从 Wscript 更改为 Cscript。(Xcacls.vbs 脚本最适合在 Cscript 下运行。)为此,请在命令提示符下键入以下内容,然后按 Enter:
cscript.exe /h:cscript
注意:将默认脚本引擎更改为 Cscript 只影响脚本向屏幕写入的方式。Wscript 根据“确定”对话框分别写入每一行。Cscript 将每一行写入命令窗口。如果您不想更改默认脚本引擎,则必须使用以下命令运行脚本
cscript.exe xcacls.vbs
但是,如果将默认脚本更改为 Cscript,则可以使用以下命令运行该脚本:
xcacls.vbs

4. Xcacls.vbs 命令的语法

Xcacls.vbs 目录或文件 /g 域名\域用户:权限;高级权限 参数 /e /t /c /R 用户 /D 用户: 权限;高级权限……

目录或文件名 [必须]单独使用该参数,列出目录或文件的权限

/f 改变所有文件的权限,不包括子目录,除非指定了/t,不能应用于目录;
/s 改变所有子目录的权限,不包括下面的文件,除非指定了/t,不能应用于目录;
/t 操作对指定文件夹下所有文件及文件夹有效。该参数不能应用于文件;
/e 编辑权限列表,增加权限,而不是用批定的权限代替权限列表;
/g 用户:权限;高级权限 指定要授予的用户,并授予指定的权限

权限:

F 完全控制
M 修改
X 读取执行
L 列出文件夹内容
R 只读
W 写入

特定权限(只用于文件)

F 完全控制
M 修改
X 读取执行
R 只读
W 写入

高级权限

D 取得所有权
C 更改权限
B 读取权限
A 删除

9 写入属性
8 读取属性
7 删除子文件夹文件
6 遍历文件夹/运行文件
5 写入扩展属性
4 读取扩展属性
3 创建文件夹/附加数据
2 创建文件/写入数据
1 列出文件夹/读取数据

/R 用户 把指定的用户从权限列表中移除
/D 用户:权限;高级权限 拒绝指定用户的权限(具体权限同/g 参数)
/O 用户 授予指定用户或组取得所有权
/I 参数 继承标志。缺省是不会继承权限的。

参数:

Enable 打开继承标志。
Copy 关闭继承标志,并复制权限。
Remove 关闭继承标志,不复制权限。

/L 文件名 指定记录命令执行情况的文本文件。指定的文件如果不在当前目录,需包括路径,如果文件不存在,则创建该文件。文件存在,则把记录追加至该文本文件。文件扩展名一般为“log”。
/Q 打开静默模式,该模式不会显示输出至屏幕。缺省是显示输出。
/Debug 打开调试模式,缺省关闭。将输出更多的信息。
/Server 计算机名 输入远程计算机名
/User 远程连接的用户名
/Pass 远程连接用户的密码

可以使用通配符:* ?

5. 下列 Xcacls.vbs 命令提供 Xcacls.vbs 用法的一些示例:

xcacls.vbs c:\test\ /g domain\testuser1:f /f /t /e

该命令可编辑现有权限。它授予 Domain\TestUser1 完全控制 C:\Test 下所有文件的权限,遍历 C:\Test 下的子文件夹,然后更改找到的所有文件。该命令不触及目录。

xcacls.vbs c:\test\ /g domain\testuser1:f /s /l "c:\xcacls.log"

该命令可替换现有权限。它授予 Domain\TestUser1 完全控制 C:\Test 下所有子文件夹的权限,而且记录到 C:\Xcacls.log。该命令不触及文件,并且不遍历目录。

xcacls.vbs c:\test\readme.txt /o "machinea\group1"

该命令将自述文件的所有者更改为组 MachineA\Group1。

xcacls.vbs c:\test\badcode.exe /r "machinea\group1" /r"domain\testuser1"

该命令撤消 MachineA\Group1 和 Domain\TestUser1 的 C:\Test\Badcode.exe 权限。

xcacls.vbs c:\test\subdir1 /i enable /q

该命令将打开文件夹 C:\Test\Subdir1 上的继承。该命令将取消任何屏幕输出。

xcacls.vbs serverashareztestpage.htm /p "domain\group2":14

此命令通过使用 Windows Management Instrumentation (WMI) 远程连接到 ServerAShareZ。然后获取用于该共享的本地路径,在该路径下,它更改 Testpage.htm 上的权限。它原封保留 Domain\Group2 的现有权限,但是添加权限 1(读取数据)和权限 4(读取扩展属性)。该命令放弃此文件上的其他权限,原因是未使用 /e 开关。

xcacls.vbs d:\default.htm /g "domain\group2":f /server servera /user

Servera\admin /pass password /e

该命令使用 WMI 作为 ServerA\Admin 远程连接到 ServerA,然后将Default.htm 上的完全权限授予 Domain\Group2。Domain\Group2 的现有权限丢失,但保留文件上的其他权限。
作者: VBScript    时间: 2012-4-6 16:08

三、下面进入主题:在域普通用户环境下执行脚本Xcacls.vbs更改目录权限。

1、准备工作:准备一台加入域环境的计算机,创建一个域帐号Test。创建一个具有域管理员权限的用户Domainadm,其密码为123。在客户机上创建一个目录在d:\1,并创建几个文件,域名为Domain、把目录d:\1授予域用户Test完全控制权。

命令(以后的命令都是在CMD中输入):
  1. Runas /netonly /user:Domain\Domainadm "Cscript.exe //nologo \".\xcacls.vbs\" d:\1 /g Domain\test:f /e /t"
复制代码
说明:Runas命令运行的程序如果用参数应该用""括起来。注意引号里面的用法,\".\xcacls.vbs\"这样使用的目录是把 xcacls.vbs文件定位到当前目录,所以在打开CMD窗口后,要把路径切换至xcacls.vbs文件所在的目录,不能会出现找不到文件的错误。另外如果有的目录或用户名中间有空格,应用\" \"这样一对符号括起来,不然命令会执行失败。

3、把目录d:\1授予本地“Power users”组完全控制权。
  1. Runas /netonly /user:Domain\Domainadm "Cscript.exe //nologo \".\xcacls.vbs\" d:\1 /g \"BUILTIN\Power Users\":f /e /t"
复制代码
注意:Power Users组中间有空格,需用符号\" \"括起来,本地组应该使用BUILTIN ,就是这样的形式:\"BUILTIN\Power Users\"。

4、我把域用户Test用户加入本地“Power users”组,再把D盘授予本地“Power users”组完全控制权限,这样域用户Test就拥有了对本地D盘的完全控制权限。

把域用户Test加入本地“Power users”组的脚本:

把下面的代码写入一个文本文件中,并更名为“将域帐号加入本地Power组.VBS”
  1. Dim NPCName,DUser
  2. Set objnet = CreateObject ("WScript.Network")
  3. NPCName = InputBox ("当前的计算机名是:" & objnet.ComputerName,"输入目标计算机名")
  4. DUser = InputBox ("","输入域用户帐号名")
  5. strComputer = NPCName
  6. Set objGroup = GetObject("WinNT://" & strComputer & "/Power Users")
  7. Set objUser = GetObject("WinNT://rybb/" & DUser)
  8. objGroup.Add(objUser.ADsPath)
复制代码

作者: VBScript    时间: 2012-4-6 16:08

四、使用CPAU在域普通用户环境下执行脚本Xcacls.vbs更改目录权限。

示例1:把目录d:\1域授予用户Test完全控制权。

CPAU -u Domain\Domainadm –p 123 –ex "Cscript.exe //nologo \".\xcacls.vbs\" d:\1 /g Domain\test:f /e /t /q" –lwop –wati –nowarn –enc –file ChangePower.job

CPAU –file ChangePower.job –dec

示例2:把目录d:\1授予本地“Power users”组完全控制权。

CPAU -u Domain\Domainadm –p 123 –ex "Cscript.exe //nologo \".\xcacls.vbs\" d:\1 /g \"BUILTIN\Power Users\":f /e /t /q" –lwop –wati –nowarn –enc –file ChangePower.job

CPAU –file ChangePower.job –dec
作者: VBScript    时间: 2012-4-6 16:09

五、最后使用批处理和脚本做一个通用的批处理

批处理要求:把指定的域用户授予本地指定目录的完全控制权(指定权限感觉没有太大意义,不过要做还是还简单的,有兴趣的自己做下看)。

1、下面是我的批处理内容:(使用Runas实现)

“授予普通用户对目录的完全控制权限.cmd”的内容如下:
  1. @echo off
  2. Rem 输入域帐号名并赋值给变量Duser
  3. set Duser=
  4. set /p Duser=请输入域帐号名(例:Domain\Domainadm):
  5. Rem 输入目录路径并赋值给变量DPath
  6. set DPath=
  7. set /p DPath=请输入目录名称或直接把目录拖放至CMD窗口:
  8. @echo off
  9. Rem 获取当前路径并赋值给变量Upath
  10. for /f "delims=" %%i in ('cd') do set Upath=%%i
  11. Rem 使用用户Domain\Domainadm运行,授予用户Duser目录DPath的完全控制权。
  12. Rem 采用静默方式运行,并把运行情况写入当前目录文件ChangePower.log中。
  13. start /w runas /user:Domain\Domainadm "Cscript.exe //nologo \".\xcacls.vbs\" %DPath% /g %DUser%:f /e /t /q /l %Upath%\ChangePower.log"
  14. Rem 用记事本打开文件ChangePower.log
  15. notepad.exe %Upath%\ChangePower.log
  16. exit
复制代码
2、使用CPAU实现该功能的批处理:

“授予普通用户对目录的完全控制权限.cmd”的内容如下:
  1. @echo off
  2. Rem 输入域帐号名并赋值给变量Duser
  3. set Duser=
  4. set /p Duser=请输入域帐号名(例:Domain\Domainadm):
  5. Rem 输入目录路径并赋值给变量DPath
  6. set DPath=
  7. set /p DPath=请输入目录名称或直接把目录拖放至CMD窗口:
  8. @echo off
  9. Rem 获取当前路径并赋值给变量Upath
  10. for /f "delims=" %%i in ('cd') do set Upath=%%i
  11. Rem 使用用户Domain\Domainadm运行,授予用户Duser目录DPath的完全控制权。Rem 采用静默方式运行,并把运行情况写入当前目录文件ChangePower.log中。
  12. %Upath%\cpau -u rybb\tangzhigang -p heroes33 -ex "Cscript.exe //nologo \".\xcacls.vbs\" %DPath% /g %DUser%:f /e /t /q /l %UPath%\ChangePower.log" -lwop -nowarn
  13. Rem 用记事本打开文件ChangePower.log
  14. notepad.exe %Upath%\ChangePower.log
  15. exit
复制代码
注意:使用上面的脚本时,如果是整个盘,如D盘,在输入路径时,要输入“D:”,而不能输入“D:\”。

http://lzy821218.blog.51cto.com/209800/307774




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2