명령 줄에서 “이 액세스 제어 목록이 정식 형식이 아닙니다”오류 수정 제어 목록은 정식

일부 개발자 워크 스테이션에서 “이 액세스 제어 목록은 정식 형식이 아니기 때문에 수정할 수 없습니다.” 특정 폴더에 대한 권한을 설정하려고 할 때 오류가 발생합니다. 이러한 ACL을 손상시키는 원인을 파악할 수 없었습니다.

지금, 내가 고칠 수있는 유일한 방법은 손상된 폴더 / 파일을 마우스 오른쪽 버튼으로 클릭하고 속성을 선택한 다음 보안 탭을 클릭하는 것입니다. 그런 다음 Windows는 손상을 확인하고 수정 제안을합니다. 수동이기 때문에 마음에 들지 않으며 사용자가 어떤 폴더 / 파일이 손상되었는지 파악하기 위해 조사를해야합니다.

이 작업을 자동으로 수행하는 스크립트 나 프로그램이 있습니까? 그 볼 icacls/verify매개 변수를하지만, 그냥 파일에 대한 ACL을 / 손상된 폴더 나에게 보여줍니다. 아무것도 고칠 것을 제안하지 않습니다.



답변

간단한 PowerShell 스크립트를 사용하여 다른 파일의 acl로 중단 파일 acl을 재정의 할 수 있습니다. get-acl path_to_file_with_known_good_acl | set-acl -path path_to_corrupt_file


답변

마침내이 문제를 자동으로 해결할 수있었습니다. PowerShell의 Set-Aclcmdlet 을 호출 하면 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이 원인 일 가능성이 높습니다. 디렉토리를 작성할 때 파일 시스템 보안을 관리하기 위해 Windows에 의존하는 대신 POSIX 스타일의 권한을 부여하는 것을 좋아합니다.


답변

나를 위해 두 가지 문제가있었습니다 : NULL SID (WTH?)에 대해 비정규 ACL + 잘못된 규칙이 선언되었습니다. 나는 그것이 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

@mschneider에서 언급했듯이 올바른 파일을 가진 파일에서 ACL을 명시 적으로 적용해야했습니다.


답변

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


답변

Cygwin을 사용할 때이 문제가 나타납니다. Windows ACL에서 POSIX 파일 권한을 에뮬레이션하려고합니다. 이로 인해 비정규 ACL 이 생길 수 있으며 , 이는 합법적이지만 explorer.exe가 올바르게 처리 할 수 ​​없습니다 .

다음과 같이 “noacl”옵션을 사용하여이 문제가있는 에뮬레이션을 해제 할 수 있습니다 /etc/fstab.

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


답변

  1. IIS에서 문제가있는 폴더를 마우스 오른쪽 단추로 클릭하십시오.
  2. 권한 수정 …
  3. 보안 탭을 선택하십시오
  4. ‘편집’버튼을 클릭하고 저장하십시오 (이것은 acl을 다시 주문하는 것 같습니다)
  5. 모든 팝업 확인

답변