Behebung von Fehlern in der Befehlszeile "Diese Zugriffssteuerungsliste ist nicht in kanonischer Form"

9

Auf mehreren unserer Entwickler-Workstations wurde die gefürchtete Meldung "Diese Zugriffssteuerungsliste ist nicht in kanonischer Form und kann daher nicht geändert werden." Fehler, wenn wir versuchen, Berechtigungen für bestimmte Ordner festzulegen. Wir konnten nicht herausfinden, was diese ACLs beschädigt.

Derzeit kann ich das Problem nur beheben, indem ich mit der rechten Maustaste auf den beschädigten Ordner / die beschädigte Datei klicke, Eigenschaften auswähle und auf die Registerkarte Sicherheit klicke. Windows wird dann die Beschädigung bemerken und anbieten, sie zu beheben. Ich mag das nicht, weil es manuell ist und der Benutzer einige Untersuchungen durchführen muss, um herauszufinden, welcher Ordner / welche Datei beschädigt ist.

Gibt es irgendwo ein Skript oder Programm, das dies automatisch erledigt? Ich sehe, dass dies icaclseinen /verifyParameter hat, aber es zeigt mir nur, dass die ACLs in einer Datei / einem Ordner beschädigt sind. Es bietet nichts an, um etwas zu reparieren.

bespritzte Bits
quelle

Antworten:

6

Sie können versuchen, ein einfaches PowerShell-Skript zu verwenden, um die aktuellen Dateien acl mit der acl einer anderen Datei zu überschreiben: get-acl path_to_file_with_known_good_acl | set-acl -path path_to_corrupt_file

mschneider
quelle
Die andere Antwort legt nahe, dass Sie einfach tun könnten get-acl path_to_corrupt_file | set-acl -path ptah_to_corrupt_file.
Binki
5

Ich konnte endlich eine automatisierte Lösung dafür finden. Wenn Sie das Set-AclCmdlet von PowerShell aufrufen, werden die ACLs korrekt neu angeordnet:

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

Natürlich könnte es sich um ein übergeordnetes Element des Verzeichnisses handeln, das durcheinander gebracht wurde. Sie sollten also einige Durchgänge durchführen, um den Schuldigen zu finden. Verwenden Sie icacls C:\Path\To\Item\With\Suspect\CL /verifydiese Option, um herauszufinden, ob etwas repariert werden muss.

In unserer Umgebung ist Cygwin der wahrscheinliche Schuldige: Wenn es Verzeichnisse erstellt, erteilt es ihnen gerne Berechtigungen im POSIX-Stil, anstatt sich bei der Verwaltung der Dateisystemsicherheit auf Windows zu verlassen.

bespritzte Bits
quelle
1
Danke für den Trick. Ich hatte heute das Problem und schrieb eine kleine PowerShell, um die Korrektur zu automatisieren: gist.github.com/vbfox/8fbec5c60b0c16289023
Julien Roncaglia
1

Für mich gab es doppelte Probleme: Nicht-kanonische ACL + fehlerhafte Regel für NULL SID (WTH?) Deklariert. Ich schlage vor, es wurde durch die Cygwin-Version von Git verursacht.

In meinem Fall ergab das erneute Anwenden derselben ACL keinen Sinn:

> 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

Also musste ich explizit ACL aus einer Datei mit der richtigen anwenden, wie von @mschneider erwähnt

oxfn
quelle
1

icacls kann es auch beheben:

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

Andere nützliche Befehle, äquivalent zu 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
mosh
quelle
1

Dieses Problem tritt bei Verwendung von Cygwin auf. Es wird versucht, POSIX-Dateiberechtigungen über Windows-ACLs zu emulieren. Dies führt häufig zu nicht-kanonischen ACLs, die legal sind, aber von explorer.exe nicht ordnungsgemäß behandelt werden können .

Sie können diese problematische Emulation deaktivieren , indem Sie mit der „noacl“ Option Montage, zB in /etc/fstab:

none /cygdrive cygdrive binary,noacl,posix=0,user 0 0
ManuelAtWork
quelle
-1
  1. Klicken Sie in IIS mit der rechten Maustaste auf den Ordner mit dem Problem
  2. Berechtigungen bearbeiten ...
  3. Wählen Sie die Registerkarte Sicherheit
  4. Klicken Sie auf die Schaltfläche 'Bearbeiten' und speichern Sie (dies scheint die ACL neu zu ordnen).
  5. Bestätigen Sie alle Popups
James
quelle
Diese Lösung wird bereits in der Frage erwähnt. Der Autor bittet jedoch um eine automatische Lösung.
Scai
Dies sind auch NTFS-Berechtigungen, sodass IIS nicht beteiligt ist.
bespritzte Bits