在Windows操作系统下,如何通过命令行方式为用户授予目录权限?

如何使用Windows命令行授予用户对目录的权限(读、写、修改)?

1195861 次浏览

使用cacls命令。参见信息在这里

CACLS文件/e /p {USERNAME}:{PERMISSION}

在那里,

/p:设置新的权限

/e:编辑权限并保留旧权限,即编辑ACL而不是替换它。

{USERNAME}:用户名

{PERMISSION}:权限可以是:

R -读取

W -写

C -改变(写)

F -完全控制

例如,用以下命令授予Rocky完全(F)控制权(在Windows命令提示符下输入):

C:在CACLS文件/e /p rocky:f

输入以下命令阅读完整帮助:

C:在cacls / ?

attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide

在Vista中,cacls已弃用。以下是前几条帮助热线:

C:\>cacls
NOTE: Cacls is now deprecated, please use Icacls.


Displays or modifies access control lists (ACLs) of files

你应该使用icacls代替。这是你授予John对D:\test文件夹及其所有子文件夹的完全控制权的方式:

C:\>icacls "D:\test" /grant John:(OI)(CI)F /T

根据MS文档:

  • F =完全控制
  • CI = Container Inherit -该标志表示从属容器将继承此ACE。
  • OI = Object Inherit -该标志表示从属文件将继承ACE。
  • /T =递归应用到现有文件和子文件夹。(OICI只适用于新文件和子文件夹)。图片来源:@AlexSpence。

要获得完整的文档,你可以不带参数地运行"icacls",或者查看微软文档在这里在这里

您也可以使用ICACLS。

用户完全控制授予一个文件夹:

>icacls "C:\MyFolder" /grant Users:F

为IIS用户授予C:\MyFolder修改权限(如果你需要,你的IIS具有将文件R/W到特定文件夹的能力):

>icacls "C:\MyFolder" /grant IIS_IUSRS:M

如果你执行ICACLS / ?,你将能够看到所有可用的选项。

XCACLS。VBS是一个非常强大的脚本,可以更改/编辑ACL信息。c: \ windows \ system32系统\ cscript.exe xcacls。VBS help返回所有开关和选项。

你可以从微软支持页面得到正式的分布

这对我来说很管用:

  1. 手动打开被拒绝访问的文件夹。

  2. 在该文件夹中选择可执行/应用程序文件。

  3. 右键单击它,进入Properties -> Compatibility

  4. 现在查看特权级别并检查以管理员身份运行

  5. 点击Change Settings for all users

现在问题解决了。

使用Excel vba脚本提供和创建帐户。我需要授予文件夹和子文件夹的完整权限,这些文件夹和子文件夹是由工具使用我们的管理员'x'帐户创建给我们的新用户的。

cacls看起来像这样: cacls \FileServer\Users\Username /e /g域\Username:C

我需要将这段代码迁移到Windows 7及更高版本。我的解决方案是:

icacls \FileServer\Users\Username /grant:r域\Username:(OI)(CI)F /t

/grant:r -授予指定用户访问权限。权限替换以前授予的显式权限。如果没有:r,权限将被添加到之前授予的任何显式权限

(OI)(CI) -此文件夹、子文件夹和文件。

F -完全访问

/t -遍历所有子文件夹以匹配文件/目录。

这给了我一个服务器上的文件夹用户只能看到这个文件夹并创建子文件夹,他们可以读写文件。以及创建新的文件夹。

clin Darie说得好

我有很多脚本使用调用,我把它们移动到icacls 我怎么也找不到一个脚本来改变根挂载卷的例子:d:\datafolder。我最终创建了下面的脚本,它将卷作为临时驱动器挂载,然后应用,然后卸载它。这是我发现可以更新根挂载安全性的唯一方法。< / p >

1获取文件夹挂载GUID到临时文件,然后读取GUID将卷挂载为临时驱动器X:应用sec并记录更改,然后仅从X:驱动器卸载卷,这样挂载的文件夹除了应用sec之外不会被更改或中断。

以下是我的脚本示例:

**mountvol "d:\%1" /L >tempDrive.temp && FOR /f "tokens=*" %%I IN (tempDrive.temp) DO mountvol X: %%I
D:\tools\security\icacls.exe  %~2 /grant domain\group:(OI)(CI)F /T /C >>%~1LUNsec-%TDWEEK%-%TMONTH%-%TDAY%-%TYEAR%-%THOUR%-%TMINUTE%-%TAM%.txt
if exist x:\*.* mountvol X: /d**

为了防止其他人在这个页面上出错,如果你想在一个命令中将各种权限串在一起,我使用了这个:

icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)

请注意用于各种权限的csv字符串。

我尝试了下面的方法,它对我有用 1. 打开cmd.exe < br > 2. takeown /R /F *.* < br > 3.icacls * /T /grant [username]:(D) < br > 4. del *.* /S /Q < / p >

这样文件就可以成为我自己的访问权限,并分配给“删除”,然后我就可以删除文件和文件夹。

打开命令提示符,然后执行以下命令:

icacls "c:\somelocation\of\path" /q /c /t /grant Users:F

F给予完全访问权。

/q /c /t将权限应用到子文件夹。

注意:有时“以管理员身份运行”;会有所帮助。

我为此挣扎了一段时间,只有结合这个线程中的答案对我有效(在Windows 10上) 1. 打开cmd或PowerShell,进入文件
的文件夹 2. takeown /R /F
3.icacls * /T /grant dan:F

好运!

我是管理员,一些脚本在一个目录中的所有文件和子文件夹上对我的名字设置了“拒绝”权限。执行icacls "D:\test" /grant John:(OI)(CI)F /T命令没有工作,因为它似乎没有从这个列表中删除我的名字的“拒绝”权利。

唯一对我有用的是用icacls "D:\test" /reset /T命令重置所有权限。

批量文件夹创建和授予权限的工作我使用下面的powershell脚本。

Import-Csv "D:\Scripts\foldernames.csv" | foreach-object {
$username = $_.foldername


# foldername is the header of csv file


$domain = “example.com”


$folder= "D:\Users"


$domainusername = $domain+“\”+$username


New-Item $folder\$username –Type Directory


Get-Acl $folder\$username


$acl = Get-Acl $folder\$username


$acl.SetAccessRuleProtection($True, $False)


$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("Administrators","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)


$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("SYSTEM","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)


$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("$domain\Domain Admins","Read", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)


$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($domainusername,"Modify", "ContainerInherit, ObjectInherit", "None", "Allow")
$acl.AddAccessRule($rule)


Set-Acl $folder\$username $acl
}

注意:您必须在csv文件中创建相同的域用户名,否则您将遇到权限问题

损坏权限:重新获得对文件夹及其子对象的访问权

虽然这个问题的大部分答案都有一定的价值,但恕我直言,没有一个答案是完整的。下面(可能)是Windows 7的一个完美解决方案,如果你被损坏的权限设置锁定了一个文件夹:

icacls "c:\folder" /remove:d /grant:r Everyone:(OI)(CI)F /T

对于Windows 10,用户/SID必须在/remove:d选项之后指定:

icacls "c:\folder" /remove:d Everyone /grant:r Everyone:(OI)(CI)F /T
< p >。< br > 笔记 < / >强:

  1. 该命令应用于指定目录。

  2. 指定用户“Everyone”将设置尽可能广泛的权限,因为它包括every可能的用户。

  3. 选项“/remove:d”删除可能存在的任何显式DENY设置,因为这些设置覆盖了显式ALLOW设置:创建新的ALLOW设置的必要前提。这只是一个预防措施,因为通常没有DENY设置,但安全总比抱歉好

  4. 选项“/grant”创建了一个新的ALLOW设置,一个显式权限,替换(“:r”)任何和所有可能存在的显式ALLOW设置。

  5. “F”参数(即创建的权限)使其授予完全控制。

  6. "/T"参数添加递归,将这些更改应用到指定目录中的所有current子对象(即文件和子文件夹),以及文件夹本身。

  7. "(OI)"和"(CI)"参数还添加递归,将这些更改应用于随后创建的子对象 . 李< / p > < / >

附录(2019/02/10) -

今天有人善意地建议我使用Windows 10命令行以上,所以它就在这里。我没有Windows 10测试它,但请尝试一下,如果你有(然后你将请发表评论下面)。

第一步更改只涉及删除DENY设置。可能没有任何DENY设置,所以该选项可能没有区别。我的理解是,在Windows 7上,你不需要在/删除:d之后指定用户,但我可能错了!

附录(2019/11/21) -

用户astark建议用术语*S-1-1-0替换每一个人,以便命令独立于语言。我只有英文版的Windows安装,所以我不能测试这个建议,但它似乎是合理的。

Windows 10中没有“c:>”和“>”

例如:

F = Full Control
/e : Edit permission and kept old permission
/p : Set new permission

/e /p用户名:F

(这也修复了错误2502和2503)

C:\Windows\Temp /e /p用户名:F

  1. 使用资源管理器导航到要设置权限的顶级目录
  2. 在资源管理器窗口的地址栏中输入CMD
  3. 输入icacls . /grant John:(OI)(CI)F /T,其中John是用户名
  4. 利润

只是添加这个,因为这样看起来非常简单,其他人可能会受益-所有功劳都归于Călin Darie

当我运行命令时:

icacls "c:/path/to/folderA/folderB" /grant:r Everyone:(OI)(CI)F /T

folderB中的文件都没有被处理,这是通过输出消息表示的:

Successfully processed 0 files; Failed processing 0 files

然而,一旦我将指定的路径更改为父目录("c:/path/to/folderA")并重新运行命令,folderB中的所有文件都被成功处理。

注意:如果你想让folderA中的任何其他文件/文件夹不被处理,在运行上面的命令之前,尝试将所有这些文件/文件夹移动到不同的位置。

希望这对遇到同样问题的人有所帮助。