如何使用Windows中的命令行为用户授予权限?

问题描述 投票:234回答:15

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

windows command-prompt file-permissions
15个回答
369
投票

截至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”或查看Microsoft文档herehere


1
投票

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

你可以从Microsoft Support Page获得官方发行


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

0
投票

优点Calin Darie

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

1获取文件夹挂载GUID到临时文件然后读取GUID以将卷装载为临时驱动器X:应用秒并记录更改然后仅从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命令不起作用,因为它似乎没有从我的名单中删除此列表中的“拒绝”。

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


-4
投票

这对我有用:

  1. 手动打开拒绝访问的文件夹。
  2. 选择该文件夹中的可执行文件/应用程序文件。
  3. 右键单击它,然后转到属性 - >兼容性
  4. 现在,请查看权限级别,并将其选中“以管理员身份运行”
  5. 单击所有用户的“更改设置”。

问题现在解决了。


70
投票

您也可以使用ICACLS。

要将Users组完全控制权授予文件夹:

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

C:\MyFolder的IIS用户授予修改权限(如果您需要IIS能够将R / W文件放入特定文件夹):

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

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


19
投票

使用cacls命令。查看信息here

CACLS文件/电子邮件{USERNAME}:{PERMISSION}

哪里,

/ p:设置新权限

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

{USERNAME}:用户名

{PERMISSION}:许可可以是:

R - 阅读

W - 写

C - 改变(写)

F - 完全控制

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

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

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

C:> cacls /?


19
投票

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

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

F提供完全访问权限。

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

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


11
投票

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

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


5
投票

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

虽然回答这个问题的大部分答案都有一些优点,但IMHO都没有提供完整的解决方案。如果您通过损坏的权限设置锁定文件夹,则以下(可能是)Windows 7的完美解决方案:

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

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

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”参数(即创建的权限)使其成为FULL控制的授权。
  6. “/ T”参数添加递归,将这些更改应用于指定目录(即文件和子文件夹)中的所有当前子对象,以及文件夹本身。
  7. “(OI)”和“(CI)”参数还添加递归,将这些更改应用于随后创建的子对象。 。

ADDENDUM(2019/02/10) -

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

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


4
投票

我挣扎了一段时间,只结合这个线程的答案为我工作(在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字符串。


2
投票

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

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

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

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

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

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

F - 完全访问权限

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

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

© www.soinside.com 2019 - 2024. All rights reserved.