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


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.
binki

5

마침내이 문제를 자동으로 해결할 수있었습니다. 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 스타일의 권한을 부여하는 것을 좋아합니다.


1
트릭 주셔서 감사합니다. 오늘 문제가 있었다 및 고정 자동화하는 작은 PowerShell을 썼다 : gist.github.com/vbfox/8fbec5c60b0c16289023
줄리앙 Roncaglia

1

나를 위해 두 가지 문제가있었습니다 : 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을 명시 적으로 적용해야했습니다.


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

이 솔루션은 이미 질문에 언급되어 있습니다. 그러나 저자는 자동 솔루션을 요구합니다.
scai

또한 이들은 NTFS 권한이므로 IIS는 관여하지 않습니다.
튄 비트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.