나만의 연습장

LDAP 본문

웹 해킹/LDAP

LDAP

My-Berr 2018. 11. 19. 14:39

LDAP (Lightweight Directory Access protocol)
경량 디렉터리 액세스 프로토콜

인터넷 기반의 분산 디렉터리 서비스를 제공한는 공개된 프로토콜이다.


디렉토리는 논리, 계급 방식 속에서 조직화된, 비슷한 특성을 가진 객체들의 모임이다.

가장 일반적인 예로는 전화 번호부가 있는데 가나다 순의 일련의 이름을 가지고 있고, 이름마다 전화 번호와 주소가 포함되어 있다. 이러한 기본 설계 때문에 LDAP는 인증을 위한 다른 서비스에 의해 자주 사용된다.


사용자, 시스템, 네트워크, 서비스, 애플리케이션 등의 정보를 (주로 트리 구조로) 조회하거나 관리합니다. 회사에서 구성원의 조직도나 팀별 이메일 주소 등도 LDAP 서비스로 관리하고는 합니다. 흔하게는 특정 영역에서 이용자명과 패스워드를 확인하여 인증하는 용도로도  쓰입니다.


흔한 LDAP 클라이언트

회사에서 관리하는 임직원 데이터베이스 등은 흔히 LDAP 서버로 운영되므로, 서버는 그걸 생각하면 쉽고, 클라이언트의 경우, 각종 주소록 애플리케이션을 생각하면 쉬울 수 있겠습니다. 당장 우리가 쓰는 스마트폰들도 내부적으로 LDAP 클라이언트가 들어 있어서, 어떤 주소록 용도의 LDAP 서버에 연결해 내 스마트 폰의 주소록과 쉽게 동기화해 쓸 수 있습니다.


LDAP의 디렉터리 구조

LDAP 서버에는 여러 엔트리(entry)가 트리구조로 들어있습니다. 각각의 엔트리는 다수의 속성을 갖고, 각 속성은 (이름, 값+) 형태로 있습니다. 이름 하나에 한 개 이상의 값이 바인딩될 수 있습니다. 각 엔트리는 DN(Distinguished Name)이라는 고유값으로 지칭됩니다. 고유값인데, 그 값에서 어디에 속한 엔트리인지 파악할 수 있습니다. 디렉터리의 파일이라고 치자면,

/home/hatemogi/ldap.md

같은 전체 경로가 DN이라고 볼 수 있고, 그중에 /home/hatemogi 이 부분이 그 상위 엔트리의 DN인 셈입니다.

LDAP이 지원하는 명령어들

대부분의 네트워크 서비스와 마찬가지로, LDAP 클라이언트가 LDAP 서버에 커넥션을 열어서 각종 요청 메시지를 보내는데요, 이 요청 메시지에 들어갈 명령어들은 이렇습니다.

  • StartTLS — 보안 암호화를 위해 현재 세션을 TLS로 업그레이드하는 확장 명령어입니다. 비표준으로 평범한 LDAP을 TLS 커넥션 위에서 쓰는 방법도 있습니다만, 현재의 표준은 일단 세션 열어서 열자마자 StartTLS로 업그레이드하는 방법인 것 같습니다. SMTP 프로토콜도 이런 식으로 돼 있습니다.
  • Bind — 인증하고 LDAP 프로토콜 버전을 명시합니다.
  • Search & Compare — 디렉터리 엔트리를 검색해서 조회합니다. 특정 엔트리에 어떤 속성 값이 있는지도 확인할 수 있습니다.
  • Add — 새 엔트리를 추가합니다.
  • Delete — 특정 엔트리를 삭제합니다.
  • Modify — 특정 엔트리의 속성 값을 추가/제거/변경합니다.
  • ModifyDN — 특정 엔트리의 디렉터리 위치를 바꾸거나 이름을 바꿉니다.
  • Abandon — 직전에 보낸 요청을 취소해달라는 요청입니다만, 서버가 무시해도 무방합니다. 유명무실한 명령어일 것 같군요.
  • Unbind — 더 이상 할 일이 없어 커넥션을 끊기 전에 보내는 명령입니다. 서버는 이 명령을 받으면, 해당 클라이언트를 위해 확보했던 리소스를 다 해제하면 되겠습니다.


Comments