Виправлення помилок командного рядка "Цей список контролю доступу не знаходиться в канонічній формі"


9

На кількох наших робочих станціях для розробників нам стало страшно "Цей список контролю доступу не знаходиться в канонічній формі і тому не може бути змінений". помилка, коли ми намагаємося встановити дозволи на певні папки. Ми не змогли розібратися, що пошкоджує ці ACL.

Зараз єдиний спосіб, який я знаю, як це виправити - це клацнути правою кнопкою миші пошкоджену папку / файл, вибрати властивості та перейти на вкладку Безпека. Потім Windows помітить корупцію та запропонує її виправити. Мені це не подобається, оскільки це вручну і вимагає від користувача провести деякі дослідження, щоб з'ясувати, яка папка / файл пошкоджена.

Чи є десь скрипт або програма, яка зробить це автоматично? Я бачу, що у icaclsнього є /verifyпараметр, але він просто показує мені, що ACL у файлі / папці пошкоджені. Він не пропонує нічого виправити.

Відповіді:


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

Нарешті я зміг зрозуміти автоматичне виправлення цього. Коли ви зателефонуєте у Set-Aclкомандлет PowerShell , він буде переупорядковувати 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
Дякую за хитрість. Сьогодні у мене виникли проблеми, і я написав невеликий пакет оболонок для автоматизації виправлення: gist.github.com/vbfox/8fbec5c60b0c16289023
Жульєн Ронкалья

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

Тому мені довелося явно застосувати ACL з файлу, що має правильний, як згадував @mschneider


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

Ця проблема з’являється при використанні Cygwin. Він намагається імітувати дозволи POSIX на вершині Windows ACL. Це часто призводить до неканонічних ACL, які є законними, але не можуть бути вирішені належним чином через Explorerr.exe .

Ви можете вимкнути цю проблематичну емуляцію, встановивши опцію "noacl", наприклад у /etc/fstab:

none /cygdrive cygdrive binary,noacl,posix=0,user 0 0

-1
  1. У IIS клацніть правою кнопкою миші папку з проблемою
  2. Редагувати дозволи ...
  3. Виберіть вкладку Безпека
  4. Натисніть кнопку "Редагувати" та збережіть (це, здається, повторно замовити acl)
  5. Підтвердьте всі спливаючі вікна

Це рішення вже згадується у питанні. Однак автор просить автоматичного рішення.
scai

Крім того, це дозволи NTFS, тому IIS не задіяний.
обплетені шматочки
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.