Windows Administration

재해 복구: Active Directory 사용자 및 그룹

Gil Kirkpatrick

 

한 눈에 보기:

  • 복제 및 개체 연결의 원리
  • NTDSUTIL을 사용한 백업 및 복원
  • 권한 있는 복원과 권한 없는 복원

Active Directory는 Windows 네트워크에서 가장 중요한 서비스 중 하나입니다. 작동 중단과 생산성 손실을 방지하기 위해서는 Active Directory 관련 문제에 대해 효과적인 재해 복구 계획을 마련해 놓아야 합니다. 이것은 당연한 소리로 들리지만 사실상 놀라울 정도로 많은 관리자가

가장 흔하게 발생하는 Active Directory® 오류 시나리오라 할 수 있는 '실수로 인한 데이터 삭제'에 대비해 별다른 계획을 갖고 있지 않습니다.

실수로 인한 개체 삭제는 서비스 실패를 유발하는 가장 흔한 원인 중 하나입니다. 필자는 세미나와 컨퍼런스를 진행할 때 실수로 인한 데이터 삭제로 Active Directory 장애를 경험한 사람이 있는지 자주 묻는데 항상 거의 모든 사람이 손을 듭니다.

데이터 복구 작업이 왜 그토록 복잡한지 그 이유를 알기 위해서는 먼저 Active Directory가 개체를 저장, 복제 및 삭제하는 방식과 권한 있는 복원 및 권한 없는 복원의 원리를 이해할 필요가 있습니다.

개체 저장

Active Directory는 X.500/LDAP 데이터 모델을 구현하는 특수한 개체 데이터베이스입니다. DIT(디렉터리 정보 트리)라고 하는 데이터 저장소는 ISAM(Indexed Sequential Access Method) 데이터베이스 엔진인 ESE(Extensible Storage Engine)를 기반으로 합니다. 개념상으로 Active Directory는 DIT를 두 개의 테이블에 저장합니다. 즉, 실제 Active Directory 개체와 특성을 포함하는 데이터 테이블과 개체 간의 관계를 포함하는 연결 테이블로 나누어 저장하는 것입니다.

각 Active Directory 개체는 데이터 테이블에서 별도의 행으로 저장되며 각 열은 개별 특성에 해당합니다. 데이터 테이블에는 도메인 컨트롤러(DC)에 저장된 전체 복제본의 모든 항목이 포함됩니다. 일반적인 DC의 경우에는 도메인 NC(명명 컨텍스트), 구성 NC 및 스키마 NC의 항목이 데이터 테이블에 포함되며, 글로벌 카탈로그의 경우에는 포리스트의 각 개체에 대한 항목이 데이터 테이블에 포함됩니다.

Active Directory는 32비트 정수인 고유 이름 태그(DNT)를 사용하여 데이터 테이블의 각 행을 식별합니다. 내부적으로 개체를 참조하는 데 사용되는 이 DNT는 고유 이름(DN)이나 objectGUID(16바이트 바이너리 구조) 등의 다른 식별자에 비해 크기가 훨씬 작지만 objectGUID와 달리 로컬 식별자이며 각 DC마다 다릅니다.

Active Directory의 개체 연결 방식

Active Directory는 DIT에 있는 개체 간의 관계 중 두 가지 유형, 즉 컨테이너 관계라고 하는 부모-자식 관계와 연결 관계라고 하는 참조 관계를 관리합니다. 부모-자식 관계를 구현하려는 경우 Active Directory는 데이터 테이블에 부모 고유 이름 태그(PDNT)라는 추가 열을 저장합니다. 이 열은 항상 개체의 부모에 해당하는 DNT를 포함합니다.

Active Directory의 각 특성은 Active Directory 스키마 컨테이너에 있는 attributeSchema 개체에 의해 정의됩니다. Active Directory에서 일부 특성은 attributeSchema 개체의 linkID 특성에 지정된 0이 아닌 짝수 값으로 결정되는 연결 특성으로 정의됩니다. 연결 특성은 디렉터리에 있는 개체 간의 관계를 설정하며 단일값이거나 다중값일 수 있습니다. 그룹 개체의 구성원 특성은 다중값 연결 특성의 예로서, 그룹 개체와 해당 구성원 개체 간의 연결을 설정합니다.

예를 들어 Active Directory 사용자 및 컴퓨터 스냅인에 표시되는 것처럼, 그룹의 구성원 특성에 구성원의 DN이 포함되어 있는 것처럼 보여도 이것은 Active Directory의 저장 방식이 아닙니다. 관리자가 구성원 개체의 DN을 그룹의 구성원 특성에 추가할 때 Active Directory는 개체의 DN이 아닌 DNT를 저장합니다. 개체 이름이 바뀌어도 DNT는 변경되지 않기 때문에 관리자가 사용자 개체의 이름을 바꿀 수 있고 Active Directory는 각 구성원 특성의 DN을 업데이트하기 위해 시스템의 모든 그룹을 정렬할 필요가 없습니다. Active Directory는 바로 이런 방식으로 DIT 내의 참조 무결성을 유지합니다. 그림 1은 데이터 테이블과 연결 테이블이 서로 연관되는 방식을 간단하게 나타낸 것입니다. 이 테이블에서는 Molly Clark, Alexander Tumanov 및 Makoto Yamagishi라는 세 개의 사용자 개체가 모두 Senior Engineers 그룹의 구성원임을 알 수 있습니다.

Figure 1 데이터 테이블과 연결 테이블이 서로 연관되는 방식

데이터 테이블      
DNT PDNT 개체 클래스 Cn
14529 14401 organizationalUnit Engineers
14530 14529 그룹 Senior Engineers
14531 14529 사용자 Molly Clark
14532 14529 사용자 Alexander Tumanov
14533 14529 사용자 Makoto Yamagishi
연결 테이블      
특성 DNT 정방향 연결  
구성원 14530 14531  
구성원 14530 14532  
구성원 14530 14533  

이러한 연결을 정방향 연결이라고 합니다. Active Directory는 역방향 연결 특성도 제공합니다. 이런 특성은 연결 대상 개체가 참조를 수행하는 개체(정방향 연결이 있는 개체)를 역방향으로 참조할 수 있게 합니다. 사용자와 그룹에 대한 memberOf 특성은 이런 역방향 연결 특성의 한 예입니다. 역방향 연결 특성을 설명하는 attributeSchema 개체의 linkID 값은 짝수 값인 해당 정방향 연결 특성의 linkID 값에 1을 더한 값입니다. 예를 들어 Windows Server® 2003 R2 스키마에서 구성원 특성의 linkID 값이 2인 경우, 역방향 연결을 수행하는 memberOf 특성의 linkID 값은 3입니다. 그림 2에는 Windows Server 2003 R2 스키마에 기본적으로 정의되어 있는 연결된 특성의 목록이 나와 있습니다.

Figure 2 Windows Server 2003 R2 스키마의 연결 특성

정방향 연결 특성 linkID 역방향 연결 특성 연결된
구성원 2 memberOf 3
관리자 42 directReports 43
소유자 44 ownerBL 45
siteObject 46 siteObjectBL 47
nonSecurityMember 50 nonSecurityMemberBL 51
queryPolicyObject 68 queryPolicyBL 69
privilegeHolder 70 isPrivilegeHolder 71
managedBy 72 managedObjects 73
hasPartialReplicaNCs 74    
hasMasterNCs 76 masteredBy 77
syncMembership 78    
serverReference 94 serverReferenceBL 95
bridgeheadTransportList 98 bridgeheadServerListBL 99
netbootServer 100 netbootSCPBL 101
frsComputerReference 102 frsComputerReferenceBL 103
fRSMemberReference 104 fRSMemberReferenceBL 105
fRSPrimaryMember 106    
siteLinkList 142    
siteList 144    
msCOM-PartitionLink 1040 msCOM-PartitionSetLink 1041
msDS-NC-Replica-Locations 1044    
msFRS-Hub-Member 1046    
msCOM-UserPartitionSetLink 1048 msCOM-UserLink 1049
msDS-SDReferenceDomain 2000    
msDS-HasInstantiatedNCs 2002    
msDS-NonMembers 2014 msDS-NonMembersBL 2015
msDS-MembersForAzRole 2016 msDS-MembersForAzRoleBL 2017
msDS-OperationsForAzTask 2018 msDS-OperationsForAzTaskBL 2019
msDS-TasksForAzTask 2020 msDS-TasksForAzTaskBL 2021
msDS-OperationsForAzRole 2022 msDS-OperationsForAzRoleBL 2023
msDS-TasksForAzRole 2024 msDS-TasksForAzRoleBL 2025
msDS-HasDomainNCs 2026    
msSFU30PosixMember 2030 msSFU30PosixMemberOf 2031
msDS-hasMasterNCs 2036 msDs-masteredBy 2037
msDS-ObjectReference 2038 msDS-ObjectReferenceBL 2039
msDFSR-ComputerReference 2050 msDFSR-ComputerReferenceBL 2051
msDFSR-MemberReference 2052 msDFSR-MemberReferenceBL 2053

역방향 연결 특성은 항상 다중값이며 Active Directory에 의해 자동으로 유지 관리됩니다. 사실상 역방향 연결 특성은 직접 수정할 수가 없습니다. Active Directory 사용자 및 컴퓨터 MMC 스냅인을 통해 사용자나 그룹의 memberOf 특성을 수정할 수 있는 것처럼 보여도 이 스냅인은 실제로 해당 그룹의 구성원 특성을 수정하는 것이며 Active Directory가 배후에서 memberOf 특성을 업데이트하는 것입니다. 따라서 사용자를 그룹에 추가하는 데 해당 사용자 개체에 대한 권한은 필요 없습니다. 사실상 그룹 개체의 구성원 특성을 수정하는 것이기 때문입니다. 각 DC는 역방향 연결 특성을 로컬로 관리하므로 역방향 연결에 대한 변경 사항은 절대 복제되지 않고, 그룹의 구성원 특성과 같은 정방향 연결 특성에 대한 변경 사항만 복제됩니다.

일반적인 DC의 경우 데이터 테이블에는 구성 및 스키마 컨테이너의 개체는 물론 도메인 개체의 항목이 포함됩니다. 그러나 일부 그룹 유형은 다른 도메인에 상주하는 개체에 대한 참조도 포함할 수 있습니다. 그렇다면 Active Directory는 해당 데이터 테이블에 없는 개체의 DNT는 어떻게 저장할까요? 그 해답은 인프라 마스터의 신축 단일 마스터 작업(FSMO) 역할 소유자와 유령 개체라는 것에서 찾을 수 있습니다.

유령 개체

특정 도메인의 구성원을 다른 도메인의 그룹에 추가하면 Active Directory가 데이터 테이블에 유령 개체를 자동으로 생성합니다. 이 특수한 개체에는 추가된 새 구성원의 objectGUID, objectSid 및 DN이 포함되어 있습니다. 이 개체는 또한 그룹의 구성원 특성에 저장할 수 있는 DNT를 제공합니다. 그러나 도메인 컨트롤러가 글로벌 카탈로그인 경우에는 데이터 테이블에 포리스트의 각 개체에 대한 항목이 이미 존재하기 때문에 유령 개체를 생성할 필요가 없습니다.

인프라 FSMO 역할을 보유한 DC는 글로벌 카탈로그를 기반으로 데이터 테이블의 항목을 정기적으로 검사하여 이동 또는 삭제되거나 이름이 변경된 개체가 발견되면 데이터 테이블의 유령 개체를 업데이트하고 도메인의 다른 DC에 변경 사항을 복제합니다. 또한 인프라 마스터는 참조 횟수를 사용하여 도메인의 어떠한 정방향 연결 특성도 더 이상 참조하지 않는 유령 개체를 제거할 수 있습니다.

DC는 유령 개체를 사용하여 포리스트 내의 다른 도메인에 있는 개체에 대한 참조를 관리할 수 있지만, 정방향 연결 특성은 트러스트된 도메인과 같이 포리스트 외부에 있는 개체도 참조할 수 있습니다. 이런 경우 Active Directory는 도메인 NC의 CN=ForeignSecurityPrincipals 컨테이너에 외부 보안 정책(FSP)이라는 개체를 생성합니다. 이 FSP에는 외부 개체의 보안 식별자(SID)를 비롯하여 외부 도메인의 해당 개체를 식별하는 기타 특성이 들어 있지만 FSP를 최신 상태로 업데이트하는 프로세스는 없습니다. 데이터 복구의 관점에서는 FSP가 다른 Active Directory 개체와 똑같이 취급됩니다.

개체 삭제

여기에서는 사용자와 사용자의 그룹 구성원 자격을 복원하는 것에 대해 주로 설명하지만 다른 연결된 특성을 복구하는 경우에도 동일한 원리가 적용됩니다.

Active Directory가 개체를 삭제할 때 이 개체는 DIT에서 물리적으로 삭제되는 것이 아닙니다. 개체의 isDeleted 특성을 true로 설정하여 개체가 삭제된 것으로 표시함으로써 일반적인 디렉터리 작업에서 해당 개체가 보이지 않도록 하는 것입니다. Active Directory는 스키마의 정의에 따라, 저장하도록 지정되지 않은 모든 특성을 제거하고 개체의 상대 고유 이름(RDN)을 <old RDN>\0aDEL:<objectGUID>로 변경합니다. 그런 다음 해당 개체를 NC의 CN=Deleted Objects 컨테이너로 이동합니다.참고로, 구성 NC에는 Active Directory가 삭제된 개체 컨테이너로 이동하지 않는 몇 가지 개체 클래스가 있습니다. Active Directory는 삭제된 개체가 보유하는 다른 개체에 대한 모든 정방향 연결을 삭제하며, 이에 따라 연결 테이블의 참조 횟수도 줄어들게 됩니다. 그리고 삭제된 개체에 대한 정방향 연결이 포함된 다른 개체가 있으면 Active Directory는 이러한 연결도 제거합니다.

그 결과로 나타난 개체를 삭제 표시라고 합니다. Active Directory는 이런 삭제 표시를 다른 DC에 복제하여 똑같은 변경 사항이 적용되도록 합니다. 그러나 Active Directory는 삭제된 개체를 참조하는 정방향 연결에 대한 변경 사항은 복제하지 않습니다. 각 DC는 해당 변경 사항을 로컬에서 수행하므로 복제 작업이 필요 없습니다. 이런 사실은 그룹 구성원 자격을 복구하는 데 중대한 영향을 미칩니다. 이에 대해서는 이 문서의 뒷부분에서 자세히 다룰 것입니다.

Active Directory는 CN=Directory Service,CN=Windows NT,CN=Services,CN=Configuration,DC=<root domain> 개체의 tombstoneLife 특성에 따라 삭제 표시를 DIT에서 유지 관리합니다. 각 DC의 가비지 수집 프로세스는 구성된 삭제 표시 유효 기간을 초과하는 삭제 표시를 제거합니다. 기본적으로 삭제 표시 유효 기간은 Windows® 2000, Windows Server 2003 및 Windows Server 2003 R2의 경우 60일이고, Windows Server 2003 SP1의 경우 180일입니다.

삭제 표시 유효 기간은 복원 프로세스에 매우 중요한 영향을 미칩니다. 예를 들어 삭제 표시 유효 기간을 초과한 백업에서는 복원이 불가능합니다. 이것은 삭제된 후 도메인에서 가비지 수집된 개체에는 더 이상 삭제 표시가 나타나지 않으므로 삭제 작업이 복원된 DC에 다시 복제되지 않기 때문입니다. 따라서 삭제된 개체는 복원된 DC에 느린 개체로 남아 있게 되며 이 복원된 DC는 도메인의 다른 DC와 올바르게 통합되지 않습니다.

개체 복제

도메인 컨트롤러는 개체를 추가하거나 특성을 수정하는 등의 업데이트 작업을 수행할 때마다 업데이트 시퀀스 번호(USN)라는 64비트 고유 번호를 해당 업데이트 작업에 할당합니다. 그리고 Active Directory는 업데이트된 개체와 특성에 이 USN을 태그로 표시하므로 업데이트된 항목의 복제가 필요한지 여부를 쉽게 알 수 있습니다.

Active Directory는 개체를 특성별로 복제합니다. 즉, 개체의 특성을 수정하면 Active Directory가 전체 개체가 아닌 해당 특성만 복제합니다. 이를 위해 Active Directory는 복제 메타데이터를 사용하여 각 특성에 대한 변경 사항을 추적합니다. 특성에 대한 복제 메타데이터에는 다음과 같은 항목이 포함되어 있습니다.

  • 로컬 DC에 대한 변경 작업을 나타내는 로컬 USN
  • 도메인 컨트롤러에서 특정 DIT 생성을 식별하는, 변경을 유발한 DC의 invocationID(특히 DC의 해당 nTDSSettings 개체가 보유한 invocationID 특성)
  • 원래 DC에서와 같은 원래 작업의 USN
  • 원래 변경 작업이 수행된 DC 시스템 시간을 포함하는 타임스탬프
  • 값이 변경될 때마다 증가되는 순차적인 32비트 버전 번호

대상 DC는 원본 DC 파트너에 수행된 변경 사항을 요청할 때 가장 최근에 성공적으로 복제된 변경 사항의 USN을 원본 DC로 전송합니다. 이때 NC 복제본을 생성하는 각 DC의 원래 USN 중에서 가장 큰 값을 포함하는 최신 벡터도 함께 전송합니다. 원본 DC는 이 정보를 사용하여 대상 DC가 확인하지 못한 업데이트만 전송합니다.

대상 DC는 들어오는 특성 업데이트를 처리할 때 각 특성의 버전 번호를 검사합니다. 그래서 들어오는 특성의 버전 번호가 DC가 갖고 있는 해당 특성의 버전보다 크면 이 값을 저장합니다. 만약 들어오는 버전 번호가 DC가 이미 갖고 있는 버전과 같을 경우, DC는 타임스탬프를 비교하여 최신 타임스탬프를 가진 특성을 사용합니다. 그런데 타임스탬프마저 같으면 대상 DC는 invocationID가 가장 큰 값을 선택합니다. 이런 방식으로 인해 모든 DC는 복제된 모든 특성에 대해 결국 같은 값을 갖게 됩니다.

연결된 값 복제

Windows 2000에서 Active Directory는 다중값 특성을 단일값 특성과 같은 방식으로 복제했습니다. 그러나 이런 방식은 다중값 구성원 특성이 다른 DC에서 자주 변경될 수 있는 대규모 동적 그룹 개체에서 문제를 일으켰습니다. 즉, 어떤 관리자가 한 DC에서 그룹에 사용자를 추가했는데 다른 관리자가 복제 대기 시간 내에 다른 DC에서 동일한 그룹에 다른 사용자를 추가한 경우, Active Directory는 나중에 추가된 사용자를 선택하고 먼저 추가된 사용자는 완전히 놓치게 됩니다. Microsoft는 연결된 값 복제(LVR)라는 프로세스를 사용하여 Windows Server 2003에서 이 문제를 해결했습니다.

Active Directory는 Windows Server 2003 포리스트 기능 수준 또는 임시 포리스트 기능 수준을 사용하여 다중값 정방향 연결 특성의 개별 값을 하나씩 복제하며 이때 각 값은 고유의 복제 메타데이터를 포함합니다. 따라서 여러 DC에 그룹 구성원 자격 업데이트를 거의 동시에 수행할 때 데이터가 손실될 수 있는 Windows 2000에서의 문제가 효과적으로 해결되는 것입니다.

그러나 한 가지 알아야 할 점이 있습니다. 즉, 포리스트 기능 수준을 높여도 새로운 복제 메타데이터로 기존의 다중값 연결 특성을 자동으로 수정할 수는 없다는 것입니다. 포리스트 기능 수준을 높인 후에 추가된 값만 새 메타데이터를 갖게 됩니다. 잠시 후에 살펴보겠지만 이런 사실은 그룹 구성원 자격을 복구하는 데 중요한 영향을 미칩니다.

백업

Windows에는 매우 기본적인 NTBACKUP 유틸리티가 포함되어 있습니다. 이 유틸리티는 DC의 시스템 상태 백업을 수행하는 데 사용할 수 있습니다. 도메인 컨트롤러의 시스템 상태는 레지스트리, SYSVOL, Active Directory DIT 파일 및 중요한 시스템 파일을 포함합니다. 또한 대부분의 타사 백업 유틸리티도 DC의 시스템 상태를 백업 및 복원할 수 있습니다.

디스크 파일에 시스템 상태를 백업하려면 다음 명령을 사용하십시오.

NTBACKUP backup systemstate /F “<filename>”

여기서 <filename>은 생성할 백업 파일의 이름이며 확장명은 .bkf여야 합니다.

권한 없는 복원 수행

백업을 사용하여 삭제된 Active Directory 개체를 복원하는 작업은 2단계 프로세스입니다. 먼저 DC를 디렉터리 서비스 복원 모드(DSRM)로 다시 부팅한 다음 Windows NTBACKUP 유틸리티나 동등한 타사 제품을 사용하여 시스템 상태 백업에서 전체 Active Directory DIT를 복원합니다. 이 프로세스는 전체 DIT를 덮어씁니다.

DC를 DSRM으로 부팅하는 데는 두 가지 방법이 있습니다. DC의 시스템 콘솔에 액세스할 수 있는 경우 DC를 종료하고 다시 시작하면서 Windows 부팅 메뉴가 표시될 때 F8 키를 누르십시오. 그런 다음 메뉴에서 디렉터리 서비스 복원을 선택하고 DSRM 암호를 입력하면 됩니다.

서버를 원격으로 관리하는 경우에는 Windows 부팅 메뉴에 액세스할 수 없습니다. 대신 내 컴퓨터에서 속성을 선택하고, 고급 탭을 클릭한 후 시작 및 복구 아래의 설정 단추를 눌러 시스템 부팅 옵션을 변경할 수 있습니다. 그림 3과 같이 시스템 시작 섹션의 편집 단추를 눌러 boot.ini 파일을 편집하고 줄 끝에 스위치 /SAFEBOOT:DSREPAIR을 추가하면 됩니다. boot.ini 스위치에 대한 자세한 내용은 microsoft.com/technet/ sysinternals/information/bootini.mspx를 참조하십시오.

그림 3 DSRM에 대한 부팅 옵션 설정

그림 3** DSRM에 대한 부팅 옵션 설정 **(더 크게 보려면 이미지를 클릭하십시오.)

서버를 다시 부팅하면 이제 DSRM 모드로 부팅됩니다. DC를 표준 모드로 다시 시작하려는 경우에는 boot.ini에서 /SAFEBOOT 스위치를 제거해야 합니다.

DSRM 암호를 사용하여 로그인했으면 매개 변수는 지정하지 않고 NTBACKUP 명령을 다시 사용하여 시스템 상태 백업을 복원하십시오(명령줄에서 NTBACKUP을 사용하여 복원을 수행할 수는 없음). 마법사가 나타나면 파일 및 설정 복원을 선택하고 다음을 클릭합니다. 그런 다음 해당 백업 파일을 선택하고 그림 4와 같이 시스템 상태 확인란을 선택합니다.

그림 4 백업 또는 복원 마법사를 사용하여 시스템 상태 복원

그림 4** 백업 또는 복원 마법사를 사용하여 시스템 상태 복원 **(더 크게 보려면 이미지를 클릭하십시오.)

이때 도메인 컨트롤러(DC)를 다시 표준 모드로 부팅하려고 하면 Active Directory 복제 프로세스가 복원된 도메인 컨트롤러를 도메인의 다른 DC와 다시 동기화하며 최신 데이터가 복원된 모든 데이터를 덮어씁니다. 물론 이런 결과는 원하지 않으시겠지요? 따라서 복원되는 개체가 도메인의 다른 DC로 복제되도록 강제할 방법이 필요합니다.

권한 있는 복원 수행

NTDSUTIL 또한 백업일과 복원일 사이에 매일 100,000씩 각 특성의 버전 번호를 높입니다. 따라서 매일 100,000번 이상 업데이트되는(거의 가능성 없음) 특성이 없으면 복원된 특성의 버전 번호는 다른 DC가 보유한 버전 번호보다 훨씬 높으며 이렇게 권한 있는 복원이 수행된 개체는 다른 DC로 복제됩니다. 권한 없이 백업으로 복원한 기타 개체는 다른 도메인 컨트롤러(DC)의 기존 데이터가 결국 덮어쓰게 됩니다.

권한 없는 복원을 완료했으면 표준 모드로 다시 부팅하기 전에 NTDSUTIL 프로그램을 사용하여 복구하려는 개체에 대해 권한 있는 복원을 수행하십시오. 이름과 달리, 권한 있는 개체 복원은 개체를 정말 "복원"하는 것이 아니라 Active Directory가 해당 개체를 다른 DC로 복제하도록 보장할 뿐입니다. 이 작업을 위해 NTDSUTIL은 다음으로 사용 가능한 USN을 해당 개체의 특성에 해당하는 로컬 USN에 지정합니다. 따라서 이 개체는 다음 동기화 수행 시 복제 파트너로 전송됩니다. 단일 개체를 복원하려면 DC가 DSRM 모드로 부팅하도록 하고 다음 단계를 수행하십시오.

  1. 명령 창을 열고 다음을 입력합니다.
ntdsutil
  1. ntdsutil 프롬프트에서 다음을 입력합니다.
authoritative restore
  1. 권한 있는 복원 프롬프트에서 다음을 입력합니다.
restore object “<DN of object to be restored>”
  1. 예를 들어 DRNET 도메인의 Eng OU에서 Molly Clark 계정을 복원하려면 다음을 입력합니다.
restore object “CN=Molly Clark,OU=Eng,DC=DRNET,DC=com”
  1. 전체 디렉터리 하위 트리(예: OU)에 대해 권한 있는 복원을 수행하려면 대신 다음을 입력합니다.
restore subtree “OU=Eng,DC=DRNET,DC=com”
  1. NTDSUTIL도 구성 및 스키마 NC를 포함하여 전체 도메인에 대해 권한 있는 복원을 수행하는 데이터베이스 복원 명령을 제공합니다. 전체 도메인을 복원하는 일은 위험 부담이 너무 크기 때문에 이 옵션은 권장하고 싶지 않습니다. 전체 도메인을 복원해야 하는 경우에는 "Active Directory 포리스트 복구를 위한 계획에 나온 설명과 같이 한 개 도메인 컨트롤러를 복원하고 도메인의 다른 DC 수준을 다시 올리십시오.
  2. 메시지가 나타나면 권한 있는 복원이 각 개체와 해당 특성의 버전 번호를 높이도록 합니다.
  3. ntdsutil을 종료합니다(quit을 두 번 입력해야 함).
  4. DC를 표준 Active Directory 모드로 다시 부팅합니다.

다음에 DC가 해당 파트너를 사용하여 복제할 때 복원된 사용자는 외부로 복제됩니다. 그러나 사용자 개체를 복원하는 것은 문제의 절반일 뿐입니다. 그룹과 그룹 구성원 간의 연결처럼 개체 연결을 수행하면 상황이 더욱 복잡해집니다. 복원 도중 또는 이후에 발생할 수 있는 몇 가지 근본적인 문제는 조금 후에 설명하겠습니다.

우선 역방향 연결을 포함하는 개체를 삭제했을 때 어떤 일이 발생하는지 살펴봅시다. 예를 들어 한 개 이상의 그룹에 속한 사용자 개체를 삭제할 경우, 이 사용자 개체의 복사본을 가진 각 도메인 컨트롤러는 이 복사본을 삭제 표시로 변환하고 연결 테이블에서 모든 참조를 제거하여 사용자 도메인의 모든 그룹 구성원 자격에서 해당 사용자 개체를 제거합니다. (그룹 구성원 자격에서 사용자를 제거하는 것은 복제된 변경이 아닙니다. 각 DC가 구성원 자격을 로컬로 업데이트하기 때문입니다. 그룹 구성원 특성의 버전 번호와 로컬 USN은 변경되지 않습니다.) 잠시 후 다른 도메인의 연결 테이블에서 유령 개체가 제거됩니다. 이때도 그룹 구성원 특성의 복제 메타데이터는 업데이트되지 않습니다.

사용자 도메인의 도메인 컨트롤러에 있는 DIT에 권한 없는 복원을 수행할 때는 사용자 개체가 도메인의 여러 그룹에 있는 모든 그룹 구성원 자격과 함께 복구되기 때문에 복원된 DC의 일관성이 유지됩니다. 또한 NTDSUTIL 유틸리티를 사용하여 사용자에 대해 권한 있는 복원을 수행하고 나면 해당 사용자 개체가 도메인의 다른 모든 DC로 복제됩니다.

그러나 도메인의 최신 그룹에 속한 복제 메타데이터는 변경되지 않기 때문에 복원된 DC에 있는 그룹의 구성원 특성은 다른 DC의 특성과 일관되지 않습니다. 또한 이러한 특성을 하나의 공통된 상태로 통합할 방법도 없습니다. 따라서 이 사용자의 구성원 자격은 도메인의 다른 DC에서 복원되지 않는 것입니다.

문제: 도메인 내의 그룹 구성원 자격이 복원되지 않음

사용자 개체에 권한 있는 복원을 수행해도 이 사용자의 그룹 구성원 자격이 복구되지 않는 이유는 무엇일까요? 그것은 바로 구성원 자격 관계가 사용자의 memberOf 특성(역방향 연결)이 아니라 그룹 개체의 구성원 특성(정방향 연결)을 사용하여 저장되고 복제되기 때문입니다. 문제는 사용자의 기존 그룹 구성원 자격을 찾아야 하고, 만약 알고 있다면 이를 제대로 복구해야 한다는 것입니다.

Microsoft는 사용자 그룹 구성원 자격의 복구 프로세스를 점진적으로 개선해왔기 때문에 현재 사용하는 Active Directory의 버전에 따라 적용할 기술이 달라집니다. 다음 내용은 Windows 2000 Active Directory에 주로 적용됩니다.

사용자의 기존 그룹 구성원 자격은 매우 쉽게 확인할 수 있습니다. 즉, 복원된 DC에서 역방향 연결 특성을 검사하면 됩니다. 여기서는 사용자 개체의 memberOf 특성이 되겠지요? 이 memberOf 특성은 사용자 도메인의 로컬 및 글로벌 그룹에 대한 모든 구성원 자격을 포함합니다. 이제 Active Directory 사용자 및 컴퓨터 MMC 스냅인(ADUC)을 사용하거나 Windows Server에 포함되어 있는 LDIFDE 유틸리티를 사용하여 복원된 사용자의 그룹 구성원 자격을 나열할 수 있습니다.

다음의 LDIFDE 명령 줄은 Molly Clark가 구성원으로 속해 있는 DRNET 도메인의 그룹을 보여 주며 그 결과를 output.ldf 파일에 저장합니다.

C:\> ldifde –r “(distinguishedName=CN=Molly Clark,
OU=Engineering,DC=DRNET,DC=Local)” –l memberOf –p Base –f output.ldf

LDAP 도구를 사용하려면 DC를 표준 모드로 부팅해야 하고 인바운드 복제도 비활성화해야 합니다. 그렇지 않으면 새 데이터가 복원한 데이터를 덮어씁니다. 인바운드 복제를 비활성화하는 가장 쉬운 방법은 다음과 같은 REPADMIN 명령을 사용하는 것입니다.

REPADMIN /options <dcname>+DISABLE_INBOUND_REPL

여기서 <dcname>은 복원이 수행된 DC의 이름입니다. 완료했으면 –DISABLE_INBOUND_REPL을 사용하여 복제를 다시 활성화하는 것도 잊지 마십시오.

복구하려는 사용자 수가 적은 경우에는 ADUC를 사용하여 사용자를 그룹에 다시 추가하는 방법이 제일 간단합니다. 그러나 복구할 사용자 수가 많으면 일부 프로세스를 자동화할 수 있는 몇 가지 도구 중 선택하여 사용하면 됩니다. Microsoft GROUPADD 유틸리티(Microsoft 기술 지원 서비스에서 제공)는 관리자가 사용자의 기존 그룹 구성원 자격을 검색하기 위해 생성한 LDIF 파일을 활용하여 이러한 구성원 자격을 다시 생성하는 LDIF 파일을 만들어 줍니다. 예를 들어 앞의 예에서 Molly Clark를 위해 생성한 LDIF 파일을 다음의 GROUPADD 명령을 사용하여 처리한다고 가정해 봅시다.

C:\> groupadd /after_restore output.ldf

이 명령을 실행하면 Molly Clark가 그룹 구성원 자격을 보유하고 있는 각 도메인에 대해 groupadd_<domain>.ldf라는 이름으로 새로운 LDIF 파일이 생성됩니다. 여기서 <domain>은 업데이트되는 그룹이 속한 도메인의 정규화된 도메인 이름입니다. 이렇게 생성된 LDIF 파일은 다음과 같은 명령으로 가져옵니다.

C:\> ldifde –i –k –f groupadd_child.drnet.net.ldf

Windows Server 2003에서 더욱 향상된 NTDSUTIL은 구성원 특성에 있는 추가 메타데이터를 활용하여 연결된 값 복제(LVR)를 지원합니다. 만약 복원된 사용자 개체가 도메인의 특정 그룹에 속한 구성원이었고 이 사용자의 그룹 구성원 자격이 LVR 메타데이터와 함께 저장된 경우, NTDSUTIL은 이 구성원 특성의 해당 버전 번호 값을 높여 복원된 구성원 자격이 외부로 복제되도록 합니다.

Windows Server 2003 SP1 버전의 NTDSUTIL에는 GROUPADD 기능이 통합되어 있어 사용자 개체에 대해 권한 있는 복원을 수행할 때 LDIF 파일을 자동으로 생성합니다. 그림 5는 이 새로운 버전의 NTDSUTIL을, 그림 6은 자동 생성된 LDIF 파일의 내용을 보여 줍니다.

Figure 6 NTDSUTIL이 생성한 LDIF 파일의 콘텐츠

dn: CN=EngDL,OU=Eng Groups,DC=drnet,DC=local
changetype: modify
delete: member
member: CN=Molly Clark,OU=Eng,DC=drnet,DC=local
-
dn: CN=EngDL,OU=Eng Groups,DC=drnet,DC=local
changetype: modify
add: member
member: CN=Molly Clark,OU=Eng,DC=drnet,DC=local
-
dn: CN=EngGG,OU=Eng Groups,DC=drnet,DC=local
changetype: modify
delete: member
member: CN=Molly Clark,OU=Eng,DC=drnet,DC=local
-
dn: CN=EngGG,OU=Eng Groups,DC=drnet,DC=local
changetype: modify
add: member
member: CN=Molly Clark,OU=Eng,DC=drnet,DC=local
-
dn: CN=EngUG,OU=Eng Groups,DC=drnet,DC=local
changetype: modify
delete: member
member: CN=Molly Clark,OU=Eng,DC=drnet,DC=local
-
dn: CN=EngUG,OU=Eng Groups,DC=drnet,DC=local
changetype: modify
add: member
member: CN=Molly Clark,OU=Eng,DC=drnet,DC=local
-

그림 5 GROUPADD 기능이 내장된 새로운 NTDSUTIL

그림 5** GROUPADD 기능이 내장된 새로운 NTDSUTIL **(더 크게 보려면 이미지를 클릭하십시오.)

포함된 사용자와 그룹 수가 많은 OU 전체를 복원하려는 경우 사용자를 해당 그룹에 직접 추가하려면 많은 시간이 소모됩니다. 복원된 그룹 구성원 자격을 복구하는 또 다른 방법은 그룹 자체에 권한 있는 복원을 수행하는 것입니다.

그러나 이렇게 그룹에 대해 권한 있는 복원을 수행하는 데는 두 가지 문제가 따릅니다. 첫 번째 문제는 누가 보기에도 확실한 것으로, 그룹을 복원하면 이 그룹의 구성원 자격이 백업 당시의 상태로 돌아간다는 점입니다. 즉, 마지막 백업을 수행한 이후 그룹에 적용된 모든 변경 사항을 그룹에 다시 적용해야 하는 것입니다. 두 번째 문제는 포착하기가 약간 어려운 것으로서, Active Directory 복제가 작동하는 방식과 관련이 있습니다. 사용자와 그룹 모두에 대해 권한 있는 복원을 수행하고 나면 이런 항목이 어떤 순서로 외부에 복제될 것인지가 확실하지 않습니다. 만약 그룹 개체가 복원된 사용자 개체보다 먼저 DC에 복제될 경우, 사용자 개체가 DC에 아직 존재하지 않기 때문에 복제를 수행하는 도메인 컨트롤러는 그룹에서 사용자 참조를 자동으로 삭제합니다. 그리고 나중에 사용자 개체가 복제되어 들어오면 그룹에 추가되지 않습니다.

이 문제를 해결하는 가장 쉬운 방법은 그룹에 대한 권한 있는 복원을 두 번 수행하는 것입니다. 즉, 첫 번째 권한 있는 복원을 수행한 후 표준 모드로 다시 부팅하고 복제가 제대로 수행되었는지 확인합니다. 그런 다음 DSRM 모드로 다시 부팅하고 NTDSUTIL을 실행하여 해당 사용자가 구성원으로 속했던 그룹에 대해 권한 있는 복원을 수행하면 됩니다. 이렇게 하면 다시 표준 모드로 부팅할 때 사용자 개체가 그룹 개체보다 먼저 복제되어 그룹 개체가 복제를 위해 사용자 개체를 참조할 수 있습니다.

문제: 다른 도메인의 그룹 구성원 자격이 복원되지 않음

"사용자가 구성원으로 속했던 그룹을 찾아내는 작업"은 사실 필자가 설명한 것보다 더 어렵습니다. 복원하려는 사용자는 다른 도메인의 도메인 로컬 및 유니버설 그룹에 속한 구성원이었을 수 있고 이러한 그룹 구성원 자격은 권한 없는 복원을 수행할 때 복원되지 않습니다. 그렇다면 다른 도메인에서 사용자가 어떤 그룹에 속했었는지 어떻게 알 수 있을까요? 해답은 글로벌 카탈로그에 있습니다. 글로벌 카탈로그는 해당 도메인의 데이터 외에도 포리스트의 다른 도메인이 보유한 데이터의 읽기 전용 복사본을 포함하고 있습니다.

포리스트 전체를 포괄하는 글로벌 카탈로그의 데이터를 활용하려면 글로벌 카탈로그에 대해 권한 없는 복원을 수행해야 합니다. 즉, 처음부터 글로벌 카탈로그가 백업되어 있어야 하는 것입니다. 이제 LDIFDE를 실행하여 사용자의 그룹 구성원 자격을 확인할 때는 다른 도메인에서도 사용자의 유니버설 그룹 구성원 자격을 확인할 수 있습니다.

복구하려는 사용자의 그룹 구성원 자격을 나열할 때는 기본값인 389 대신 글로벌 카탈로그 포트 3268에 연결하고, 포리스트의 루트 도메인을 포함하여 검색하도록 지정하십시오. LDIFDE는 포리스트의 모든 도메인에 속한 유니버설 그룹의 구성원 자격을 포함하여 복구된 사용자의 모든 그룹 구성원 자격을 표시합니다. 다음은 이 작업을 수행하는 방법입니다.

C:\> ldifde –r “(distinguishedName=CN=Don Clark,
OU=Engineering,DC=DRNET,DC=Local)” -t 3268 –l memberOf –p Base –f output.ldf

글로벌 카탈로그에 대해 GROUPADD 또는 새로운 NTDSUTIL을 실행하면 사용자의 도메인에 대한 LDIF 파일 하나와, 복원된 사용자가 유니버설 그룹의 구성원이었던 각 도메인에 대한 LDIF 파일 하나가 각각 생성됩니다. 이러한 LDIF 파일을 가져오면 해당 사용자에 대한 모든 그룹 구성원 자격이 복원되는 것입니다. 지금부터 설명할 한 가지 문제만 제외하면 말이죠.

문제: 다른 도메인의 도메인 로컬 그룹 구성원 자격 복구

Windows Active Directory 환경에는 세 가지 종류의 그룹이 있습니다. 글로벌 그룹은 동일한 도메인의 구성원만 포함할 수 있지만, 포리스트의 해당 도메인과 다른 도메인에 있는 도메인 로컬 그룹 내에서 구성원으로 사용될 수 있습니다. 글로벌 그룹의 구성원 특성은 글로벌 카탈로그에 나타나지 않지만 글로벌 그룹은 해당 도메인의 구성원만 포함하기 때문에 이것은 문제가 되지 않습니다. 한편 유니버설 그룹은 모든 도메인의 구성원을 포함할 수 있으며, 포리스트의 다른 유니버설 그룹에서는 물론 포리스트의 해당 도메인과 다른 도메인에 있는 도메인 로컬 그룹에서도 구성원으로 사용될 수 있습니다. 그리고 유니버설 그룹의 구성원 특성은 글로벌 카탈로그에 복제됩니다. 도메인 로컬 그룹의 경우 포리스트에 있는 모든 도메인의 구성원을 포함할 수 있지만 다른 도메인의 그룹에서 구성원으로 사용될 수 없습니다. 더 중요한 사실은 도메인 로컬 그룹의 구성원 특성이 글로벌 그룹의 구성원 특성과 마찬가지로 글로벌 카탈로그에 표시되지 않는다는 것입니다. 따라서 다른 도메인의 도메인 로컬 그룹에 속한 사용자의 구성원 자격을 복구하기가 쉽지 않습니다.

Windows Server 2003 SP1 이전에는 외부 도메인의 도메인 로컬 그룹 구성원 자격을 복구하는 유일한 방법은, 각 도메인에서 DC를 복원하고 도메인 데이터를 수동으로 검색하여 복원된 사용자가 포함된 도메인 로컬 그룹이 있는지 찾은 다음 검색된 그룹에 해당 사용자를 다시 추가하는 것이었습니다. 도메인 수가 많은 대규모 환경에서 이 방법을 사용하면 곧 지치고 말 것입니다.

그러나 Windows Server 2003 SP1 버전의 NTDSUTIL은 다릅니다. 도메인 컨트롤러에 대해 NTDSUTIL을 실행하면 이 유틸리티가 복원된 사용자 개체의 DN과 GUID를 포함하는 텍스트 파일을 생성합니다. 이제 각 외부 도메인에 대해 단일 DC에 권한 없는 복원을 수행하고, 텍스트 파일을 이 DC에 복사한 후, NTDSUTIL을 실행하여 새로운 도메인별 LDIF 파일을 생성할 수 있습니다. 이 LDIF 파일은 복구된 사용자를 이 사용자가 구성원으로 속했던 도메인 로컬 그룹에 다시 추가해 줍니다.

이 방법을 사용하려면 각 외부 도메인의 DC에서 다음 작업을 수행합니다.

  1. 해당 외부 도메인의 DC를 DSRM 모드로 부팅합니다.
  2. NTBACKUP을 사용하여 복원된 사용자의 그룹 구성원 자격이 포함되어 있는 DIT의 복사본을 복원합니다.
  3. NTDSUTIL이 생성한 .txt 파일을 현재 DC에 복사합니다.
  4. 명령 창을 열고 ntdsutil을 입력합니다.
  5. authoritative restore를 입력합니다.
  6. create LDIF file(s) from <file name>을 입력합니다(여기서 <file name>은 텍스트 파일의 이름).
  7. quit을 두 번 입력하여 ntdsutil을 종료합니다.
  8. DC를 표준 Active Directory 모드로 다시 부팅합니다.
  9. ldifde –i –f <ldif filename>을 입력합니다(여기서 <ldif filename>은 방금 생성한 LDIF 파일의 이름).

이제 삭제되었던 사용자의 그룹 구성원 자격을 모두 복원한 것입니다.

단계별 방법

Active Directory 사용자와 이들의 그룹 구성원 자격을 복구하는 일은 그리 간단하지 않습니다. 특히 도메인이 많은 환경에서는 더욱 복잡해집니다. 그룹 구성원 자격을 제대로 복구하는 데 필요한 구체적인 단계별 방법은 사용하는 Windows의 버전에 따라 달라집니다.

Windows 2003 SP1을 사용하는 경우에는 다음의 단계를 따라야 합니다.

  1. 글로벌 카탈로그(GC)를 DSRM 모드로 부팅하고 삭제된 사용자가 포함된 백업을 사용하여 시스템 상태 복원을 수행합니다.
  2. NTDSUTIL을 사용하여 삭제된 사용자에 대해 권한 있는 복원을 수행합니다. NTDSUTIL이 복원된 개체의 DN과 GUID를 포함하는 한 개의 텍스트 파일과, 사용자의 그룹 구성원 자격을 복원하기 위한 한 개 이상의 LDIF 파일을 생성합니다.
  3. LDIFDE –i –f <LDIF filename>(여기서 <LDIF filename>은 2단계에서 생성된 LDIF 파일의 이름)을 사용하여 현재 도메인과 다른 도메인의 그룹 구성원 자격을 가져옵니다.
  4. 글로벌 카탈로그를 표준 모드로 다시 부팅합니다.
  5. 각 외부 도메인의 DC에서 DSRM 모드로 부팅하고 복원된 사용자의 그룹 구성원 자격이 포함된 백업을 사용하여 시스템 상태 복원을 수행합니다.
  6. create ldif files 명령을 사용하여 NTDSUTIL을 실행합니다.
  7. DC를 표준 모드로 다시 부팅합니다.
  8. LDIFDE –i –f <filename>(여기서 <filename>은 6단계에서 생성한 LDIF 파일의 이름)을 사용하여 외부 도메인의 그룹 구성원 자격을 복원합니다.
  9. 이제 원하는 경우 REPADMIN /syncall을 사용하여 복제를 강제 수행할 수 있습니다.

SP1을 설치하지 않고 Windows Server 2003을 사용하거나 Windows 2000을 실행하는 경우에는 몇 가지 단계가 추가됩니다. 기존 버전의 NTDSUTIL은 LDIF 파일을 생성하지 않기 때문에 GROUPADD 유틸리티를 사용하여 생성해야 합니다. 프로세스는 다음과 같습니다.

  1. 글로벌 카탈로그를 DSRM 모드로 부팅하고 삭제된 사용자가 포함된 백업을 사용하여 시스템 상태 복원을 수행합니다.
  2. NIC를 비활성화하거나 케이블 연결을 해제하여 인바운드 복제를 방지합니다.
  3. 글로벌 카탈로그를 표준 모드로 다시 부팅합니다.
  4. LDIFDE –r "(distinguishedName=<dn>)" -t 3268 -l memberOf –p Base -f membership.ldf를 사용하여 고유 이름이 <dn>인 사용자의 구성원 자격을 덤프합니다.
  5. GROUPADD /after_restore membership.ldf를 사용하여 LDIF 파일을 생성합니다.
  6. LDIFDE –i –f <LDIF filename>(여기서 <LDIF filename>은 5단계에서 GROUPADD가 생성한 LDIF 파일의 이름)을 사용하여 현재 도메인과 다른 도메인의 그룹 구성원 자격을 가져옵니다.
  7. REPADMIN /options <dcname> -DISABLE_INBOUND_REPL을 사용하여 인바운드 복제를 다시 활성화합니다.
  8. 각 외부 도메인의 DC에서 DSRM 모드로 부팅하고 복원된 사용자의 그룹 구성원 자격이 포함된 백업을 사용하여 시스템 상태 복원을 수행합니다.
  9. DC를 표준 모드로 다시 부팅합니다.
  10. LDIFDE –i –f <filename>(여기서 <filename>은 5단계에서 GROUPADD가 생성한 LDIF 파일의 이름)을 사용하여 외부 도메인의 그룹 구성원 자격을 복원합니다.
  11. 이제 원하는 경우 REPADMIN /syncall을 사용하여 복제를 강제 수행할 수 있습니다.

이제 마지막으로, Windows Server 2003 SP1 이전 버전의 환경에서는 복원된 사용자의 외부 도메인 로컬 그룹 구성원 자격을 복구하기만 하면 됩니다. 가능한 방법은 도메인 로컬 그룹 구성원 자격을 직접 복원하거나, 백업에서 DC를 복원하고 도메인 로컬 그룹에 대해 권한 있는 복원을 수행하는 것입니다.

요약

Active Directory에서 실수로 사용자나 심지어 OU를 삭제하기는 쉽지만 삭제된 사용자와 이들의 그룹 구성원 자격을 제대로 복구하는 일은 대단히 복잡하고 많은 시간이 소요되며 오류도 자주 발생합니다. 이런 종류의 재해로부터 최대한 빨리 복구하기 위해서는 개체 연결, 복제, 삭제, 권한 있는 복원 등의 원리를 명확히 이해하고 있어야 합니다.

여러분은 프로덕션 환경에서 이 모든 단계별 절차를 처음부터 제대로 수행할 자신이 있습니까? 다음에 혹시 CEO의 사용자 개체를 복구해야 할 수도 있는 상황을 대비하여 삭제된 개체를 복구하는 데 필요한 계획을 문서로 준비해 두십시오. 그리고 이런 계획을 실제 데이터에 적용해 보기 전에 한두 번 이상 연습해 보는 것도 잊지 마십시오. 여러분의 상사와 CEO에게 깊은 인상을 남길 수 있으니까요.

추가 리소스

Gil Kirkpatrick은 NetPro의 CTO로서 1996년부터 Active Directory용 소프트웨어를 개발해오고 있으며, HP의 Guido Grillenmeier와 함께 인기 있는 Active Directory 재해 복구 워크샵을 진행하고 있습니다. 또한 Directory Experts Conference(www.dec2007.com)의 창립자이기도 합니다.

© 2008 Microsoft Corporation 및 CMP Media, LLC. All rights reserved. 이 문서의 전부 또는 일부를 무단으로 복제하는 행위는 금지됩니다..