요약

  • RFC 1309는 X.500을 전 세계 DSA(Directory System Agent) 모음으로 조립된 하나의 글로벌 네임스페이스로 설명했으며, 전체 데이터베이스를 보유한 하나의 서버로 설명하지 않았다.
  • 항목은 객체에 관한 주장을 담았고, 식별 이름(DN)은 트리에서 항목의 위치를 지정했으며, 별칭·추천·복제본은 추가 경로와 보관 계층을 만들었다.
  • 따라서 반환된 항목이나 검색 결과만으로는 완전성, 최신성, 고유 신원, 사실 정확성, 소유권, 권한 또는 실제 결과를 입증할 수 없었다.

글로벌 디렉터리는 인터페이스의 성취였다

글로벌 검색이 당연한 기대가 되기 전, 인터넷의 디렉터리 문제는 눈에 띄게 파편화되어 있었다. RFC 1309는 1992년의 익숙한 도구들로 시작했다.finger는 사용자에 관한 정보를 공개할 수 있었지만, 찾는 사람이 이미 호스트를 알고 있어야 했다. WHOIS는 더 넓은 모음을 제공했지만 중앙화된 데이터베이스에 프로세서, 저장 공간, 업데이트 병목이 쌓였다. DNS는 유지 관리를 우아하게 분산했지만, 사람과 풍부하게 기술된 자원에 대한 임의 검색이 아니라 빠른 이름 조회를 위해 설계되었다.

X.500은 다른 거래를 제안했다. 참여하는 각 사이트가 디렉터리의 자기 몫을 유지할 수 있었다. 사용자는 하나의 동질적 네임스페이스 전체에서 복잡한 검색을 발행할 수 있었다. 애플리케이션은 어느 기관이 물리적으로 정보를 보유하는지 알 필요 없이 디렉터리 정보를 요청할 수 있었다. 야심은 글로벌했지만 수단은 의도적으로 로컬이고 분산되어 있었다.

인터페이스가 작동할 때 이 구분은 쉽게 사라진다. 한 창이 한 질의를 받아 한 목록을 반환하면, 사용자는 자연히 하나의 권위 있는 저장소를 상상한다. RFC 1309는 그 반대를 설명했다. 겉으로 보이는 전체는 서로 다른 역할, 위치, 책임을 가진 구성요소들의 협력으로 만들어진 것이었다. 단일 디렉터리는 하나의 뷰였다.

뷰는 중요하다. 분산 시스템의 인지 비용을 줄이고, 애플리케이션이 모든 보관 주체를 하드코딩하지 않고 작동하게 한다. 그러나 뷰는 출처 정보를 압축하기도 한다. 어느 에이전트가 응답했는지, 다른 에이전트가 참조되었는지, 결과가 마스터에서 왔는지 복사본에서 왔는지, 별칭이 조회를 리디렉션했는지, 관리적 한도가 추가 일치 항목을 보류했는지를 숨길 수 있다. 편의는 실재한다. 증거가 중요할 때 그 연쇄를 복원해야 할 필요도 실재한다.

항목은 객체를 기술했지만 객체가 되지는 않았다

RFC 1309는 항목(entry)을 디렉터리 정보를 담는 기본 구성물이라고 불렀다. 하나의 항목은 사람, 조직, 컴퓨터 네트워크 또는 다른 객체에 관한 정보를 담을 수 있었다. 항목은 성, 전화번호, 우편 주소, 직함 및 기타 제한된 값 같은 속성으로 조립되었다. 속성 구문은 값이 어떤 종류의 데이터를 담을 수 있고 어떻게 비교되어야 하는지를 명시했다.

표현은 신중하다. 항목은 한 객체에 관한 정보를 담는다. 그것은 사람, 기관, 네트워크 자체가 아니다. 모든 필드가 잘 형성되어 있어도 이 간극은 남는다. 구문상 유효한 전화번호는 오래되었을 수 있다. 직함은 다툼의 대상일 수 있다. 주소는 이전 사무실을 가리킬 수 있다. 기록은 한때 그것을 정당화했던 관계보다 오래 살 수 있다.

객체 클래스는 구조를 더했다.objectClass속성은 항목이 어느 클래스 또는 클래스들에 속하는지 선언했다. 클래스는 필수 및 선택 속성을 정의했고, 하위 클래스는 상위 클래스의 형태를 상속했다. 이는 구현 전반에서 기록을 읽을 수 있게 했고 모든 이전 정의를 다시 만들지 않고 확장할 수 있게 했다.

그러나 구조는 진실을 보증하지 않았다. 필수 속성은 준수하는 항목이 클래스가 요구한 위치에 값을 제공했음을 증명한다. 그 값이 디렉터리 밖의 세계에 대응한다는 것을 증명하지는 않는다. 클래스는 DUA에게 기록을 해석하는 방법을 알려준다. 디렉터리를 표현된 객체에 대한 최종 권위로 임명하지는 않는다.

RFC 1309는 나중에 X.500이 무엇이 아닌지를 말하며 그 경계를 강화했다. 그것은 범용 데이터베이스나 데이터베이스 관리 시스템이 아니었다. 출력 형식을 표준화하지 않았고 보고서 생성기를 제공하지도 않았다. 디렉터리는 이름 지정과 자원 위치 파악에서 강력할 수 있었지만, 그 주장을 소비하거나 통치하는 모든 시스템이 되지는 않았다.

식별 이름은 트리를 통과하는 경로였다

디렉터리 정보 기반(Directory Information Base, DIB)은 디렉터리 정보 트리(Directory Information Tree, DIT)로 조직되었다. 각 항목은 하나의 위치를 차지했다. 하나 이상의 속성이 상대 식별 이름(Relative Distinguished Name)을 형성했다. 식별 이름(Distinguished Name)은 루트에서 해당 항목까지의 경로를 따라 나열한 RDN의 연속이었다.

이 구성은 중요한 조정 작업을 했다. 항목에 공유 네임스페이스 내 위치를 부여하고 클라이언트가 어디를 보고 싶은지 표현하게 했다. 그러나 DN은 여전히 디렉터리 경로였다. 생체 인식, 비밀번호, 법적 신원, 권원 또는 명명된 사람이 여전히 역할을 맡고 있다는 진술이 아니었다.

RFC의 별칭 예시는 그 분리를 분명하게 만든다. 한 이름의 별칭 항목이 다른 위치의 항목을 가리킬 수 있었다. 따라서 같은 대상에 하나 이상의 디렉터리 경로로 도달할 수 있었다. 별칭은 또 다른 인간을 만들지 않았다. 두 경로의 존재가 어느 조직 분기가 기반 사람이나 자원에 대해 배타적 권한을 가진다는 것을 증명하지도 않았다.

조사에는 최소한 세 가지 사실이 별도로 살아남아야 한다. 질의된 이름, 만난 별칭 항목, 궁극적으로 반환된 대상 항목이다. 이들을 하나의 정규처럼 보이는 문자열로 평탄화하면 경로가 사라진다. 그 잃어버린 경로가 바로 오래된 조직 참조, 예상치 못한 접근 결정 또는 트리 재편 후 바뀐 결과를 설명하는 것일 수 있다.

어떤 DSA도 완전한 세계를 보유하지 않았다

RFC 1309는 작동하는 디렉터리를 두 가지 주요 역할로 나누었다. 디렉터리 사용자 에이전트(Directory User Agent)는 사용자를 대신해 행동했다. 디렉터리 시스템 에이전트(Directory System Agent)는 DIB의 특정 하위 집합을 보유하고 접근 지점 역할을 했다. 완전한 DIB는 전 세계 DSA 모음에 분산되어 있었다.

두 기법이 그 분산을 덜 보이게 만들었다. 체이닝과 추천이다. 체이닝에서는 한 에이전트가 다른 에이전트를 통해 작업을 계속할 수 있었다. 추천에서는 요청자를 다른 접근 지점으로 안내할 수 있었다. 개요는 사용자 경험을 설명하기 위해 모든 프로토콜 세부 사항을 노출할 필요가 없었다. 완전한 글로벌 디렉터리가 데스크톱에 앉아 있는 것처럼 보일 수 있었지만, 먼 곳의 요청은 눈에 띄게 느릴 수 있었다.

그 겉보기 투명성은 중요한 시스템 성취였다. 모든 답이 하나의 출처를 가졌다는 증명은 아니었다. 똑같아 보이는 두 결과 페이지가 서로 다른 에이전트를 거쳤거나 서로 다른 경계에서 멈췄을 수 있다. 먼 분기에서의 타임아웃이 완전성을 바꿀 수 있었다. 클라이언트가 따르지 않은 추천이 검색을 일찍 끝낼 수 있었다. 부분 반환을 기다리는 구현은 지연과 집계를 맞바꿀 수 있었다. 보이는 목록만으로는 그것이 구성된 경로를 설명할 수 없었다.

이것이 DUA/DSA 분리의 역사적 중요성이다. 그것은 사용자의 도구가 모든 디렉터리 사실의 보관자로 오인되는 것을 막았다. DUA는 제출하고 제시했다. DSA는 보유하고, 전달하고, 리디렉션했다. 객체는 그들 모두 밖에 남아 있었다. 책임 있는 증거 기록은 그 역할들을 온전히 유지한다.

로컬 통제는 정확성과 비대칭성을 모두 만들었다

분산은 우발적 복잡성이 아니었다. RFC 1309는 로컬 관리를 장점으로 제시했다. 조직은 로컬 DSA를 운영하고 자기 정보를 마스터할 수 있었다. 업데이트가 원격 중앙 운영자 뒤에 대기할 필요가 없었다. 보관은 데이터를 아는 사람들에게 더 가까이 있을 수 있었다.

그 배치는 지식과 유지 관리를 정렬했지만 불일치를 없애지는 않았다. 로컬 관리자는 자기가 마스터하는 기록을 통제했다. 다른 조직은 그 관리자의 인센티브, 시계, 수정 절차를 공유하지 않은 채 그 기록에 의존할 수 있었다. 글로벌 네임스페이스는 주장이 발견되는 방식을 표준화하면서, 그것을 만들고 수정하고 이의 제기할 권한은 분산된 채로 둘 수 있었다.

QUIPU 복제는 또 다른 유용한 계층을 더했다. 자주 접근하는 외부 정보를 로컬 DSA가 슬레이브 기반으로 저장하고, 복사본을 외부 DSA의 마스터 데이터에서 자동으로 갱신할 수 있었다. 로컬 복사본은 전송 비용을 줄이고 검색 속도를 높일 수 있었다. 또한 출처 질문을 만들었다. 이 답은 마스터에서 왔는가, 복제본에서 왔는가, 두 가지를 연결하는 갱신 상태는 무엇인가?

복제본이 복사본이라는 이유만으로 거짓은 아니다. 마스터가 갱신 원천이라는 이유만으로 자동적으로 정확하지도 않다. 이들은 서로 다른 질문에 답한다. 마스터 상태는 유지 관리 관계에서의 위치를 식별한다. 복제본 상태는 파생 보관을 식별한다. 최신성은 성공적인 전파의 증거를 요구한다. 사실 정확성은 그 계보를 넘어선 증거를 요구한다.

이 개념들이 ‘디렉터리가 말한다’로 붕괴되면 분산 거버넌스 선택이 보이지 않게 된다. 그 표현은 누가 기록을 통제했는지, 어느 복사본이 답했는지, 어느 갱신이 도착했는지, 누가 오류 비용을 부담했는지를 생략한다. RFC 1309의 아키텍처는 그런 생략을 피할 수 있게 한다.

인증과 권한은 주장을 보증하지 않았다

1988년 X.500 모델은 단순 비밀번호 인증과 암호화 키를 사용하는 강한 인증을 설명했다. RFC 1309는 단순 인증이 널리 구현된 반면 강한 인증은 덜 그랬다고 언급했다. 둘 다 사용자나 프로세스가 DUA를 통해 디렉터리 작업을 시도할 때 호출되었다.

QUIPU는 속성 수준의 접근 제어 목록을 추가했다. 권한은 탐지, 비교, 읽기, 수정을 구분할 수 있었고 그룹 구성원 자격에 따라 달라질 수 있었다. 일부 정보는 공개, 일부는 조직 독자로 제한, 일부는 항목 소유자만 수정 가능할 수 있었다.

이 통제는 중요했지만 그 범위는 운영적이었다. 인증은 정의된 메커니즘 아래에서 작업을 시도하는 당사자에 관한 주장을 뒷받침할 수 있었다. ACL은 그 당사자가 명명된 속성에 무엇을 할 수 있는지에 관한 결정을 뒷받침할 수 있었다. 어느 사실도 그 속성을 참으로 만들지 않았다. 수정 권한은 기술된 사람이나 자원의 소유권을 증명하지 않았다. 읽기 거부는 숨겨진 값을 거짓으로 만들지 않았다. 성공적인 비교는 디렉터리를 신원 법정으로 만들지 않았다.

디렉터리 통제가 외부 권력으로 전환될 때마다 이 구분은 중요하다. 서비스 접근, 메일 라우팅 또는 기관 지위가 항목에 의존한다면, 디렉터리 쓰기는 프로토콜 작업을 넘어선 결과를 가진다. 증거 연쇄는 쓰기가 허용되었는지만이 아니라 누가 어떤 권한으로 어떤 원천에 대해 그것을 했고, 하류 시스템이 그것을 어떻게 해석했는지를 보여줘야 한다.

성공한 검색도 여전히 불완전할 수 있었다

RFC 1309는 검색 한도에 대해 이례적으로 솔직했다. 분산 검색은 네트워크 거리, 다른 에이전트가 응답할 때까지 부분 결과를 캐시하는 구현, 일반적인 프로세서나 메모리 제약 때문에 느릴 수 있었다. 일부 구현은 조직 디렉터리의 대량 추출을 어렵게 하기 위해 관리적 한도를 부과하기도 했다.

예시는 구체적이다. 1,000개의 일치 항목이 있는 질의가 20개만 표시하고 나머지는 그 응답에서 사라질 수 있었다. 사용자는 여러 개의 더 작은 검색을 해야 했다. 따라서 정확한 결과의 한 페이지는 유용하면서도 설계상 불완전할 수 있었다.

이는 ‘증거의 부재는 부재의 증거가 아니다’라는 익숙한 진술보다 강한 경고다. 시스템은 추가 일치 항목을 보유하면서도 제한된 부분집합만 반환할 수 있었다. 책임 있는 관찰자는 질의 범위, 필터, 기반 DN, 에이전트 경로, 한도 표시, 가능한 경우 연속 방법, 타이밍, 반환된 항목 수를 필요로 한다. 그것 없이는 ‘검색에서 20개를 찾았다’가 조용히 ‘20개만 존재했다’가 될 수 있다.

RFC는 또한 DIT 또는 객체 트리의 이상적 형태에 대한 명확한 합의가 없다고 보고했다. 이름 지정 구조 자체가 여전히 논쟁 중이었다. 이 불확실성이 디렉터리를 쓸모없게 만들지는 않는다. 검색이 표현된 경로와 스키마가 결과의 맥락 일부였고 중립적 배경이 아니었음을 뜻한다.

하나의 깔끔한 화면 뒤의 증거 연쇄

방어 가능한 관찰은 표시된 항목보다 먼저 시작된다. 요청 주체와 인증 방식, DUA, 작업, 정확한 검색 기반, 필터, 한도를 보존하라. 최초 DSA, 관찰된 모든 체인 또는 추천, 참조된 이름 지정 컨텍스트, 별칭이 역참조되었는지 여부를 기록하라. 반환된 항목의 DN과 대상, 그것을 제공한 마스터 또는 복제본, 가능한 경우 복제 시점, 결과와 한도 신호, 수집 시각을 식별하라.

그런 다음 외부 주장은 자체 증거가 도착할 때까지 디렉터리 기록 밖에 두라. 사람이 자격 증명을 통제한다는 것은 자격 증명 절차가 그것을 확립할 때만 성립한다. 조직이 역할을 승인한다는 것은 관련 권한을 통해서만 성립한다. 메일 시스템이 메시지를 재라우팅했다는 것은 메일 증거가 그 행위를 보여줄 때만 성립한다. 수신자가 정보를 받았거나 사용했다는 것은 수신자나 애플리케이션 표면이 그것을 기록할 때만 성립한다.

RFC 1309는 화이트 페이지 작업, 자원 위치 파악, 메일 주소 관리를 포함한 파일럿 및 운영 용도를 설명했다. 그 예시들은 1992년 개요가 보고한 내용을 확립한다. 현재의 배포를 증명하거나 일반 아키텍처가 특정 조회를 보증하게 하지는 않는다.

오래 남는 교훈은 분산 디렉터리가 신뢰할 수 없었다는 것이 아니다. 그 신뢰성이 인터페이스가 숨기도록 설계한 구분을 보존하는 데 달려 있었다는 것이다. 데스크톱은 많은 구성요소가 협력했기 때문에 하나의 디렉터리를 보여주었다. 좋은 증거는 각 주장을 어느 구성요소가 소유했는지 보여주기 위해 그 압축을 필요한 만큼 역전시킨다.

출처 및 증거 한계

이 글은RFC 1309,X.500 프로토콜을 사용한 디렉터리 서비스의 기술 개요(1992년 3월, FYI 14, Informational)에 의존한다. 이는 동시대 디렉터리 도구와의 비교, 분산 글로벌 네임스페이스, 항목/속성/객체 클래스 모델, DIB/DIT와 DN 구성, 별칭, DUA/DSA 역할, 체이닝/추천, 로컬 마스터링, QUIPU ACL과 복제, 관리적 검색 한도, 이상적 트리 형태에 대한 합의 부재, 명시적 비DBMS 경계를 뒷받침한다. 현재의 배포, 완전하거나 최신인 결과, 사실상 정확한 항목, 검증된 실제 신원, 소유권, 합법적 권한, 관찰된 메일 경로, 성공한 조회 또는 애플리케이션 결과를 확립하지는 않는다.