LINUX
2008.05.30 / 19:19

시스템 관리용 오픈 소스 패키지 톱 5: 제2편 LDAP[펌]

배수 계언
추천 수 145
제목없음

시스템 관리용 오픈 소스 패키지 톱 5: 제2편 LDAP[펌]

 

저자: 『시스템 관리의 핵심, 개정3판』의 저자 아일린 프리시/『시스템 관리의 핵심, 개정3판』의 역자 홍상욱 역

본 기사는 유용한 오픈 소스로 공개되어 있는 관리용 툴 5가지를 소개하는 시리즈 기사에서 두 번째 기사에 해당한다. 이 다섯가지 오픈 소스 툴을 사용하게 되면 어떠한 유닉스 운영 체제를 사용하고 있더라도 작업이 한결 수월해 질 것이다.

4위: LDAP

지난 수년간 시스템 관리직에서 LDAP는 핫이슈로 거론되어 왔다. LDAP는 단체나 조직의 개개인에 대한 정보를 저장하고 질의할 수 있는 성명록 서비스를 제공한다. 성명록에 들어갈 수 있는 정보의 범위는 상당히 광범위한 편이다. 예를 들어 전화 번호, 사무실 위치, 유닉스 사용자 계정 데이터, 개인적인 데이터(집 전화 번호, 사진), 회사 특정 데이터 등등을 저장할 수 있다. 여기서는 LDAP에서 지원하는 기능을 살펴보도록 하겠다.

LDAP는 Lightweight Directory Access Protocol의 약자로서 성명록 서비스를 제공하는 프로토콜이다. 성명록 서비스는 데이터베이스와 비슷하다고도 볼 수 있는데 다음과 같은 점에서 차이를 보인다.
  • 읽는 속도를 최적화 했다. 즉, 엔트리를 추가하고 갱신하는데 시간이 오래 걸릴 수도 있다.
  • 고급 검색 기능을 지원한다.
  • 기본적인 데이터 구조인 스키마는 필요에 따라서 확장할 수 있다.
  • RFC 문서를 통해서 공개되어 있는 표준을 따르기 때문에 서로 다른 업체에서 구현한 제품을 사용하더라도 전혀 문제되지 않는다.
  • 분산 저장 매체와 데이터 복사 기법을 활용하므로 확장성이 뛰어나다.
이와 같은 장점으로 인해 기존에는 NIS로 처리되었던 엔터프라이즈급 사용자 계정 및 인증 방식이 첨차 LDAP로 대치되고 있다.

데이터베이스와의 차이점을 강조하기 위해 성명록 서비스에서 데이터 구조체는 이름을 달리한다. 레코드는 엔트리(entries), 레코드에서 각각의 필드는 속성(attribute)이라고 불린다.

노트: LDAP라는 용어는 특별한 구분 없이 사용되는 것이 보통이지만 실제로는 성명록에 있는 데이터를 엑세스하는데 사용되는 프로토콜만을 의미한다(프로토콘은 데몬에 구현되어 있음). 실제 데이터베이스 기능은 별도의 백엔드 프로그램 또는 패키지로 구현되어 있다.

LDAP는 1990년대 초반, 미시건 주립대학교에서 처음으로 구현되었다. 현재는 다양한 LDAP 서버가 상용화 되어 있으며, 오픈 소스 프로젝트 기반의 OpenLDAP는 미시건대학교에서 계속하여 작업을 이어온 프로젝트이다. 리눅스 및 BSD 운영 체제에서는 디폴트로 OpenLDAP를 사용하고 있고 대부분의 다른 유닉스 시스템에서도 사용할 수 있다. 본 기사에서 소개되고 있는 예제는 OpenLDAP를 기준으로 하고 있다.


시스템 관리의 핵심, 개정 3판

참고 도서

시스템 관리의 핵심, 개정 3판
에일린 프리시, 홍상욱 역




스키마에 대해서

LDAP 객체는 성명록 서비스 서버간의 호환을 유지하기 위해 표준화 되어있다. LDAP 스키마에는 사용 가능한 엔트리 유형 목록 (객체 클래스) 및 그에 해당하는 속성 등이 정의되어 있다. 스키마 정의는 파일에 저장된다. OpenLDAP에서는 스키마 파일이 /etc/openldap/schema 하위 디렉토리에 온다.

속성은 데이터 유형, 형식, 비교 방식 등으로 정의된다. 객체 클래스에서 속성은 필수일 수도 있고 아닐 수도 있다. 동일한 속성이 여러 객체 클래스에 속할 수도 있다.

객체 클래스는 top 객체 클래스에서 시작해서 트리 계층 구조로 정렬되어있다. 1차 객체 클래스는 top 클래스의 자식이 되고 그 이하 레벨 객체 클래스는 바로 윗단계 객체 클래스의 자식이 된다. 자식 클래스는 부모 클래스의 모든 속성을 자동으로 포함한다.

성명록 엔트리는 Daphne Frisch에 대한 다음 예제 레코드에서와 같이 여러 객체 클래스에 포함될 수 있다.

dn: cn=Daphne Frisch,ou=Pets,dc=ahania,dc=com 
objectClass: top objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson

이 성명록 엔트리에 해당하는 고유 이름 (키 필드) 및 객체 클래스
sn: Frisch 
cn: Daphne Frisch
telephoneNumber: 555-1212
userPassword: {crypt}meeoooowww
description: Toy chaser and purrrring fuzz ball

person 객체 클래스의 속성
ou: Pets 
title: HRH
street: 125 N. Main Street
postOfficeBox: 4224
st: CT
postalCode: 06512
facsimileTelephoneNumber: 888-555-1212

organizationalPerson 객체 클래스의 속성
departmentNumber: 14 
employeeType: permanent
givenName: Daphne
initials: DF
jpegPhoto: daphne.jpg
audio: daphne.wav
homePhone: 555-2121
pager: Opening the toy cabinet
preferredLanguage: Fenglish
userCertificate: certs/df_cert.pem

inetOrgPerson 객체 클래스의 속성


예제 레코드에서 데이터 형식은 LDIF(LDAP Data Interchange Format)라고 불린다. LDIF는 속성, 값 쌍이 순차적으로 콜론으로 분리해서 나열된 형식이다. 예를 들어 telephoneNumber 속성은 값이 555-2121이다. 각각의 속성은 어느 객체 클래스에 속해 있는지 보여 주기 위해 색깔처리 되어있다.

Ldap Schema Viewer는 표준 LDAP 스키마 객체를 간편하게 볼 수 있게 해준다. LDAP에서 가장 매력적인 기능으로는 스키마 확장이 가능하다는 것이다. 사이트에서는 필요에 따라서 객체 클래스와 속성을 자유자재로 추가할 수 있다.

LDAP 성명록 구조

LDAP 성명록은 트리 구조로 되어있으며 일반적으로 사이트의 도메인 이름에 해당하는 엔트리에서 시작된다. 이 루트 엔트리는 다음과 같이 표현된다.
dc=ahania,dc=com 
도메인 이름을 이루는 각 문자열은 dc(domain component)의 값이 되고 전체가 콤마로 분리된 리스트로 묶인다. 이것을 성명록의 베이스라고 하고 예제에서는 ahania.com에 해당한다.

이러한 속성=값 쌍 목록을 사용해서 성명록에 임의의 위치(엔트리)를 지칭할 수 있다. (여기서 콤마 간의 공백은 있어도 되고 없어도 된다.)

앞에서 살펴 보았던 Daphne의 성명록 엔트리의 첫번째 줄을 보다 자세히 살펴보자.
dn: cn=Daphne Frisch,ou=Pets,dc=ahania,dc=com 
위 줄은 이 엔트리의 고유 이름(dn)을 정의하고 있다. 이 속성은 성명록 데이터베이스에서 이 엔트리에 대한 고유 키로 취급된다. 컴마로 분리된 속성-값 쌍으로 구성되어 있는데 여기서는 공통 이름 "Daphne Frisch", 단체 "Pets", 도메인 ahania.com 등을 지정했다.

dn에서 첫번째 콤포넌트는 엔트리의 상대 고유 이름 (rdn) 이라고 불린다. 위 예제에서는 cn=Daphne Frischrdn이다. 이 rdnou=Pets, dc=ahania, dc=com 하위트리에 위치에 대응한다. 전체 성명록에서 dn이 고유하듯이 rdn도 하위트리에서 고유해야만 한다.

다음은 성명록 트리를 간단히 표현한 것으로서 들여쓰기로 트리 깊이를 구분했다.
dc=ahania,dc=com 
ou=Humans,dc=ahania,dc=com
cn=Jerry Carter,ou=MyList,dc=ahania,dc=com
cn=Rachel Chavez,ou=MyList,dc=ahania,dc=com
사람 ...
ou=Pets,dc=ahania,dc=com
cn=Daphne Frisch,ou=Pets,dc=ahania,dc=com
cn=Lyta Frisch,ou=Pets,dc=ahania,dc=com
cn=Susan Frisch,ou=Pets,dc=ahania,dc=com
cn=Talia Frisch,ou=Pets,dc=ahania,dc=com
위 성명록은 두 단체를 포함하고 있으며, 그 밑에는 여러 엔트리가 존재한다.

사용자 계정에서 LDAP 사용

사용자 계정 데이터 및 인증에 LDAP를 사용하고 싶다면 다음 작업을 해야 한다.
  • 사용자 계정 및 관련 설정 정보를 성명록 서비스 스키마에 통합시킨다
  • 표준 파일 (혹은 NIS 시설)에서 사용자 계정 데이터를 이동시킨다
  • PAM 사용자 인증 시설에서 LDAP 성명록을 사용하도록 설정해 준다
객체 클래스 주요 용도 OpenLDAP 스키마 파일
posixAccount 유닉스 사용자 계정 데이터 nis.schema
shadowAccount 유닉스 암호/노화 데이터 nis.schema
account 단체 및 호스트 속성 cosine.schema
person 기본 개인 데이터 core.schema
organizationalPerson 주소 전화번호 데이터 core.schema
inetOrgPerson 피고용인 관련 데이터 inetorgperson.schema
ipHost and device 호스트 기반 로그인 엑세스 제어 nis.schema
groupOfUniqueNames 호스트 기반 로그인 엑세스 제어 core.schema


오렌지 색으로 표시된 객체 클래스는 거의 모든 사이트에서 사용될 것이다. 또한, 필요에 따라서 노란색 객체 클래스도 사용자 계정 엔트리에 사용할 수 있다. 분홍색 객체 클래스는 호스트 기반 로그인 엑세스 제어를 사용하고 싶을 때 사용하면 된다. (즉, 어느 사용자가 어느 호스트에 로그인 할 수 있는지 지정하고 싶을 때다.)

기존 계정 데이터 이동

PADL software에 포함되어 있는 오픈 소스 데이터 이동 툴을 사용하면 기존 사용자 계정 데이터를 LDAP 성명록에 간단히 추가할 수 있다. 데이터 이동 툴은 다양한 펄 스크립트로 구성되어 있는데 현재 사용되고 있는 서비스로부터 필요한 데이터를 추출해서 그에 해당하는 성명록 엔트리를 작성해 준다. 또한, 스크립트가 자동으로 LDAP 성명록에 엔트리를 삽입하도록 해도되고, LDIF 형식의 텍스트 파일을 작성하도록 해서 확인해 보고 수정한 후에 삽입해도 된다.

사용자 인증 설정

성명록 엔트리를 사용자 인증 데이터로 사용하려면 PADL 소프트웨어에서 개발한 두 가지 오픈 소스 모듈(nss_ldap, pam_ldap)이 추가적으로 필요하다.

nss_ldap 모듈은 표준 이름 서비스 스위치 파일인 /etc/nsswitch에 대한 인터페이스를 제공한다. 즉, 이 파일의 엔트리에 LDAP를 지정할 수 있게 해준다. 예를 들어 다음 두 nsswitch 엔트리는 사용자 계정 정보를 우선 기본 파일에서 찾아보고 없을 경우 OpenLDAP 서버에서 가져오도록 설정한 것이다.
passwd: files ldap shadow: files ldap 
ldap 키워드는 OpenLDAP 서버를 의미한다. 사용자 계정 정보를 포함하고 있는 단체 단위의 고유 이름은 LDAP 서버 설정 파일에 지정되어 있다.

pam_ldap 모듈은 PAM 시설에서 사용자 인증 데이터 및 사용자 계정 제어 작업에 LDAP를 사용하고자 할 때 사용된다. 다음 예제에서와 같이 일반적인 방식으로 PAM 스택에 삽입해 주면된다.
auth 		required 		/lib/security/pam_securetty.so 
auth required /lib/security/pam_nologin.so
auth sufficient /lib/security/pam_ldap.so
auth required /lib/security/pam_unix.so
account sufficient /lib/security/pam_ldap.so
account required /lib/security/pam_unix.so
password sufficient /lib/security/pam_ldap.so
password required /lib/security/pam_unix.so strict=false
session required /lib/security/pam_unix.so debug
일반적으로, pam_ldap 모듈은 일반 인증 모듈 (여기에서는 pam_unix) 바로 위에 삽입된다. 이 모듈은 사용자가 특정 호스트에만 접속할 수 있게 제한할 수도 있고 특정 호스트에 일부 사용자만 접속할 수 있도록 할 수도 있다.

기타 LDAP 기능

본 기사에서는 아주 기본적인 LDAP 기능만을 다뤘다. 기타 기능 중에 중요한 것으로는 다음과 같은 기능이 있다.
  • 복잡한 질의 처리 가능, 그래픽 오픈 소스 툴 사용 가능 (예: GQ)
  • 매우 섬세한 데이터 엑세스 제어 기능 (속성 단위로 지정 가능)
  • LDAP 서버에 대한 안전한 인증 기능
LDAP, OpenLDAP 등에 대해서 더 자세히 알고 싶다면 다음을 참고하기 바란다. 이제 톱 4까지 살펴봤다. 다음 기사에서는 3번째 툴을 살펴 본다.
아일린 프리시는 VMS, 유닉스, 맥킨토시, 윈도우 시스템 등의 다양한 시스템을 20여년간 관리해 왔다. 이 기사를 재미있게 읽어보았고 무료 ESA3 전단지를 받아 보고 싶다면 http://www.aeleen.com/esa