· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Hosts With LDAP

일종의 HOWTO 문서입니다.


이 문서는 여러 대의 서버에서 LDAP를 통해 hosts 정보를 하나로 관리하는 방법이다. LDAP는 범용적인 디렉토리 서비스로 사용자 인증 뿐 아니라 hosts 등 NIS로 공유하는 정보들을 대부분의 정보들을 공유할 수 있는 구현들이 있다. 이 문서에서는 특히 hosts 정보를 LDAP에서 얻어오도록 설정하는 방법에 대해 다루겠다.


참여한 분(들): kyagrd

참여한 분들은 작업일지를 작성해 주세요


1. 소개

LDAP을 이용한 사용자 및 그룹 인증에 대한 문서는 많은 반면 hosts 정보를 LDAP 을 이용한 관리에 대한 문서가 아직 많지 않아 이 문서를 작성하게 되었다. LDAP를 이용해 hosts 를 공유해야 할 필요성에 대해 먼저 알아보자.

현재 인터넷에서 이름에 해당하는 장비의 IP주소를 알고자 할 때는 DNS 를 쓰는 것이 일반적이나, 아직도 내부적으로만 쓰이는 이름들(이를테면 사설망 장비 이름)은 DNS 에 등록하지 않고 hosts 파일에만 설정하여 쓰는 경우가 많다. 전통적으로 hosts 를 비롯한 네트웍 설정 그리고 시스템의 사용자 및 그룹 정보를 공유하기 위한 디렉터리 서비스로는 NIS를 사용하고 있다. 아직도 보다 시스템적인 것에만 치중하는 경우에는 (이를테면 주요 서버의 파일시스템을 NFS로 엮기) NIS를 사용하는 것이 더 효과적일 수도 있다.

그러나 시스템 사용자의 성격과는 거리가 먼 단지 특정 서비스를 이용하는 사용자와 그룹들의 정보를 (이를테면 기업 메일 서비스, SAMBA 네트웍 공유폴더 등의 사용자 및 그룹 정보) 관리하는 데는 보다 범용적인 디렉토리 서비스인 LDAP을 주로 사용하는 추세이다. LDAP은 범용적인 디렉터리 서비스이기 때문에 추가적인 정보를 아울러 관리할 수 있는 장점이 있다. 또한 NIS가 시스템 파일들을 기반으로 시스템 파일 자체를 일부 수정해 가면서 사용해야 하는 것과는 달리 LDAP을 사용하면 정보의 관리를 보다 독립적으로 관리할 수 있도록 구성이 깨끗한 장점도 있다. 특히 사용자 정보를 이미 LDAP으로 관리하고 있는 경우라면 hosts 정보도 LDAP으로 관리하는 것이 당연하다. 그리고 정말로 필요하다면 LDAP과 NIS를 동시에 사용할 수도 있다.

2. 동작 원리

LDAP 은 단지 디렉터리 서비스일 뿐이다. 이것이 hosts 파일 등과 연동하기 위해서는 별도의 이름을 어디서 찾아올지 설정하는 것이 필요한데 이것을 NSS 라고 부른다. NIS 경우도 마찬가지다.

이름으로 IP주소를 찾을 때 기본적이 시스템에서는 hosts 에서 찾아보고 없으면 DNS 에서 찾는다. NSS 를 설정이 있으면 hosts 와 DNS 이외의 NIS, LDAP 등 다른 이름을 얻어오는 방법들을 추가할 수 있고 그 순서도 임의로 조정할 수 있다. NSS 설정과 그 동작에 따른 예는 다음과 같다.

:
<NSS 가 없을 때 기본설정>
이름 찾기 관련 API 가 찾는 순서: 1./etc/hosts, 2.DNS

<NSS 설정 경우 1>
   # /etc/nsswitch.conf 의 일부
   hosts:          files dns ldap

이름 찾기 관련 API 가 찾는 순서: 1./etc/hosts, 2.DNS, 3.LDAP

<NSS 설정 경우 2>
   # /etc/nsswitch.conf 의 일부
   hosts:          files ldap dns

이름 찾기 관련 API 가 찾는 순서: 1./etc/hosts, 2.LDAP, 3.DNS
도식에 사용된 약어
  • NSS - Name Service Switch
  • DNS - Domain Name Service
  • LDAP - Lightweited Directory Access Protocol
기타 도식에 사용된 용어
  • 이름 찾기 관련 API: gethostbyname 와 같은 함수들

3. 패키지 설치 및 설정

Debian Sarge 에서 설치하고 테스트해 보았으므로 편의상 데비안 패키지 이름으로 적었다. 다음 네 가지 패키지를 설치해야 한다. 물론 의존 패키지들도 설치해야 함은 당연하다.

3.1. slapd

OpenLDAP 서버로 설정이 좀 필요하다. 기본적인 설정에 대해서는 KLDPWiki 에도 충분한 정보가 있다. 'LDAP System Admistraion', O'rellly 책이 참고서적으로 좋다. 대개 ou=hosts,dc=example,dc=com 아래에다 hosts 정보를 구성한다. 더 자세한 내용은 이후에 나올 사용 예에서 보일 것이니 거기서 확인하라.

3.2. libpam_ldap

libpam_ldap 가 hosts 설정만을 위해 필요한지 아닌지는 잘 모르겠으나, 설정파일(/etc/pam_ldap.conf)을 같이 쓰는 부분이 있는 듯 하고 계정과 패스워드 등의 정보를 ldap 를 이용하여 관리하기 위해서는 필요한 모듈이므로 깔아 두는 것이 좋겠다. 인터넷 검색 결과를 보아서는 어떤 플랫폼에서는 nss_ldap 의 경우 /etc/nss_ldap.conf 과 같은 설정파일이 있는 경우도 있는 것 같기도 하다. 하지만 데비안 sarge 의 경우는 같이 /etc/pam_ldap.conf 를 사용하는 듯 하다.

hosts 하고는 전혀 상관없지만 libpam_cracklib 도 보통 이것과 연동되는 패키지이므로 깐다. 데비안에서 패키지로 그냥 깔면 된다.

3.3. libnss_ldap

깔고 나서 /etc/pam_ldap.conf 설정파일을 설정한다. 데비안의 경우는 libpam_ldap 패키지를 설치할 때 debconf 로 설정이 기본적으로 된다. 효율 향상을 위해 추가로로 nss 관련 옵션들은 수동으로 설정할 수 있다. 옵션 설정은 기본 설치 파일에 예제가 주석처리되어 있다.

참고로 인터넷 검색 결과로 봐서는 어떤 플랫폼에서는 nss_ldap 의 경우 /etc/nss_ldap.conf 과 같은 설정파일이 있는 경우도 있는 것 같기도 하다. 하지만 데비안 sarge 의 경우는 같이 /etc/pam_ldap.conf 를 같이 사용하는 것으로 보인다.

3.4. nscd

이게 name service caching daemon 이라 이름 그대로 없어도 원칙적으로는 되는 것 같다. 하지만 이게 없으면 설정이 어렵다. 솔직히 이거 없이는 제대로 작동하게 하는 방법을 아직 모르겠고 굳이 알 필요도 없을 것 같다. 효율 면에 있어서나 설정이 복잡해진다는 점에 있어서나 이건 필수적으로 깔아야 한다고 생각하면 되겠다.

데비안에서 설정이 필요없다. 그냥 패키지로 깔고 띄우기만 하면 된다. 설정파일에 캐시 시간 등의 설정이 있을 뿐이다. 원하는 대로 변경하면 된다.

4. 사용 예

kyagrd@kyagrd:kyagrd$ ###################### LDAP 에는 들어있다. ####
kyagrd@kyagrd:kyagrd$ ldapsearch -x -LLL -b 'ou=hosts,dc=kyagrd,dc=dyndns,dc=org' "(cn=myhost.yyy.net)"
dn: cn=myhost.yyy.net,ou=hosts,dc=kyagrd,dc=dyndns,dc=org
objectClass: device
objectClass: ipHost
objectClass: top
ipHostNumber: 143.248.1.177
cn: myhost.yyy.net

kyagrd@kyagrd:kyagrd$ ###################### hosts 파일에도 없다. ####
kyagrd@kyagrd:kyagrd$ grep 'myhost.yyy.net' /etc/hosts 
kyagrd@kyagrd:kyagrd$ ###################### DNS 에서도 못찾는다 ####
kyagrd@kyagrd:kyagrd$ nslookup myhost.yyy.net
Server:         168.126.63.1
Address:        168.126.63.1#53

** server can't find myhost.yyy.net: NXDOMAIN

kyagrd@kyagrd:kyagrd$ ################# 하지만 프로그램들은 찾는다!! ####
kyagrd@kyagrd:kyagrd$ ping myhost.yyy.net
PING myhost.yyy.net (143.248.1.177) 56(84) bytes of data.

--- myhost.yyy.net ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms

kyagrd@kyagrd:kyagrd$ cat modify.ldif
dn: cn=myhost.yyy.net,ou=hosts,dc=kyagrd,dc=dyndns,dc=org
changetype: modify
replace: ipHostNumber
ipHostNumber: 127.0.0.1
kyagrd@kyagrd:kyagrd$ #################### IP주소를 고친다. ####
kyagrd@kyagrd:kyagrd$ ldapmodify -x -D 'cn=admin,dc=kyagrd,dc=dyndns,dc=org' -f modify.ldif -W
Enter LDAP Password:
modifying entry "cn=myhost.yyy.net,ou=hosts,dc=kyagrd,dc=dyndns,dc=org"

kyagrd@kyagrd:kyagrd$ # nscd 캐시가 아직 살아있어 적용이 안됐다.
kyagrd@kyagrd:kyagrd$ ping myhost.yyy.net
PING myhost.yyy.net (143.248.1.177) 56(84) bytes of data.

--- myhost.yyy.net ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 999ms
kyagrd@kyagrd:kyagrd$ ###################### nscd 를 다시 띄운다 ####
kyagrd@kyagrd:kyagrd$ su
Password:
kyagrd:/home/kyagrd# /etc/init.d/nscd restart
Stopping Name Service Cache Daemon: nscd.
Starting Name Service Cache Daemon: nscd.
kyagrd:/home/kyagrd# exit
kyagrd@kyagrd:kyagrd$ ################## 변경사항이 잘 적용되었다 ####
kyagrd@kyagrd:kyagrd$ ping myhost.yyy.net
PING myhost.yyy.net (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from localhost.localdomain (127.0.0.1): icmp_seq=2 ttl=64 time=0.025 ms

--- myhost.yyy.net ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.025/0.025/0.026/0.005 ms
kyagrd@kyagrd:kyagrd$

== 작업일지 ===

문서를 만들다 -- kyagrd 2004-12-29

일부 오탈자 수정 -- drssay 2005-04-09

captcha
Username:




sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-05-26 17:41:21
Processing time 0.0082 sec