从命令行修复“此访问控制列表不是规范形式”错误


9

在我们的几个开发人员工作站上,我们一直感到恐惧:“此访问控制列表不是规范形式的,因此无法修改。” 当我们尝试在某些文件夹上设置权限时出错。我们还无法弄清楚是什么破坏了这些ACL。

现在,我知道要修复的唯一方法是右键单击损坏的文件夹/文件,选择“属性”,然后单击“安全性”选项卡。然后,Windows将注意到损坏并提出修复。我不喜欢它,因为它是手动的,并且要求用户进行一些调查以找出损坏的文件夹/文件。

是否有脚本或程序可以自动执行此操作?我看到icacls有一个/verify参数,但是它只显示文件/文件夹上的ACL已损坏。它不提供修复任何内容。

Answers:


6

您可以尝试使用简单的PowerShell脚本用另一个文件的acl覆盖当前文件acl: get-acl path_to_file_with_known_good_acl | set-acl -path path_to_corrupt_file


对方的回答表明,你可以只是做get-acl path_to_corrupt_file | set-acl -path ptah_to_corrupt_file
宾基

5

我终于能够找到针对此问题的自动修复程序。当您调用PowerShell的Set-Aclcmdlet时,它将正确地重新排列ACL:

$path = C:\Path\To\Item\With\Borked\ACL
$acl = Get-Acl $path
Set-Acl $path $acl

当然,它可能是混乱的目录的父目录,因此您应该进行遍历才能找到罪魁祸首。使用icacls C:\Path\To\Item\With\Suspect\CL /verify找出是否有什么需要修复。

在我们的环境中,Cygwin可能是罪魁祸首:创建目录时,它喜欢为其赋予POSIX样式的权限,而不是依靠Windows来管理文件系统安全性。


1
谢谢你的把戏。我今天遇到了问题,并写了一个小的powershell来自动完成修复:gist.github.com/vbfox/8fbec5c60b0c16289023
Julien

1

对我来说,这有双重麻烦:非规范ACL +为NULL SID(WTH?)声明了错误规则。我建议这是由cygwin版本的git引起的。

无论如何,就我而言,重新应用相同的 ACL没有任何意义:

> Set-Acl $f.FullName (Get-Acl $f.FullName)
> (Get-Acl $f.FullName).AreAccessRulesCanonical
False
> (Get-Acl $f.FullName).GetAccessRules($True, $False, [System.Security.Principal.NTAccount]) | ? {$_.Identityeference.Value -eq "NULL SID" }
FileSystemRights  : WriteExtendedAttributes, ExecuteFile, DeleteSubdirectoriesAndFiles, ReadPermissions
AccessControlType : Deny
IdentityReference : NULL SID
IsInherited       : False
InheritanceFlags  : None
PropagationFlags  : None

因此,我必须从@mschneider提到的文件中正确地应用ACL正确的文件


1

icacls也可以修复它:

c:\> accesschk -q FILE
Error: FILE has a non-canonical DACL:
   Explicit Deny after Explicit Allow

c:\> icacls FILE /t /q /c /reset
Successfully processed 1 files; Failed processing 0 files

c:\> accesschk -q FILE
.. OK

其他方便的命令,等同于chmod 0777 FILE,chown root FILE

  icacls  FILE /t /q /c /grant    :r Everyone:F
  icacls  FILE /t /q /c /grant    :r Everyone:F /inheritance:r
  icacls  FILE /t /q /c /setowner Administrators


-1
  1. 在IIS中,右键单击出现问题的文件夹
  2. 编辑权限...
  3. 选择安全选项卡
  4. 单击“编辑”按钮并保存(这似乎重新排列了ACL)
  5. 确认所有弹出窗口

问题中已经提到了这种解决方案。但是作者要求一种自动解决方案。
scai 2015年

另外,这些都是NTFS权限,因此不涉及IIS。
喷溅的比特
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.