액세스 마스크

액세스 마스크의 기능은 압축된 형식으로 액세스 권한을 설명하는 것입니다. 액세스 관리를 간소화하기 위해 액세스 마스크에는 RtlMapGenericMask 함수를 사용하여 보다 자세한 권한 집합으로 변환되는 4비트 집합인 제네릭 권한이 포함됩니다.

다음 그림에서는 액세스 마스크를 보여 줍니다.

액세스 마스크를 보여 주는 다이어그램

제네릭 권한은 다음 중 하나입니다.

  • GENERIC_READ - 개체에서 유지 관리하는 정보를 읽을 수 있는 권한입니다.

  • GENERIC_WRITE - 개체에서 유지 관리하는 정보를 작성할 수 있는 권한입니다.

  • GENERIC_EXECUTE - 개체를 실행하거나 살펴볼 수 있는 권한입니다.

  • GENERIC_ALL - 개체를 읽고 쓰고 실행할 수 있는 권한입니다.

이러한 권한은 각 일반 권한에 필요한 권한의 합합을 요구하는 결과 매핑과 결합될 수 있습니다(예: GENERIC_READ 및 GENERIC_WRITE 둘 다 요청할 수 있습니다). 이 패러다임은 UNIX 리소스에 대한 액세스를 제어하는 데 사용되는 UNIX "rwx" 액세스 비트를 모방합니다. 액세스 마스크의 일반 권한은 다양한 개체 형식에 대한 다양한 보안 권한을 마스킹하므로 Windows에서 애플리케이션 개발을 간소화합니다.

다음 표준 권한 집합은 모든 개체 형식에 적용할 수 있습니다.

  • DELETE - 특정 개체를 삭제할 수 있는 권한입니다.

  • READ_CONTROL - 개체에 대한 컨트롤(보안) 정보를 읽을 수 있는 권한입니다.

  • WRITE_DAC - 개체에 대한 컨트롤(보안) 정보를 수정할 수 있는 권한입니다.

  • WRITE_OWNER - 개체의 소유자 SID를 수정할 수 있는 권한입니다. 소유자는 항상 개체를 수정할 권리가 있습니다.

  • SYNCHRONIZE - 지정된 개체에서 대기할 수 있는 권한입니다(개체에 대한 유효한 개념이라고 가정).

액세스 마스크의 하위 16비트 는 특정 권한을 나타냅니다. 이러한 특정 권한의 의미는 해당 개체에 고유합니다. 파일 시스템의 경우 주요 관심사는 파일 개체에 대한 특정 권한입니다. 파일 개체의 경우 파일 개체가 파일 또는 디렉터리를 나타내는지 여부에 따라 일반적으로 특정 권한이 다르게 해석됩니다. 파일의 경우 일반적인 해석은 다음과 같습니다.

  • FILE_READ_DATA - 지정된 파일에서 데이터를 읽을 수 있는 권한입니다.

  • FILE_WRITE_DATA - 지정된 파일(파일의 기존 범위 내)에 데이터를 쓸 수 있는 권한입니다.

  • FILE_APPEND_DATA - 지정된 파일을 확장할 수 있는 권한입니다.

  • FILE_READ_EA - 파일의 확장된 특성을 읽을 수 있는 권한입니다.

  • FILE_WRITE_EA - 파일의 확장 특성을 수정할 수 있는 권한입니다.

  • FILE_EXECUTE - 지정된 파일을 로컬로 실행할 수 있는 권한입니다. 원격 공유에 저장된 파일을 실행하려면 서버에서 파일을 읽지만 클라이언트에서 실행되므로 읽기 권한이 필요합니다.

  • FILE_READ_ATTRIBUTES - 파일의 특성 정보를 읽을 수 있는 권한입니다.

  • FILE_WRITE_ATTRIBUTES - 파일의 특성 정보를 수정할 수 있는 권한입니다.

디렉터리에 대해 동일한 비트 값이 사용되지만 다음 경우의 해석은 다릅니다.

  • FILE_LIST_DIRECTORY - 디렉터리의 내용을 나열할 수 있는 권한입니다.

  • FILE_ADD_FILE - 디렉터리 내에서 새 파일을 만들 수 있는 권한입니다.

  • FILE_ADD_SUBDIRECTORY - 디렉터리 내에 새 디렉터리(하위 디렉터리)를 만들 수 있는 권한입니다.

  • FILE_READ_EA - 지정된 디렉터리의 확장된 특성을 읽을 수 있는 권한입니다.

  • FILE_WRITE_EA - 지정된 디렉터리의 확장 특성을 작성할 수 있는 권한입니다.

  • FILE_TRAVERSE - 디렉터리 내의 개체에 액세스할 수 있는 권한입니다. FILE_TRAVERSE 액세스 권한은 FILE_LIST_DIRECTORY 액세스 권한과 다릅니다. FILE_LIST_DIRECTORY 액세스 권한을 보유하면 엔터티가 디렉터리의 콘텐츠 목록을 가져올 수 있으며, FILE_TRAVERSE 액세스 권한은 엔터티에 개체에 액세스할 수 있는 권한을 부여합니다. FILE_LIST_DIRECTORY 액세스 권한이 없는 호출자는 이미 존재하는 것으로 알고 있는 파일을 열 수 있지만 디렉터리의 내용 목록을 가져올 수는 없습니다.

  • FILE_DELETE_CHILD - 현재 디렉터리 내에서 파일 또는 디렉터리를 삭제할 수 있는 권한입니다.

  • FILE_READ_ATTRIBUTES - 디렉터리의 특성 정보를 읽을 수 있는 권한입니다.

  • FILE_WRITE_ATTRIBUTES - 디렉터리의 특성 정보를 수정할 수 있는 권한입니다.

파일 개체에 대한 표준 및 특정 권한에 대한 일반 권한의 실제 매핑은 I/O 관리자에 의해 정의됩니다. 이 매핑은 IoGetFileObjectGenericMapping을 사용하여 파일 시스템에서 검색할 수 있습니다. 일반적으로 이 매핑은 파일 시스템을 호출하기 전에 I/O 관리자가 IRP_MJ_CREATE 처리하는 동안 수행됩니다. 그러나 특정 작업(예: 특수한 FSCTL 작업)에 대한 보안을 검사하는 파일 시스템에서 이 작업을 수행할 수 있습니다.