Naprawianie błędów „Ta lista kontroli dostępu nie ma formy kanonicznej” z wiersza poleceń


9

Na kilku naszych programistycznych stacjach roboczych zaczęliśmy się bać „Ta lista kontroli dostępu nie jest w formie kanonicznej i dlatego nie można jej modyfikować”. błąd, gdy próbujemy ustawić uprawnienia do niektórych folderów. Nie byliśmy w stanie dowiedzieć się, co psuje te listy ACL.

W tej chwili jedynym sposobem, w jaki mogę to naprawić, jest kliknięcie uszkodzonego folderu / pliku prawym przyciskiem myszy, wybranie Właściwości i kliknięcie karty Zabezpieczenia. System Windows zauważy wówczas uszkodzenie i zaoferuje jego naprawę. Nie podoba mi się to, ponieważ jest to instrukcja ręczna i wymaga od użytkownika przeprowadzenia pewnych badań w celu ustalenia, który folder / plik jest uszkodzony.

Czy jest gdzieś skrypt lub program, który zrobi to automatycznie? Widzę, że icaclsma /verifyparametr, ale po prostu pokazuje mi, że listy ACL w pliku / folderze są uszkodzone. Nie oferuje niczego do naprawy.

Odpowiedzi:


6

Możesz spróbować użyć prostego skryptu PowerShell, aby zastąpić uszkodzone pliki acl acl innego pliku: get-acl path_to_file_with_known_good_acl | set-acl -path path_to_corrupt_file


Inna odpowiedź sugeruje, że można po prostu zrobić get-acl path_to_corrupt_file | set-acl -path ptah_to_corrupt_file.
binki,

5

W końcu udało mi się wymyślić zautomatyzowane rozwiązanie tego problemu. Wywołanie polecenia Set-Aclcmdlet programu PowerShell spowoduje prawidłowe uporządkowanie list ACL:

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

Oczywiście może to być element nadrzędny zawalonego katalogu, więc powinieneś zrobić kilka kroków, aby znaleźć winowajcę. Użyj, icacls C:\Path\To\Item\With\Suspect\CL /verifyaby dowiedzieć się, czy coś wymaga naprawy.

W naszym środowisku Cygwin jest prawdopodobnym winowajcą: podczas tworzenia katalogów lubi nadawać im uprawnienia w stylu POSIX, zamiast polegać na systemie Windows do zarządzania bezpieczeństwem systemu plików.


1
Dzięki za podstęp. Miałem dzisiaj problem i napisałem mały PowerShell, aby zautomatyzować naprawę
Julien Roncaglia

1

Dla mnie były dwa problemy: niekanoniczna ACL + błędna reguła zadeklarowana dla NULL SID (WTH?). Sugeruję, że było to spowodowane cygwinową wersją git.

W każdym razie ponowne zastosowanie tej samej listy ACL nie miało sensu:

> 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

Więc musiałem jawnie zastosować ACL z pliku, który ma poprawny, jak wspomniano w @mschneider


1

icacls może to naprawić również:

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

Inne przydatne polecenia, odpowiednik chmod 0777 PLIK, chown root PLIK

  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. W IIS kliknij prawym przyciskiem myszy folder z problemem
  2. Edytuj uprawnienia ...
  3. Wybierz kartę Zabezpieczenia
  4. Kliknij przycisk „Edytuj” i zapisz (wydaje się, że ponownie zamawia acl)
  5. Potwierdź wszystkie wyskakujące okienka

To rozwiązanie jest już wspomniane w pytaniu. Jednak autor prosi o automatyczne rozwiązanie.
scai

Są to także uprawnienia NTFS, więc IIS nie jest zaangażowany.
splattered bity
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.