311

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

4

17 回答 17

481

从 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= 递归应用到现有文件和子文件夹。(OI并且CI仅适用于新文件和子文件夹)。信用:@AlexSpence 的评论。

要获得完整的文档,您可以不带参数运行“ ”,或在此处此处icacls查看 Microsoft 文档

于 2011-11-29T12:51:21.693 回答
84

您也可以使用 ICACLS。

授予用户组对文件夹的完全控制权:

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

授予IIS 用户修改权限C:\MyFolder(如果您需要 IIS 能够将文件读/写到特定文件夹中):

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

如果你做ICACLS /?您将能够看到所有可用的选项。

于 2012-08-20T05:24:20.000 回答
41

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

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

F提供完全访问权限。

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

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

于 2015-10-01T17:44:36.033 回答
22

使用cacls命令。请参阅此处的信息。

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

在哪里,

/p : 设置新权限

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

{USERNAME}:用户名

{PERMISSION} :权限可以是:

R - 读

W - 写

C - 改变(写)

F - 完全控制

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

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

通过键入以下命令阅读完整的帮助:

C:> cacls /?

于 2010-05-28T12:01:02.227 回答
18

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

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

于 2015-07-13T18:24:06.133 回答
8

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

尽管针对该问题发布的大多数答案都有一些优点,但恕我直言,它们都没有给出完整的解决方案。如果您因权限设置损坏而无法访问文件夹,则以下(可能是)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  

.
备注

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

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

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

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

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

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

  7. “(OI)”和“(CI)”参数还添加了递归,将这些更改应用于随后创建的子对象。
    .

附录 (2019/02/10) -

今天有人向我推荐了上面的 Windows 10 命令行,所以就在这里。我还没有 Windows 10 来测试它,但如果你有,请尝试一下(然后请你在下面发表评论)。

更改仅涉及删除 DENY 设置作为第一步。很可能不存在任何 DENY 设置,因此该选项可能没有任何区别。我的理解是,在 Windows 7 上,您不需要在/remove:d之后指定用户,但我可能错了!

.

附录 (2019/11/21) -

用户astark建议使用术语 *S-1-1-0 替换每个人,以使命令与语言无关。我只有英文版的 Windows,所以我无法测试这个提议,但它似乎是合理的。

于 2017-12-15T00:55:53.497 回答
7

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

祝你好运!

于 2015-12-27T15:08:05.407 回答
4

使用 Excel vba 脚本来配置和创建帐户。我需要将使用我们的管理员“x”帐户创建的文件夹和子文件夹的完全权限授予我们的新用户。

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

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

icacls \FileServer\Users\用户名 /grant:r 域\用户名:(OI)(CI)F /t

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

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

F - 完全访问

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

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

于 2014-04-23T16:38:09.440 回答
4

以防万一有其他人在此页面上绊倒,如果您想在一个命令中将各种权限串在一起,我使用了这个:

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

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

于 2015-03-23T02:06:57.387 回答
1

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

您可以从Microsoft 支持页面获得官方分发

于 2012-09-20T15:26:41.670 回答
1

使用以下 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 文件中创建相同的域用户名,否则您将遇到权限问题

于 2017-05-25T04:43:58.837 回答
0
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
于 2011-11-24T10:02:34.470 回答
0

优秀的点 Călin Darie

我有很多脚本可以使用 cacls 我将它们移动到 icacls 但是我找不到更改根挂载卷的脚本示例:d:\datafolder。我终于创建了下面的脚本,它将卷安装为临时驱动器,然后应用 sec. 然后卸载它。这是我发现可以更新根挂载安全性的唯一方法。

1 将文件夹挂载 GUID 获取到临时文件,然后读取 GUID 以将卷挂载为临时驱动器 X:应用 sec 并记录更改,然后仅从 X:驱动器卸载卷,因此挂载的文件夹不会被更改或中断其他然后应用秒。

这是我的脚本示例:

**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**
于 2015-02-03T21:55:04.140 回答
0
  1. 使用资源管理器导航到要设置权限的顶级目录
  2. 在资源管理器窗口的地址栏中键入 cmd
  3. 输入icacls . /grant John:(OI)(CI)F /TJohn 是用户名的位置
  4. 利润

只是添加这个是因为它看起来非常简单,而且其他人可能会获利——所有功劳都归于功劳Călin Darie

于 2020-07-21T21:48:29.823 回答
0

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

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

于 2016-02-18T15:27:16.953 回答
-1

在没有“c:>”和“>”的情况下工作的 Windows 10

例如:

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

cacls "文件或文件夹路径" /e /p 用户名:F

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

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

于 2020-01-10T09:09:55.953 回答
-5

这对我有用:

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

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

  3. 右键单击它并转到Properties->Compatibility

  4. 现在查看Privilege Level并检查它Run As Administrator

  5. 点击Change Settings for all users

现在问题已经解决了。

于 2013-03-31T05:29:16.590 回答