域普通用户环境下执行脚本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. 的命令行。请参阅下面的例子

     例如:

     &gt; runas /profile /env /user:mydomain\admin "mmc %windir%\system32\dsa.msc"

    &gt; runas /env /user:[email protected] "notepad \"my file.txt\""

     &gt;Runas /netonly /user:domain\zhangsan cmd

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

2、    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”。

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

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

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

3. 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 用法的一些示例:

&gt;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 的现有权限丢失,但保留文件上的其他权限。

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

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

命令(以后的命令都是在CMD中输入):

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”组完全控制权。

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”

Dim NPCName,DUser

Set objnet = CreateObject ("WScript.Network")

NPCName = InputBox ("当前的计算机名是:" & objnet.ComputerName,"输入目标计算机名")

DUser = InputBox ("","输入域用户帐号名")

strComputer = NPCName

Set objGroup = GetObject("WinNT://" & strComputer & "/Power Users")

Set objUser = GetObject("WinNT://rybb/" & DUser)

objGroup.Add(objUser.ADsPath)

四、使用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

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

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

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

   “授予普通用户对目录的完全控制权限.cmd”的内容如下:

    @echo off

    Rem 输入域帐号名并赋值给变量Duser

   set Duser=

   set /p Duser=请输入域帐号名(例:Domain\Domainadm):

   Rem 输入目录路径并赋值给变量DPath

   set DPath=

   set /p DPath=请输入目录名称或直接把目录拖放至CMD窗口:

   @echo off

   Rem 获取当前路径并赋值给变量Upath

   for /f "delims=" %%i in ('cd') do set Upath=%%i

   Rem 使用用户Domain\Domainadm运行,授予用户Duser目录DPath的完全控制权。

Rem 采用静默方式运行,并把运行情况写入当前目录文件ChangePower.log中。

   start /w runas /user:Domain\Domainadm "Cscript.exe //nologo \".\xcacls.vbs\" %DPath% /g %DUser%:f /e /t /q /l %Upath%\ChangePower.log"

   Rem 用记事本打开文件ChangePower.log

   notepad.exe %Upath%\ChangePower.log

   exit

2、使用CPAU实现该功能的批处理:

   “授予普通用户对目录的完全控制权限.cmd”的内容如下:

   @echo off

   Rem 输入域帐号名并赋值给变量Duser

   set Duser=

   set /p Duser=请输入域帐号名(例:Domain\Domainadm):

   Rem 输入目录路径并赋值给变量DPath

   set DPath=

   set /p DPath=请输入目录名称或直接把目录拖放至CMD窗口:

   @echo off

   Rem 获取当前路径并赋值给变量Upath

   for /f "delims=" %%i in ('cd') do set Upath=%%i

   Rem 使用用户Domain\Domainadm运行,授予用户Duser目录DPath的完全控制权。Rem 采用静默方式运行,并把运行情况写入当前目录文件ChangePower.log中。

   %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

   Rem 用记事本打开文件ChangePower.log

   notepad.exe %Upath%\ChangePower.log

   exit

注意:使用上面的脚本时,如果是整个盘,如D盘,在输入路径时,要输入“D:”,而不能输入“D:\”。

本文为原创,转载请标明出处。——Longxiao

你可能感兴趣的:(权限,脚本,目录,vbs,Xcacls)