일부 개발자 워크 스테이션에서 “이 액세스 제어 목록은 정식 형식이 아니기 때문에 수정할 수 없습니다.” 특정 폴더에 대한 권한을 설정하려고 할 때 오류가 발생합니다. 이러한 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-Acl
cmdlet 을 호출 하면 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
답변
- IIS에서 문제가있는 폴더를 마우스 오른쪽 단추로 클릭하십시오.
- 권한 수정 …
- 보안 탭을 선택하십시오
- ‘편집’버튼을 클릭하고 저장하십시오 (이것은 acl을 다시 주문하는 것 같습니다)
- 모든 팝업 확인