如何使用 Windows 命令行向用户授予目录(读取、写入、修改)权限?
17 回答
从 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。
授予用户组对文件夹的完全控制权:
>icacls "C:\MyFolder" /grant Users:F
授予IIS 用户修改权限C:\MyFolder
(如果您需要 IIS 能够将文件读/写到特定文件夹中):
>icacls "C:\MyFolder" /grant IIS_IUSRS:M
如果你做ICACLS /?您将能够看到所有可用的选项。
打开命令提示符,然后执行以下命令:
icacls "c:\somelocation\of\path" /q /c /t /grant Users:F
F
提供完全访问权限。
/q /c /t
将权限应用于子文件夹。
注意:有时“以管理员身份运行”会有所帮助。
使用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 /?
我尝试了以下方法,它对我有用:
1.打开cmd.exe
2. takeown /R /F *.*
3. icacls * /T /grant [username]:(D)
4.del *.* /S /Q
这样文件就可以成为我自己的访问权限并分配给“删除”,然后我可以删除文件和文件夹。
损坏的权限:重新获得对文件夹及其子对象的访问权限
尽管针对该问题发布的大多数答案都有一些优点,但恕我直言,它们都没有给出完整的解决方案。如果您因权限设置损坏而无法访问文件夹,则以下(可能是)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
.
备注:
该命令应用于指定的目录。
指定用户“Everyone”会设置尽可能广泛的权限,因为它包括所有可能的用户。
选项 "/remove:d" 删除任何可能存在的显式 DENY 设置,因为这些设置会覆盖显式 ALLOW 设置:这是创建新 ALLOW 设置的必要前提。这只是一种预防措施,因为通常没有 DENY 设置,但安全总比抱歉好。
选项“/grant”创建一个新的 ALLOW 设置,一个显式权限替换 (“:r”) 任何和所有可能存在的显式 ALLOW 设置。
“F”参数(即创建的权限)使这成为授予完全控制权。
“/T”参数添加递归,将这些更改应用于指定目录(即文件和子文件夹)中的所有当前子对象,以及文件夹本身。
“(OI)”和“(CI)”参数还添加了递归,将这些更改应用于随后创建的子对象。
.
附录 (2019/02/10) -
今天有人向我推荐了上面的 Windows 10 命令行,所以就在这里。我还没有 Windows 10 来测试它,但如果你有,请尝试一下(然后请你在下面发表评论)。
更改仅涉及删除 DENY 设置作为第一步。很可能不存在任何 DENY 设置,因此该选项可能没有任何区别。我的理解是,在 Windows 7 上,您不需要在/remove:d之后指定用户,但我可能错了!
.
附录 (2019/11/21) -
用户astark建议使用术语 *S-1-1-0 替换每个人,以使命令与语言无关。我只有英文版的 Windows,所以我无法测试这个提议,但它似乎是合理的。
我为此苦苦挣扎了一段时间,只有结合这个线程中的答案对我有用(在 Windows 10 上):
1. 打开 cmd 或 PowerShell 并转到包含文件的文件夹
2. takeown /R /F 。
3. icacls * /T /grant dan:F
祝你好运!
使用 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 - 遍历所有子文件夹以匹配文件/目录。
这给了我这个服务器上的一个文件夹,用户只能看到该文件夹并创建子文件夹,他们可以读取和写入文件。以及创建新文件夹。
以防万一有其他人在此页面上绊倒,如果您想在一个命令中将各种权限串在一起,我使用了这个:
icacls "c:\TestFolder" /grant:r Test_User:(OI)(CI)(RC,RD,RX)
请注意各种权限的 csv 字符串。
XCACLS.VBS 是一个非常强大的脚本,可以更改/编辑 ACL 信息。c:\windows\system32\cscript.exe xcacls.vbs help 返回所有开关和选项。
使用以下 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 文件中创建相同的域用户名,否则您将遇到权限问题
attrib +r +a +s +h <folder name> <file name> to hide
attrib -r -a -s -h <folder name> <file name> to unhide
优秀的点 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**
- 使用资源管理器导航到要设置权限的顶级目录
- 在资源管理器窗口的地址栏中键入 cmd
- 输入
icacls . /grant John:(OI)(CI)F /T
John 是用户名的位置 - 利润
只是添加这个是因为它看起来非常简单,而且其他人可能会获利——所有功劳都归于功劳Călin Darie
。
我是管理员,一些脚本在我的名字上对目录中的所有文件和子文件夹设置了“拒绝”权限。执行icacls "D:\test" /grant John:(OI)(CI)F /T
命令不起作用,因为它似乎没有从这个列表中删除我名字中的“拒绝”。
唯一对我有用的是使用icacls "D:\test" /reset /T
命令重置所有权限。
在没有“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
这对我有用:
手动打开拒绝访问的文件夹。
选择该文件夹中的可执行文件/应用程序文件。
右键单击它并转到Properties->Compatibility
现在查看Privilege Level并检查它Run As Administrator
点击Change Settings for all users。
现在问题已经解决了。