Sửa lỗi Danh sách điều khiển truy cập này không ở dạng chính tắc Lỗi lỗi từ dòng lệnh


9

Trên một số máy trạm dành cho nhà phát triển của chúng tôi, chúng tôi đã nhận được sự sợ hãi "Danh sách kiểm soát truy cập này không ở dạng chính tắc và do đó không thể sửa đổi." lỗi khi chúng tôi thử và đặt quyền trên các thư mục nhất định. Chúng tôi đã không thể tìm ra những gì đang làm hỏng các ACL này.

Ngay bây giờ, cách duy nhất tôi biết để khắc phục là nhấp chuột phải vào thư mục / tệp bị hỏng, chọn Thuộc tính và nhấp vào tab Bảo mật. Windows sau đó sẽ thông báo tham nhũng và đề nghị sửa nó. Tôi không thích điều này bởi vì nó là thủ công và yêu cầu người dùng thực hiện một số điều tra để tìm ra thư mục / tệp nào bị hỏng.

Có một kịch bản hoặc chương trình ở đâu đó sẽ làm điều này tự động? Tôi thấy rằng icaclscó một /verifytham số, nhưng nó chỉ cho tôi thấy rằng các ACL trên một tệp / thư mục bị hỏng. Nó không cung cấp để sửa chữa bất cứ điều gì.

Câu trả lời:


6

Bạn có thể thử sử dụng tập lệnh PowerShell đơn giản để ghi đè các tệp bị lỗi acl bằng acl của tệp khác: get-acl path_to_file_with_known_good_acl | set-acl -path path_to_corrupt_file


Các câu trả lời khác gợi ý rằng bạn chỉ có thể làm get-acl path_to_corrupt_file | set-acl -path ptah_to_corrupt_file.
binki

5

Cuối cùng tôi đã có thể tìm ra một bản sửa lỗi tự động cho việc này. Khi bạn gọi Set-Acllệnh ghép ngắn của PowerShell , nó sẽ sắp xếp lại các ACL chính xác:

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

Tất nhiên, nó có thể là cha mẹ của thư mục bị rối, vì vậy bạn nên thực hiện một số thao tác để tìm ra thủ phạm. Sử dụng icacls C:\Path\To\Item\With\Suspect\CL /verifyđể tìm ra nếu một cái gì đó cần sửa chữa.

Trong môi trường của chúng tôi, Cygwin là thủ phạm có khả năng: khi tạo thư mục, nó thích cấp quyền theo kiểu POSIX cho chúng, thay vì dựa vào Windows để quản lý bảo mật hệ thống tệp.


1
Cảm ơn vì mánh khóe. Tôi đã gặp sự cố ngày hôm nay và đã viết một quyền hạn nhỏ để tự động sửa lỗi: gist.github.com/vbfox/8fbec5c60b0c16289023
Julien Roncaglia

1

Đối với tôi đã có rắc rối kép: quy tắc ACL + không chính tắc được khai báo cho NULL SID (WTH?). Tôi đề nghị nó được gây ra bởi phiên bản cygwin của git.

Dù sao, trong trường hợp của tôi, việc áp dụng lại cùng một ACL không có ý nghĩa gì:

> 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

Vì vậy, tôi đã phải áp dụng rõ ràng ACL từ tệp có chính xác, như được đề cập bởi @mschneider


1

icacls cũng có thể sửa nó:

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

Các lệnh tiện dụng khác, tương đương với 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. Trong IIS bấm chuột phải vào thư mục có vấn đề
  2. Chỉnh sửa quyền ...
  3. Chọn tab Bảo mật
  4. Nhấp vào nút 'Chỉnh sửa' và lưu (điều này dường như để đặt lại acl)
  5. Xác nhận tất cả Popup

Giải pháp này đã được đề cập trong câu hỏi. Tuy nhiên tác giả yêu cầu một giải pháp tự động.
scai

Ngoài ra, đây là các quyền NTFS, vì vậy IIS không liên quan.
các mảnh vỡ rải rác
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.