แก้ไข“ รายการควบคุมการเข้าถึงนี้ไม่ได้อยู่ในรูปแบบที่ยอมรับได้” จากบรรทัดคำสั่ง


9

ในเวิร์คสเตชั่นสำหรับนักพัฒนาของเราเราได้รับความหวาดกลัว "รายการควบคุมการเข้าถึงนี้ไม่ได้อยู่ในรูปแบบมาตรฐานดังนั้นจึงไม่สามารถแก้ไขได้" เกิดข้อผิดพลาดเมื่อเราลองและตั้งค่าการอนุญาตในบางโฟลเดอร์ เราไม่สามารถระบุได้ว่าอะไรคือสิ่งที่ทำให้ ACL เหล่านี้เสียหาย

ตอนนี้วิธีเดียวที่ฉันรู้ในการแก้ไขคือการคลิกขวาที่โฟลเดอร์ / ไฟล์ที่เสียหายเลือกคุณสมบัติและคลิกแท็บความปลอดภัย Windows จะสังเกตเห็นความเสียหายและเสนอให้แก้ไข ฉันไม่ชอบสิ่งนี้เพราะเป็นคู่มือและต้องการให้ผู้ใช้ทำการตรวจสอบเพื่อหาว่าโฟลเดอร์ / ไฟล์ใดเสียหาย

มีสคริปต์หรือโปรแกรมที่จะทำสิ่งนี้โดยอัตโนมัติหรือไม่? ฉันเห็นว่าicaclsมี/verifyพารามิเตอร์ แต่เพียงแค่แสดงให้ฉันเห็นว่า ACLs ในไฟล์ / โฟลเดอร์เสียหาย มันไม่เสนอให้แก้ไขอะไรเลย

คำตอบ:


6

คุณสามารถลองใช้สคริปต์ PowerShell แบบง่าย ๆ เพื่อแทนที่ไฟล์ streamupt 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แสดงให้เห็นว่าคุณก็สามารถทำ
binki

5

ในที่สุดฉันก็สามารถคิดแก้ไขอัตโนมัติสำหรับเรื่องนี้ เมื่อคุณเรียกSet-Aclcmdlet ของ 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
ขอบคุณสำหรับเคล็ดลับ ฉันมีปัญหาในวันนี้และเขียน PowerShell ขนาดเล็กเพื่อทำการแก้ไขอัตโนมัติ: gist.github.com/vbfox/8fbec5c60b0c16289023
Julien Roncaglia

1

สำหรับฉันมีปัญหาสองอย่างคือ: ไม่ใช่ ACL + กฎที่ผิดพลาดซึ่งเป็นที่ยอมรับสำหรับ NULL SID (WTH?) ฉันแนะนำว่ามันเกิดจากคอมไพล์รุ่น cygwin

อย่างไรก็ตามในกรณีของฉันการใช้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 ของที่ไม่เป็นที่ยอมรับซึ่งถูกต้องตามกฎหมาย แต่ไม่สามารถจัดการกับอย่างถูกต้องโดย explorer.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 จึงไม่เกี่ยวข้อง
บิตที่สาด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.