如何在Windows中使用命令行向用户授予目录权限?


Answers:


419

从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 =容器继承-此标志指示从属容器将继承此ACE。
  • OI =对象继承-此标志指示从属文件将继承ACE。
  • /T=递归地应用于现有文件和子文件夹。(OI并且CI仅适用于新文件和子文件夹)。信用:@AlexSpence发表评论。

有关完整的文档,您可以icacls不带任何参数运行“ ”,或在此处此处查看Microsoft文档。


4
费利佩:(OI)和(CI)参数使其具有递归性
Chris Miller 2013年

22
我在尝试更改Windows资源管理器UI中的权限被拒绝访问时遇到问题。在最后添加/ T标志替换了现有对象,并为我解决了问题。C:> icacls“ D:\ test” / grant John:(OI)(CI)F / T
Alex Spence14年

9
@AlexSpence很好!该/ T是需要更新的权限,现有的文件和文件夹。(OI)和(CI)仅适用于以后创建的文件和文件夹。
Jesse 2014年

5
来自* nix领域,用于“ chown / chmod”以通过CLI进行访问和设置权限,该线程非常有用。
bgarlock

5
如果在Windows 10的Powershell中运行此命令,则会收到有关“无法识别OI”的错误。解决方案:将user + perms参数放在引号中。例如:C:\>icacls "D:\test" /grant "John:(OI)(CI)F" /T
JDS

78

您也可以使用ICACLS。

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

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

授予IIS用户“ 修改”权限C:\MyFolder(如果需要,IIS可以将文件读/写到特定文件夹中):

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

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


考虑到这cacls一点已经消失,使用icacls甚至是更多的理由。
伊恩·博伊德

2
直到/grant Users:(OI)(CI)F使用

我需要Users用其他东西代替还是否?根据icacls "C:\MyFolder" /grant Users:F
iori 2015年

如果当前用户是名为“ Users”的用户组的成员(在Windows 7中通常是这种情况),则向该组授予权限将影响当前用户的访问权限。在任何其他情况下,将名称Users替换为当前用户的实际名称(例如John),从而:/ grant John:(OI)(CI)F
Ed999 '18

24

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

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

F 提供完全访问权限。

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

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


需要“以管理员身份运行”,这是最好的答案!
Jeb50

20

使用cacls命令。在这里查看信息。

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

哪里,

/ p:设置新权限

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

{USERNAME}:用户名

{PERMISSION}:权限可以是:

R-读取

W-写

C-更改(写)

F-完全控制

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

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

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

C:> cacls /?


好答案!唯一要注意的是,文件是您要更改其权限的实际文件。也许[files]或{files}是一个更好的解释。
康纳·罗斯

14
Cacls已弃​​用!
Hardik Thaker 2013年

cacls是相关的;它仍然在Windows 10; 微软也将弃用cmd.exePowershell。

1
@ Chinggis6“仍然可用”并不意味着可以使用某些东西,也不建议其他人使用。另外,cmd.exe不建议弃用,也不太可能这样做,因此根本不赞成这样做,icacls相反。
underscore_d

1
我知道。我没有说明使用或推荐是一个好主意cacls.exe。我也没有提到cmd.exe已被弃用。我认为人们至少应该仅出于向后兼容性或其他任何原因而意识到其在更高版本中的可用性。

12

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

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


7

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

尽管大多数回复该问题的答案都有其优点,但恕我直言,它们都没有提供完整的解决方案。如果您由于损坏的权限设置而无法锁定文件夹,则以下(可能是)Windows 7的完美解决方案:

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

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

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


注意事项

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

  2. 指定用户“每个人”设置了最大可能的权限,因为它包括每个可能的用户。

  3. 选项“ / remove:d”删除可能存在的任何明确的DENY设置,因为这些设置将覆盖明确的ALLOW设置:创建新ALLOW设置的必要前提。这仅是一种预防措施,因为通常没有DENY设置,但是比后悔更安全。

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

  5. “ F”参数(即创建的权限)使它具有FULL控制权。

  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 代替Everyone,以使命令独立于语言。我只有英文安装的Windows,因此无法测试该建议,但这似乎是合理的。


不需要提供INHERITED权限,因为EXPLICIT权限会覆盖它们。因此,创建新的显式设置会使所有可能存在的继承设置无效(因为新的显式设置包括递归)。
Ed999

Invalid parameter "/remove:d"
DFSFOT

我正在Windows 7上运行(只能运行)icacls.exe。我无法对Windows 8或10上可能存在的任何更改进行评论或测试。正如我在Windows 7 64位版本上所测试的那样,该选项对删除DENY设置有效。如果没有拒绝设置,使用它可能会导致错误消息,但是如果没有拒绝设置,则无论如何都无法删除它们。
Ed999

无法完全重现我的原始答案中的命令行(保存目录路径)将导致命令失败。特别是,请勿添加答案中没有的任何引号。如果用引号将/ remove:d选项括起来(例如),该命令当然会失败。
Ed999

1
@DFSFOT好,我很同情。但是我使用Windows7。在上帝的恩赐下,我永远不会使用Windows10。我宁愿迁移到Ubuntu!我怀疑 / remove:g可能会删除所有权限,包括ALLOW和DENY条目(尽管在这种情况下,“ granted”意味着仅ALLOW,因此它不会处理任何DENY条目);而/ remove:d大概只会删除DENY条目,而保留所有ALLOW条目。但是我当然不能确定。
Ed999

5

我这个挣扎了一会儿,只有结合在这个线程的答案为我工作(在Windows 10):
1.打开在cmd或PowerShell和转到文件夹与文件
2. takeown / R / F
3. icacls * / T / grant dan:F

祝好运!


3

以防万一在此页面上遇到其他任何人,如果您想在一个命令中将各种权限串在一起,我使用了以下方法:

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

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


非常感谢 它帮助我设置了RX&RD的权限。在Internet中给出的大多数示例中,/ F都具有完全许可权,但事实并非如此。
玛尼

2

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

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

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

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

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

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

F-完全访问

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

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


1

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

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


3
您能否提供参考资料XCACLS.VBS
杰里米·J·斯塔彻

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文件中创建相同的域用户名,否则会出现权限问题


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

2
这些是文件属性(只读,存档,系统,隐藏),而不是权限,这些属性链接到用户帐户。
罗宾·贝内特

0

坎林·达里(CălinDarie)

我有很多脚本可以使用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**

0

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

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


通过指定''/ remove:d''删除可能存在的任何明确的DENY设置,可以不使用reset命令来解决该问题-请参阅上文中的最佳解决方案。
Ed999

-1

在Windows 10中无法使用“ c:>”和“>”

例如:

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


-5

这对我有用:

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

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

  3. 右键单击它,然后转到Properties->Compatibility

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

  5. 点击Change Settings for all users

现在问题已解决。


问题是要通过命令行完成上述操作。虽然您的建议可能效果很好,但如果您仅对需要设置的服务器具有终端访问权限(ssh),则该建议不适用,因此您将需要使用cmd脚本
Ivaylo Slavov 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.