2011년 9월 8일 목요일

펌: ldap이란, 그리고 설치 및 설정

작성자 :  이준환
nahaeya@gmail.com


* LDAP 이란..


LDAP는 조직이나, 개체, 그리고 인터넷이나 기업 내의 인트라넷 등 네트웍 상에 있는 파일이나 장치들과 같은 자원 등의 위치를 찾을 수 있게 해주는 소프트웨어 프로토콜이다. LDAP는 DAP의 경량판(코드의 량이 적다는 의미임)이며, 네트웍 내의 디렉토리 서비스 표준인 X.500의 일부이다. LDAP는 초기 버전에 보안 기능이 포함되어 있지 않기 때문에 가볍다. LDAP는 미국 미시간 대학에서 유래되었으며, 적어도 40개 이상의 회사에 의해 뒷받침되어왔다. 넷스케이프는 자신들의 커뮤니케이터 최신판에 LDAP를 포함하였다. 마이크로소프트는 액티브 디렉토리라고 부르는 제품의 일부로서 LDAP를 포함하였다. 노벨 네트웨어 디렉토리 서비스는 LDAP와 상호 운영된다. 시스코 또한 자신들의 네트워킹 제품에서 LDAP를 지원한다.


출처 : http://terms.co.kr/LDAP.htm


보통 Directory Service를 보면 윈도우즈 계열에서는 AD 서버를 그리고 Unix 계열의 서버에서는 LDAP을 흔히 사용한다. 특정 프로젝트를 진행하다가 LDAP 구축이 필요해서 이글을 적게 되었다. 많은 도움이 되시길..




* LDAP 구조  예


음.. LDAP이라고 했는데.. 뭔가 감이 잘 오질 않으신다구요?? 우선 아래 그림을 보시죠..




그림 출처 : http://quark.humbug.org.au/publications/ldap/ldap_tut.html


위의 그림을 기준으로 설명하겠습니다. 위의 트리에서 가장 맨 밑에 존재하고 있는 노드들을 살펴보면,
uid=bmarshal, uid=jparker, cn=dev, cn=sysadmin 이 있죠.. 우선 사용자 uid=bmarsharl 을 살펴보면 이렇게
정리할 수 있습니다. pisoftware.com(dc) 이라는 도메인에 People(ou)라는 그룹에 속해 있는 사용자라는
것을 알수 있죠.


보통 각 사용자나 개체를 고유하게 나타내는 것을 DN(Distinguish Name)이라고 부릅니다.
DN을 표시할 때에는 노드의 가장 밑 부분부터 거꾸로 올라가면 됩니다. bmarshal이라는 사용자는
다음과 같은 DN을 갖게 되는 겁니다.


ex ) uid=bmarshal의 DN
dn="uid=bmarshal,ou=People,dc=pisoftware,dc=com"


우선 감이 조금 오시나요?? 위와 같이 거꾸로 올라간다고 가정할 때 각각의 마지막 노드들은
항상 고유한 DN을 갖고 있게 되겠지요??
 (노드들을 엔트리라고 부릅니다. )


* 엔트리 종류


주요 엔트리의 종류들을 정리 합니다. 이 보다더 많은 엔트리들이 존재하며, 주로 사용되고 있는 
엔트리들은 아래와 같습니다.


CN (Common Name) : KilDong Hong, SaRang Lee 와 같은 일반적인 이름들
SN (SirName) : 우리나라 성에 해당한다. Lee, Hong ..
OU (Organiztion Unit) : 그룹에 해당 
DC (Domain Component) : 도메인에 대한 요소 ex ) tech.example.com dc 는 example.com 혹은 tech.example.com 모두 해당
DN (Distinguished Name) : 위의 엔트리 및 기타 여러가지 엔트리들이 모여 특정한 한 사용자(혹은 물체)를 구분할 수 있는 고유의 이름. 





* Objectclass


모든 엔트리 들은 하나하나의 Objectclass 를 갖는다. Objectclass 란 동일한 설정을 갖고 있는 일종의 그룹이라고 이해를 하면 될 것 같습니다.
새로운 엔트리가 생성될 때, 특정한 Objectclass에 속하는 엔트리로 생성을 하게 되면 해당 Objectclass의 속성을 그대로 상속받게 되는 원리 .



======================================================================================



* openLDAP 설치하기


LDAP을 설치하고 설정하는 방법에 대해 정리해보겠습니다. 제가 설치한 시스템은 아래와 같습니다.


- Debian Lenny 5.0 64Bit


데비안에서는 LDAP 패키지를 찾으려면 다음과 같이 slapd로 찾아 보아야 합니다.
slapd란 다음에 대한 약자 이내요..(Stand-Alone LDAP Daemon)


slapd 패키지(openLDAP) 패키지를 설치해 보겠습니다.


# apt-get install slpad



* openLDAP 설정보기


LDAP을 설치하고 나면 다음과 같은 디렉토리에 설정 파일들이 있는 것을 볼 수 있습니다.


# cd /etc/ldap
# ls
# vi /etc/ldap/slapd.conf


이 중 slapd.conf 파일을 우선 살펴보면...


- slapd.conf ( ldap 메일 설정 )
설정파일에서 한단락 한단락씩 살펴보며 내려가 봅시다 ..


include         /etc/ldap/schema/core.schema 
include         /etc/ldap/schema/cosine.schema
include         /etc/ldap/schema/nis.schema
include         /etc/ldap/schema/inetorgperson.schema


위 스키마에 대한 설명은 /etc/ldap/schema/README 파일을 참고하시길


File                             Description
----                             -----------
collective.schema       Collective attributes (experimental)
corba.schema            Corba Object
core.schema             OpenLDAP "core"
cosine.schema           COSINE Pilot
duaconf.schema          Client Configuration (work in progress)
dyngroup.schema                 Dynamic Group (experimental)
inetorgperson.schema    InetOrgPerson
java.schema             Java Object
misc.schema             Miscellaneous Schema (experimental)
nadf.schema             North American Directory Forum (obsolete)
nis.schema              Network Information Service (experimental)
openldap.schema         OpenLDAP Project (FYI)
ppolicy.schema          Password Policy Schema (work in progress)







pidfile         /var/run/slapd/slapd.pid  => 말 그대로 slapd 데몬에 대한 pid 파일 위치


argsfile        /var/run/slapd/slapd.args  => 데몬이 시작한 명령행에 대한 디버깅 기록.


modulepath      /usr/lib/ldap  => ldap의 모듈에 대한 경로


moduleload      back_hdb => 모듈에 대한 옵션


sizelimit 500 => search시 한번에 보여줄 수 있는 엔트리의 수 .



directory       "/var/lib/ldap" => 우리가 저장하는 사용자 혹은 다른 개체들에 대한 데이터베이스(파일)이 이 디렉토리에 저장된다.


suffix   "dc=nahaeya,dc=com"  => 최상위 Base DN을 설정하는 작업으로 실제로 suffix에 해당하는 엔트리 데이터를 나중에 입력 해준다.


rootdn "cn=admin,dc=nahaeya,dc=com" => 관리자의 ID를 DN 형식으로 이렇게 입력한다.
rootpw  testpassword                             => 관리자의 패스워드를 입력한다.


access to attrs=userPassword,shadhowLastChange
by dn="cn=admin,dc=nahaeya,dc=com" write
by anonymous auth
by self write
by * none


위  내용은 Access Control (접근 제어)에 대한 내용인데 이내용에 대해서는 아래에서 정리하도록 합니다.


slapd.conf 파일에 대한 자세한 설명을 보려면 아래와 같이 max 페이지를 참고하세요.
# man slapd.conf



* ACL (Access Control List)


ACL 이란 우리가 파일시스템에서 사용자 혹은 그룹에 파일에 대한 접근 권한을 주어서 보안을 유지하는 것 처럼 파일과 디렉토리에 대한 소유자와
권한을 설정해주는 것입니다. LDAP 내의 각각의 엔트리 및 속성에 접근 권한을 설정할 수 있으며, 이에 대한 기본은 다음과 같습니다.


access to <권한제한 설정>
by <누구> <엑세스 권한>


Example >


access to attr=userpassword
by self write
by * none


위의 예에서는 패스워드 변경 속성에 대해서 자기 자신만 write(변경) 할 수 있고 나머지 사용자들은 변경해서는 안된다는 속성에 대한 예를 보여줍니다.


access to *
by dn="cn=admin,dc=nahaeya,dc=com" write
by * read


위의 예에서는 관리자만이 모든 속성에 대한 권한을 갖고 나머지 사용자들은 읽기 권한만 갖고 있는 것을 말한다.



* slapd 데몬 재시작 하기


# /etc/init.d/slapd restart



* ldap CLI 사용하기


ldap 에서는 콘솔에서 ldap에 새로운 사용자나 개체를 추가하거나, 패스워드 등을 변경할 수 있는 CLI를 제공 합니다.
이를 사용하기 위해서는 다음과 같은 패키지를 설치합니다.


# apt-get install ldapscripts


설치하는 중간에 root 관리자에 대한 DN 설정 및 패스워드 설정 등이 나오게 되니, 위의 slapd.conf 파일에서 설정데로
입력을 해주세요.


ldapscripts 패키지에는 아래와 같은 많은 CLI들을 제공 합니다.


ldapadd                  ldapdelete               ldappasswd
ldapaddgroup             ldapdeletegroup          ldaprenameuser
ldapaddmachine           ldapdeleteuser           ldapsearch
ldapadduser              ldapdeleteuserfromgroup  ldapsetprimarygroup
ldapaddusertogroup       ldapmodify               ldapwhoami
ldapcompare              ldapmodrdn


우선 ldap 설정이 잘 되었는지 아래와 같이 ldapsearch를 이용해서 실행해 봅시다.


# ldapsearch -x -b dc=nahaeya,dc=com


이렇게 했을 때에도 제대로 실행이 되지 않는다면 문제가 있는겁니다...


주로 사용하는 ldapadd 나 ldapmodify 명령어를 사용할 때에는 LDIF 파일 구조를 사용합니다.
LDIF(LDAP Data Interchange Format)란 LDAP의 데이터를 텍스트 형식으로 표현하는 데이터 포맷입니다.


LDIF 파일에 대한 example 을 찾아 봅시다.


# cd /etc/ldapscripts/
# ls

ldapaddgroup.template.sample   
ldapadduser.template.sample 
ldapscripts.passwd
ldapaddmachine.template.sample 
ldapscripts.conf


위와 같이 여러가지 sample 들이 있는 것을 알 수 있습니다.


* 그룹 추가하기

그룹을 추가하기 이전에 제일 최 상위의 엔트리를 생성한 뒤에 그룹이나 사용자들을 추가해야 합니다.
다음 예에서는 최상위 엔트리를 생성하고, TestGroup 이라는 그룹을 생성해보도록 합니다.

# vi first-add.ldif
dn: dc=nahaeya,dc=com
ObjectClass: dcObject
ObjectClass: organization
dc: nahaeya
o : Example

dn: ou=TestGroup,dc=goodmit,dc=net
ObjectClass: OrganizationalUnit
ou: TestGroup

# ldapadd -x -W -D 'cn=admin,dc=nahaeya,dc=com' -f first-add.ldif


위의 -D 옵션 뒤에는 각자의 rootdn에 맞는 입력을 해야 합니다.
위와 같이 추가한 뒤에 ldapsearch를 해보면 위에서 추가한 항목들이 새로이 추가된 것을 확인할 수 있습니다.


# ldapsearch -x -b dc=nahaeya,dc=com



* phpLdapAdmin 설치하기


위와 같이 커맨드로 콘솔에서 작업을 하다보면 힘드신 분들도 있을 겁니다. 그래서 php로 제작한 phpLdapAdmin이라는
웹 기반의 GUI 환경으로 쉽게 사용자, 그룹 등을 추가하거나 수정할 수 있습니다.


phpLdapAdmin을 설치하는 방법은 다음과 같습니다.


# apt-get install phpldapadmin


패키지가 정말 정리가 잘 되어 있네요.. 다른 것들은 설정할 필요도 없습니다.
그냥 웹 브라우저에서 아래와 같이 주소창에 입력하면 됩니다.


http://localhost/phpldapadmin


이쁘게 꾸면진 phpldapadmin 화면이 출력 되네요.. ^^



휴우.. 정신 없이 작성하다보니.. 이해가 안가는 부분이 많이 있을지도 모르겠습니다.
많이 도움이 되셨으면 합니다.





참고 자료


http://bit.ly/dEyrKI
http://bit.ly/dQpH1J
http://bit.ly/dWJrCm
http://bit.ly/edjWGG
http://phpldapadmin.sourceforge.net/


(Thanks to Eunchul)


http://fri8nd.com/category/%EB%A6%AC%EB%88%85%EC%8A%A4%20%EA%B4%80%EB%A0%A8
http://quark.humbug.org.au/publications/ldap/ldap_tut.html
http://wiki.kldp.org/wiki.php/LDAP-Tips#s-2


LDAP 문서  : http://tinyurl.com/4mvjueo
[출처] ldap이란, 그리고 설치 및 설정|작성자 이준환