Unix/Open Solaris

OpenLDAP - 서버 설정

ForceCore 2009. 2. 16. 15:12
원래라면 ldap의 개념부터 가르쳐야 하는데 귀찮다. -_-;; 궁금하면 각자 검색해 보기를. OpenLDAP이, 패키지가... 없다. pkg.opensolaris.com 에는 패키지가 없다. 아직 없는건지 앞으로도 없을 건지... 썬에서 만든 것이니 sun directory를 사용하면 사용했지 openldap을 지원할 것 같진 않군.

액티브디렉토리는 달인(?)이 되어있는데 openldap은 미지의 영역이군. 썬디렉토리도 잠시 사용했었는데... 우선은 서버데몬을 설치하자.

http://forcecore.tistory.com/944
이곳에 설명된 대로 pkgutil이 설치되어 있다고 가정한다.
$ pfexec pkgutil --install openldap
서버와 client가 분리된 패키지로 있다. 우선은 서버쪽부터.

http://www.openldap.org/doc/admin24/quickstart.html
퀵스타트를 컨닝하자.

http://www.openldap.org/doc/admin24/config.html#Local%20Directory%20Service
다른 domain 서버와 interact하지 않는 서버로 구성. 서버 한 개로 소집단 정도는 커버 된다.

설치야 패키지로 했으니, configuration단계로 jump.
/opt/csw/etc/openldap
여기군. /etc/openldap 소프트링크도 생성하고...
slapd.conf.default 를 mv해서 slapd.conf로 만들자. 파일 권한이 600으로 되어있군. 보안 문제 때문일 것이다.

database bdb
suffix "dc=<MY-DOMAIN>,dc=<COM>"
rootdn "cn=Manager,dc=<MY-DOMAIN>,dc=<COM>"
rootpw secret
directory /usr/local/var/openldap-data

이 부분이 핵심 설정인데 이제 문제군... DB부분이 특히.
BerkeleyDB를 backend로 사용할 수 있고 (파일로 된 DB)
MySQL도 backend로 사용할 수 있다.
MySQL backend는 MySQL이 다운되면 전체 통합로그인 환경이 다운되는 것이니까 쓰지 않을 것이다.
BDB는 왠지 그냥 싫다. DB는 꼬일 수 있고, text로 되어있지 않아서 뻑나는 것에 민감함. performance를 희생하도라도 ldif파일을 쓰기로 했다. 어차피 소규모니까.
http://www.openldap.org/doc/admin24/backends.html#LDIF
database 를 ldif로 바꾸었다.

특히나 suffix, rootdn의 MY-DOMAIN, COM부분을 신경써서, 잘 입력해야 한다.
필자의 경우는 suffix를 "dc=lab,dc=xxx,dc=ac,dc=kr" 이렇게 설정했다. rootdn은 당연히, suffix와 같지만, 앞체 cn=Manager가 붙는 것만 다르다.

rootpw가 신경쓰이는군. 아무리 600권한 파일이라도 그렇지. 코멘트로, cleartext로 하지 말라고 되어있다. hash로 해놓을 수 있는 모양이다.

slapd.conf rootpw
로 구글 검색하니..
http://www.redhat.com/docs/manuals/enterprise/RHEL-3-Manual/ref-guide/s1-ldap-quickstart.html
$ slappasswd
명령을 치면 비번을 묻는다. 비번을 두 번 입력하면, hash값이 생성된다. 이것을 rootpw의 secret자리에 대입한다.

directory설정도 거슬린다. 저건 /export의 openldap에 저장하기로 한다.
# 으로 시작하는건 실제로 root로 로그인 했다는건 아니고, pfexec나 sudo같은 것을 썼다는 것임 -_-
# zfs create rpool/export/openldap
# chmod 700 /export/openldap
이렇게 하면 아무나 못 들어가는, 그리고 snapshot을 찍을 수 있는 openldap 디렉토리가 생성된다 :D

결과는 이렇게 보임:
database ldif
suffix "dc=lab,dc=xxx,dc=ac,dc=kr"
rootdn "cn=Manager,dc=lab,dc=xxx,dc=ac,dc=kr"
rootpw {SSHA}SECRET/sdfhsdvohwpr/0W
directory /export/openldap

이제 데몬을 시작할 차례인데...
# svcadm enable cswopenldap
을 하니 데몬이 시작된다. 굿 +_+

$ ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
를 내려보면

namingContexts: dc=lab,dc=xxx,dc=ac,dc=kr
이런 결과가 포함되어 있어야지 된다. 필자는 여기까지 문제없이 클리어.




위까지 되었으면, daemon은 도는 것이다. 이제 내용을 넣으면 완성이다.
이제 초기 항목을 넣을 차례.

이런 내용의 파일을 만든다.
dn: dc=<MY-DOMAIN>,dc=<COM>
objectclass: dcObject
objectclass: organization
o: <MY ORGANIZATION>
dc: <MY-DOMAIN>

dn: cn=Manager,dc=<MY-DOMAIN>,dc=<COM>
objectclass: organizationalRole
cn: Manager
필자의 경우 수정하고 나니...
dn: dc=lab,dc=xxx,dc=ac,dc=kr
objectclass: dcObject
objectclass: organization
o: X Lab
dc: lab
이렇게 되었다. 이 파일을 domain.ldif 로 저장하였다.

이제 실제로 추가 한다:
$ ldapadd -x -D "cn=Manager,dc=lab,dc=xxx,dc=ac,dc=kr" -W -f domain.ldif
비번을 치라고 하는데...
-D가 무슨 뜻이냐면, domain 내의 저런 항목의 권한으로 ldap에 접속하겠단 뜻이다. 즉, manager = 관리자 권한으로 접속한다는 것이다.
-W는 비번을 치겠다는 것이고,
-f는 파일을 읽어들여서 그것대로 하라는 것이다.
-x는 simple auth를 사용하겠단 것이다 (SASL대신)

** 퀵스타트 매뉴얼을 보면, Manager항목에 대한 것도 있는데, 이는 절대로 써선 안된다. 왜냐... 그러면 phpLDAPadmin을 못 쓰게 된다. 이것 때문에 꽤 고생했음.

어쨌거나 필자는 여기까지 무사히 성공했다.
어쩌면 M$ 액티브디렉토리만큼 쉬운걸(?) 별로 태클 없이 되었으니.
/export/openldap 안에 뭐가 들었는지, 궁금하면
$ pfexec bash
를 하여 #를 본 상태로, cd해서 들어가보라. 디렉토리와 파일이, dn대로 만들어져 있을 것이다.

http://forcecore.tistory.com/949 에서 클라이언트 설정을 할 것이다.