일부 추출물은 다음과 같습니다.
이 섹션에서는 Cygwin에서 Windows 보안 모델을 사용하여 POSIX 계정 정보, POSIX와 같은 권한을 구현하는 방법 및 Windows 인증 모델을 사용하여 cygwin 응용 프로그램이 POSIX와 같은 방식으로 사용자를 전환 할 수있는 방법에 대해 설명합니다.
POSIX와 유사한 파일 및 디렉토리 권한 설정은 기본적으로 acl로 설정된 마운트 옵션 (no) acl에 의해 제어됩니다.
우리는 간단한 개요로 시작합니다. 이 개요는 반드시 짧아야합니다. Windows 보안 모델에 대한 자세한 내용은 MSDN 설명서의 액세스 제어 문서를 참조하십시오.
POSIX 개념, 특히 POSIX 보안 모델은 여기서 다루지 않지만 독자가 이해한다고 가정합니다. POSIX 보안 모델을 모르는 경우 웹에서 초보자 문서를 검색하십시오.
Windows 보안 모델에서 거의 모든 "개체"를 보호 할 수 있습니다. "객체"는 파일, 프로세스, 스레드, 세마포어 등입니다.
모든 개체에는 "보안 설명자"(SD)라는 데이터 구조가 연결되어 있습니다. SD에는 개체에 액세스 할 수있는 사람을 제어하고 개체에 대해 수행 할 수있는 작업을 결정하는 데 필요한 모든 정보가 포함되어 있습니다. 객체의 SD는 다섯 부분으로 구성됩니다.
이 SD의 여러 측면을 제어하는 플래그. 여기에서는 다루지 않습니다.
객체 소유자의 SID
객체 소유자 그룹의 SID
"임의 액세스 제어 목록"(DACL)이라고하는 "액세스 제어 항목"(ACE) 목록.
"SACL (Security Access Control List)"이라고하는 다른 ACE 목록은 우리의 목적에 중요하지 않습니다. 여기서는 무시합니다.
모든 ACE에는 소위 "보안 식별자"(SID) 및 기타 내용이 포함되어 있습니다. 먼저 SID에 대해 이야기합시다.
SID는 사용자, 그룹, 컴퓨터 및 AD (Active Directory) 도메인의 고유 식별자입니다. SID는 기본적으로 POSIX 사용자 ID (UID) 및 그룹 ID (GID)와 비교할 수 있지만 여러 컴퓨터 나 도메인에서 고유하기 때문에 더 복잡합니다. SID는 여러 숫자 값의 구조입니다. 하이픈 문자로 구분 된 숫자 필드 문자열로 SID를 입력하는 편리한 규칙이 있습니다.
...
NTFS 및 마운트 지점에 noacl 마운트 옵션이 지정되지 않은 경우 Cygwin은 파일 권한을 POSIX 시스템에서 설정합니다. 기본적으로 이는 일치하는 소유자 및 그룹 SID로 보안 설명자를 정의하고 소유자, 그룹 및 "모든 사람"에 대한 ACE를 포함하는 DACL을 정의하여 수행됩니다. 이는 POSIX가 "others"라고 부르는 것을 나타냅니다.
POSIX 권한 모델을 Windows 권한 모델에 매핑하려고 할 때 한 가지 문제가 있습니다.
특정 POSIX 권한 설정을 허용하지 않는 "올바른"ACL 정의에 누출이 있습니다. 공식 문서는 다음을 간단히 설명합니다.
요청 된 권한은 사용자가 속한 모든 그룹뿐만 아니라 사용자의 모든 ACE에 대해 검사됩니다. 이러한 사용자 및 그룹 액세스 권한이 부여 된 ACE에 부여 된 권한이 누적되고 결과 집합은 해당 개체에 대해 해당 사용자의 권한 집합입니다.
ACE 순서가 중요합니다. 시스템은 요청 된 단일 권한이 거부되거나 요청 된 모든 권한이 부여 될 때까지 순서대로 읽습니다. 이 조건이 충족되면 읽기가 중지됩니다. 이후 ACE는 고려되지 않습니다.
모든 액세스 거부 ACE는 액세스 허용 ACE보다 우선해야합니다. 이 규칙을 따르는 ACL을 "정식"이라고합니다.
마지막 규칙은 기본 설정 또는 정확성 정의입니다. 절대적인 요구 사항은 아닙니다. 모든 Windows 커널은 ACE 허용 및 거부 순서에 관계없이 ACL을 올바르게 처리합니다. 두 번째 규칙은 선호하는 순서로 ACE를 가져 오도록 수정되지 않습니다.
불행히도 Windows 탐색기의 파일 속성 대화 상자의 보안 탭에서는 ACE 순서를 정식 순서로 다시 정렬해야 읽을 수 있습니다. 고마워요, 취소 버튼을 누르면 정렬 순서가 변경되지 않습니다. 그러나 OK를 누르는 것을 생각조차하지 마십시오 ...
정식 ACL은 POSIX 권한의 각 가능한 조합을 반영 할 수 없습니다. 예:
rw-r-xrw-
자, 여기에 Windows 권한이 POSIX 대응으로 3 비트 만 있다고 가정하면 일치하는 ACL을 작성하는 첫 번째 시도입니다.
UserAllow: 110
GroupAllow: 101
OthersAllow: 110
흠, 그룹이 실행할 수 있기 때문에 사용자가 실행할 수있는 허용 권한이 누적되어 있기 때문입니다.
두 번째 시도 :
UserDeny: 001
GroupAllow: 101
OthersAllow: 110
이제 사용자는 읽고 쓸 수는 있지만 실행할 수는 없습니다. 보다 나은? 아니! 불행히도 그룹은 다른 사람들이 쓸 수 있기 때문에 지금 쓸 수 있습니다.
세 번째 시도 :
UserDeny: 001
GroupDeny: 010
GroupAllow: 001
OthersAllow: 110
이제 그룹은 의도 한대로 쓸 수 없지만 불행히도 사용자는 더 이상 쓸 수 없습니다. 이 문제를 어떻게 해결해야합니까? 정식 주문에 따르면 UserAllow는 GroupDeny를 따라야하지만이 방법으로는 결코 해결할 수 없다는 것을 쉽게 알 수 있습니다.
유일한 기회 :
UserDeny: 001
UserAllow: 010
GroupDeny: 010
GroupAllow: 001
OthersAllow: 110
다시 : 이것은 Windows XP 이상에서 Server 2012 R2까지 쓸 때 기존의 모든 Windows NT 버전에서 작동합니다. GUI 만 해당 주문을 처리 할 수 없거나 기꺼이 처리 할 수 없습니다.