OpenLDAP 설치 및 설정하기 – 종합 문서
Contents
1 들어가기전에 ¶
2 LDAP 개략 ¶
- LDAP 용도는 무엇인가 : 읽기에 최적화되어있습니다. 디렉토리구조에 유용합니다. (인터넷회사에서 DHCP 로 ip할당하는 정보저장, 인증서 정보저장 등에 사용되고 있습니다)
- LDAP을 가지고 활용할 수 있는 것은?
- 사용자정보통합 : os계정, 이메일계정, ftp, http, outlook의 주소록등 통합가능. OS계정의 경우 호스트와 사용자 조합으로 접속제한을 할 수 있음.
- 참고로 윈도우즈의 Active Directory는 LDAP과 커버러스를 이용함. LDAP은 계정통합, 각종
정보통합에 사용을 하고 커버러스는 싱글사인온(SSO)에 사용을 함. 커버러스를 이용하여 네트워크를 통해 패스워스를 보내지 않고
키서버를 통하여 통신을 하고 티켓을 발급한 일정한 시간동안은 필요한 자원에 대한 별도 로그인이 필요없음.
3 문서소개 ¶
- 본 내용은 Redhat Enterprise Linux 3, CentOS4.4 에서 테스팅을 한 내용이며 다른 리눅스 배포판에서도 비슷하게 적용이 가능합니다. PAM 설정등은 시스템에 따라 다를 수 있습니다.
- LDAP 에 대한 소개가 아니므로 이에 대한 설명은 다른 문서를 참고하시기 바랍니다.
- openldap을 이용하여 계정통합을 하는 부분에 대한 자료는 여러가지가 있는데 이 문서는 거기에 추가로 필요한 상세한 내용을 담았습니다.
- LDAP을 이용한 사용자 인증 통합 (id, group, hosts)
- 사용자별, 호스트별 사용자 접속 제한
- 아이디, 그룹관리 프로그램(cpu)
- ldap replication (1 master, 1 slave)
- TLS 사용한 암호화통신
- nfs, autofs 이용한 사용자 홈디렉토리 공유
- outlook 등 주소록 활용
- 아파치 인증 활용
- 로그확인(syslog)
- gui 관리 프로그램
- 2007-01-07 16:36:50 NIS 기능으로 호스트 접근제한 추가
4.1 LDAP 초보자를 위한 기초자료 ¶
- LDAP에 대한 한글자료는 DSN의 자료 1개와 KLDP의 LDAP 하우투 및 기타 몇개의 문서가 있습니다. 상세한 내용은 영문자료를 보아야 합니다.
- http://database.sarang.net/?inc=read&aid=1243&criteria=ldap&subcrit=tutorials&id=&limit=20&keyword=&page=1
: LDAP의 모든것 ver 20011126. DSN에 2001년 올라왔던 ldap 전반적인 자료. 국내에 ldap 에 대한
한글자료가 별로 없는데 그나마 상세하게 ldap 에 대한 설명이 들은 한글문서입니다. 전체적으로는 LDAP기초부터 기본적인
사용법을 담고 있어 처음에 참고를 할 만 합니다. - http://wiki.kldp.org/wiki.php/LinuxdocSgml/LDAP-HOWTO : KLDP LDAP 하우투자료
- O’REILLY 의 LDAP System Administration 서적 : LDAP 전반적인 설명을 담고 있으며 각종 애플리케이션을 ldap으로 통합하는 경우에 대한 상세한 자료를 제공하고 있음
- http://www.openldap.org/doc/admin23/ openldap 문서 : openldap에 대한 기본 사용법은 openldap 에서 제공하는 문서를 참고
4.2 LDAP을 이용한 계정통합 ¶
- http://www.linuxjournal.com/article/8119 : OpenLDAP Everywhere – openldap 을 통한 계정통합 및 autofs 에 대한 내용. 상세한 세팅내용이 담겨있음. 주로 참고하였음.
- http://www-128.ibm.com/developerworks/library/l-openldap/index.html openldap 을 이용한 계정통합. 로그조정, relication, TLS 세팅에 대한 자료가 있음
- http://www.samag.com/documents/s=9494/sam0502a/0502a.htm : Centralized User Management with Kerberos and LDAP – kerberos, ldap을 이용한 사용자 통합에 대한 문서로 cpu 프로그램에 대한 소개가 있음
- http://www.linuxjournal.com/article/5505 : Highly Available LDAP – 공개 ha 프로그램을 이용하한 ldap ha 구성에 대한 내용임. ldap 구성에 대한 내용은 아니므로 도움은 되지 않을 듯 하지만 참고로 넣어두었음
4.3 기타 참고자료 ¶
- http://www.redhat.com/docs/manuals/dir-server/ 레드햇의 LDAP 문서. Administrator’s Guide 등은 참고로 보면 좋을듯하며 Deployment Guide 는 ldap 설계에 대한 상세한 내용을 담고 있습니다.
- http://www.redhat.com/docs/manuals/dir-server/deploy/7.1/deployTOC.html Deployment Guide Red Hat Directory Server . 데이타 디자인, 스키마 디자인, 디렉토리 트리 디자인, 토폴리지 디자인, 리플리케이션 디자인, 보안 디자인, 튜닝 및 최적화, 운영관련 결정사항
- http://directory.fedora.redhat.com/ 페도리 디렉토리 서버. 레드햇에서 넷스케이프 디렉토리를 인수하여 제품화한 것이 레드햇 디렉토리 서버이며 이에 대한 공개버전이 페도리 디렉토리 서버입니다.
5.1 정책결정 ¶
- LDAP 설계하기 : 데이타 디자인, 스키마 디자인, 디렉토리 트리 디자인, 토폴리지 디자인, 리플리케이션 디자인, 보안 디자인, 튜닝 및 최적화, 운영관련 결정사항
- dc(suffix) 정하기 : 사용할 도메인 rootdn 의 패스워드 결정
- 계정정책 : UID, GID 범위
5.2 설치프로그램 ¶
- RPM을 이용하여 설치
- openldap-devel : openldap 과 연관된 프로그램을 개발할때 필요함. cpu 프로그램을 사용해야 할 경우 필요함
- openldap : OpenLDAP 서버와 클라이언트 프로그램을 실행하기 위한 라이브러리
- openldap-clients : client 프로그램
- openldap-servers : server 프로그램
- nss_ldap : NSS library and PAM module for LDAP
6 ldap 서버설정 ¶
[root@localhost openldap]# grep -v "^#" slapd.conf
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/nis.schema
allow bind_v2
pidfile /var/run/slapd.pid
argsfile /var/run/slapd.args
loglevel 256
TLSCipherSuite HIGH:MEDIUM:+SSLv2
TLSCACertificateFile /etc/openldap/cacerts/cacert.pem
TLSCertificateFile /etc/openldap/slapdcert.pem
TLSCertificateKeyFile /etc/openldap/slapdkey.pem
database bdb
suffix "dc=samjung,dc=com"
rootdn "cn=manager,dc=samjung,dc=com"
rootpw {SSHA}aaaaaamoxk2Sswm8NbHZbCx9LxextJ
directory /var/lib/ldap
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
cachesize 2000
access to dn.subtree="dc=samjung,dc=com" attr=userPassword
by self write
by * auth
access to dn.subtree="ou=people,dc=samjung,dc=com"
by * read
access to dn.subtree="ou=group,dc=samjung,dc=com"
by * read
access to dn.subtree="ou=hosts,dc=samjung,dc=com"
by * read
access to *
by * auth
replogfile /var/lib/ldap/openldap-master-replog
replica uri=ldap://cent.tunelinux.pe.kr:389
suffix="dc=samjung,dc=com"
binddn="cn=replica,dc=samjung,dc=com"
credentials=xxxxxx
bindmethod=simple
tls=yes
# /etc/init.d/ldap start
Starting slapd: [ OK ]
group, hosts 정보는 누구나 읽을 수 있도록 하였다. replication 부분도 초기 세팅시 빼도 된다.
7.1 directory structure 생성 ¶
dn: dc=samjung,dc=com
objectclass: dcObject
objectclass: organization
o: samjung Company
dc:samjung
dn: cn=manager, dc=samjung, dc=com
objectclass: organizationalRole
cn: manager
dn: ou=people, dc=samjung, dc=com
ou: people
objectclass: organizationalUnit
objectclass: domainRelatedObject
associatedDomain: samjung.com
dn: ou=contacts,ou=people, dc=samjung, dc=com
ou: contacts
ou: people
objectclass: organizationalUnit
objectclass: domainRelatedObject
associatedDomain: samjung.com
dn: ou=group, dc=samjung, dc=com
ou: group
objectclass: organizationalUnit
objectclass: domainRelatedObject
associatedDomain: samjung.com
# ldapadd -x -D 'cn=manager,dc=samjung,dc=com' -W -f top.ldif
Enter LDAP Password:
adding new entry "dc=samjung,dc=com"
adding new entry "cn=manager, dc=samjung, dc=com"
adding new entry "ou=people, dc=samjung, dc=com"
adding new entry "ou=contacts,ou=people, dc=samjung, dc=com"
adding new entry "ou=group, dc=samjung, dc=com"
7.2 ldap 프로그램에서의 옵션참고 ¶
-f file : 파일에서 입력을 받을 경우 사용 -W : prompt for simple authentication .
기본인증에서 비밀번호를 별도 입력으로 받을 경우 사용 -w : 비밀번호를 명령행에서 바로 옵션으로 줌 -b :
searchbase 검색범위 지정
7.3 위에서 입력한 내용을 검색하기 ¶
# ldapsearch -x -b 'dc=samjung,dc=com'
version: 2
#
# filter: (objectclass=*)
# requesting: ALL
#
# samjung, com
dn: dc=samjung,dc=com
objectClass: dcObject
objectClass: organization
o: samjung Company
dc: samjung
중략...
# search result
search: 2
result: 0 Success
# numResponses: 6
# numEntries: 5
8.1 ldap 으로 단일한 리눅스 로그인 만들기 ¶
8.2 로컬 컴퓨터 사용자 엔트리 만들기 ¶
# cat people.ldif
# ldaptest, people, samjung.com
dn: uid=ldaptest,ou=people,dc=samjung,dc=com
cn: ldaptest
objectClass: account
objectClass: posixAccount
objectClass: shadowAccount
objectClass: top
uidNumber: 1000
gidNumber: 1000
homeDirectory: /home/ldaptest
loginShell: /bin/bash
shadowLastChange: 11192
shadowMin: -1
shadowMax: 99999
shadowWarning: 7
shadowInactive: -1
shadowExpire: -1
shadowFlag: 134538308
uid: ldaptest
userPassword: {crypt}$1$OQAQLKrD$ktucNP.aAo/w5gbuAIV6H1
# ldapadd -x -D 'cn=manager,dc=samjung,dc=com' -W -f people.ldif
Enter LDAP Password:
adding new entry "uid=ldaptest,ou=people,dc=samjung,dc=com"
# ldapsearch -x -b "dc=samjung,dc=com" "(objectclass=*)"
ldapdelete -x -D 'cn=manager,dc=samjung,dc=com' 'uid=ldaptest,ou=people,dc=samjung,dc=com' -W
8.3 기존계정정보 이용하여 마이그레이션하기 ¶
사전에 migrate_common.ph 에서 몇가지 옵션을 수정함. migrate_common.ph 가 변경한 프로그램이고
migrate_common.ph.orig 가 원래의 설정이다.
# diff migrate_common.ph migrate_common.ph.orig
71c71
< $DEFAULT_MAIL_DOMAIN = "sds.co.kr";
---
> $DEFAULT_MAIL_DOMAIN = "padl.com";
74c74
< $DEFAULT_BASE = "dc=samjung,dc=com";
---
> $DEFAULT_BASE = "dc=padl,dc=com";
90c90
< $EXTENDED_SCHEMA = 1;
---
> $EXTENDED_SCHEMA = 0;
/usr/share/openldap/migration/migrate_passwd.pl /etc/passwd
/usr/share/openldap/migration/migrate_group.pl /etc/group
/etc/services, /etc/netgroup 등도 가능하다. 나중에 /etc/hosts 를 LDAP으로 이전하는 곳에서
다시 설명을 한다.
8.4 그룹 엔트리 만들기 ¶
# cat group.ldif
dn: cn=webdev,ou=group,dc=samjung,dc=com
objectClass: posixGroup
objectClass: top
cn: webdev
gidNumber: 2000
memberUid: ldaptest
# ldapadd -x -D 'cn=manager,dc=samjung,dc=com' -W -f group.ldif
Enter LDAP Password:
adding new entry "cn=webdev,ou=group,dc=samjung,dc=com"
9.1 ldap client 설정하기 ¶
/etc/nsswitch.conf, /etc/sysconfig/authconfig, /etc/pam.d/system-auth
파일을 자동으로 바꾸어준다.
Authentication Configuration 에서 Use LDAP Authentication 사용함. Server 및
Base DN에 적당하게 값을 넣음. 여기서는 dc=samjung,dc=com start_tls 는 나중에 다시 설명한다.
# diff /etc/ldap.conf.orig /etc/ldap.conf
18c18
< base dc=example,dc=com
---
> base dc=samjung,dc=com
# diff /etc/openldap/ldap.conf.orig /etc/openldap/ldap.conf
16c16
< BASE dc=example,dc=com
---
> BASE dc=samjung,dc=com
# diff /etc/nsswitch.conf.orig /etc/nsswitch.conf
33,35c33,35
< passwd: files
< shadow: files
< group: files
---
> passwd: files ldap
> shadow: files ldap
> group: files ldap
53c53
< protocols: files
---
> protocols: files ldap
55c55
< services: files
---
> services: files ldap
57c57
< netgroup: files
---
> netgroup: files ldap
61c61
< automount: files
---
> automount: files ldap
hosts 만 바꾸면 작동하는데 아래는 몇가지를 추가하였다. start_tls 를 이용하여 tls 설정,
pam_check_host_attr 를 이용하여 사용자별 서버접속제한, pam_filter ,
pam_login_attribute 를 이용하여 사용자검색시 사용할 objectclass와 login 애트리뷰트를 설정하였다.
또한 nss_base 를 이용하여 해당 정보에 대하여 빠르게 검색할 수 있도록 기본 필터를 설정하였다. 초기 테스팅을 할
경우에는 아래와 같이 옵션을 할 필요는 없다.
# grep -v "^#" /etc/ldap.conf
host cent3.tunelinux.pe.kr
base dc=samjung,dc=com
timelimit 120
bind_timelimit 120
idle_timelimit 3600
ssl start_tls
tls_checkpeer yes
tls_cacertfile /etc/openldap/cacerts/cacert.pem
pam_password md5
pam_check_host_attr yes
pam_filter objectclass=posixAccount
pam_login_attribute uid
nss_base_passwd ou=people,dc=samjung,dc=com?one
nss_base_shadow ou=people,dc=samjung,dc=com?one
nss_base_group ou=group,dc=samjung,dc=com?one
nss_base_hosts ou=hosts,dc=samjung,dc=com?one
nss_base_netgroup ou=netgroup,dc=samjung,dc=com?one
# grep ^host /etc/ldap.conf
host cent3.tunelinux.pe.kr cent.tunelinux.pe.kr
9.2 group 정보표시 ¶
경우가 있었다. 이경우 /etc/ldap.conf 에서 바로 위에서 보듯이 nss_base_group 을 설정해주면 되었다.
nss_base_group ou=group,dc=samjung,dc=com?one
# getent passwd
# getent group
10 사용자 홈디렉토리 처리 ¶
- autofs 와 nfs를 이용하여 사용자가 로그인할때 nfs에서 자동으로 홈디렉토리 마운트하기 : 사용자 데이터도 동일하게 설정할 경우 편리함.
- pam 의 기능을 이용하여 사용자 홈디렉토리가 없을 경우 자동으로 생성하기 :
/etc/pam.d/system-auth 에 다음 모듈을 추가해주면 됨. umask 는 아래에서는 기본 700으로 생성하도록
설정했고 필요에 따라 변경하면 됨
session optional /lib/security/$ISA/pam_mkhomedir.so skel=/etc/skel umask=0077
11 /etc/hosts 정보 LDAP에 넣기 ¶
migrate_base.pl 는 마이그레이션 가능한 각종 기본정보에 대해서 보여준다. migrate_base.pl 를 이용하여
hosts 에 대한 기본정보를 뽑고 /etc/hosts 정보를 변환하여 ldap에 넣어준다. 세부설명은 생략하겠다.
# ./migrate_base.pl
dn: ou=Hosts,dc=samjung,dc=com
ou: Hosts
objectClass: top
objectClass: organizationalUnit
objectClass: domainRelatedObject
associatedDomain: sds.co.kr
[root@cent3 migration]# ./migrate_hosts.pl /etc/hosts > hosts.ldif
dn: cn=localhost.localdomain,ou=Hosts,dc=samjung,dc=com
objectClass: top
objectClass: ipHost
objectClass: device
ipHostNumber: 127.0.0.1
cn: localhost.localdomain
cn: localhost
dn: cn=cent3.tunelinux.pe.kr,ou=Hosts,dc=samjung,dc=com
objectClass: top
objectClass: ipHost
objectClass: device
ipHostNumber: 222.112.137.138
cn: cent3.tunelinux.pe.kr
# ldapadd -x -D 'cn=manager,dc=samjung,dc=com' -W -f hosts.ldif
그런후 /etc/nsswitch.conf 를 변경한다.
[root@cent3 migration]# grep hosts /etc/nsswitch.conf
#hosts: db files ldap nis dns
#hosts: files dns
hosts: files dns ldap
[root@cent3 migration]# grep hosts /etc/ldap.conf
# Multiple hosts may be specified, each separated by a
#nss_base_hosts ou=Hosts,dc=example,dc=com?one
nss_base_hosts ou=hosts,dc=samjung,dc=com?one
[root@cent3 migration]# getent hosts
테스팅과정중에 발견한 중요한 내용이 있다. /etc/nsswitch.conf 에서 hosts 설정순서가 중요하다. ldap
클라이언트에서 자신의 호스트네임을 풀어야한다. 이때문에 dns 항목이 ldap 보다 앞에 오거나 호스트명을 /etc/hosts
파일에 적어주어야 한다. 이렇게 하지 않으면 segmentation fault 에러가 나고 이후부터는 id 등 각종 프로그램에서
계속 세그멘테이션 폴트가 나면서 시스템 작동이 이상해진다.
# getent hosts
127.0.0.1 localhost.localdomain localhost
Segmentation fault
The order within /etc/nsswitch.conf is important, and the ldap client
code needs to resolve its own hostname! Therefor dns must be before
ldap or the hostname must be in /etc/hosts!
12.1 서버에서 검색제한하기 ¶
- sizelimit : 검색요청을 할 경우 클라이언트의 요청에 답하는 최대 엔트리 숫자. 기본값은 500
- timelimit : 검색요청에 응답을 할때 걸리는 최대 시간. 기본값은 3600초(1시간)
12.2 /etc/ldap.conf 주요 옵션에 대하여 ¶
- host는 ldap 서버, base 는 base dn이다.
- ssl start_tls 는 TLS를 사용하는 경우 체크하는 옵션이다. 암호화되어 통신하는 것이다.
- pam_check_host_attr 는 hosts를 이용하여 사용자별로 접속할 호스트를 제한하는데 사용한다.
- pam_filter 는 사용자 인증시 사용할 필터이다. pam_login_attribute 는 사용자의 로그인 명과 일치하는 attribute를 지정한다.
- nss_base_xxx 는 nss_ldap 에서 검색하는 부분을 지정하여 LDAP 서버의 부하를 줄일 수 있다. passwd, shadow는 상관없지만 group, hosts는 등록을 해주어야했다.
ssl start_tls
tls_cacertdir /etc/openldap/cacerts
pam_password md5
pam_check_host_attr yes
pam_filter objectclass=posixAccount
pam_login_attribute uid
nss_base_passwd ou=people,dc=samjung,dc=com?one
nss_base_shadow ou=people,dc=samjung,dc=com?one
nss_base_group ou=group,dc=samjung,dc=com?one
nss_base_hosts ou=hosts,dc=samjung,dc=com?one
13 호스트, 사용자별 접근제한 ¶
사용자들을 지정하는 방식(a.server 에 a,b,c 사용자 접속가능)이 있고 두번째는 특정한 사용자가 접속가능한 호스트들을
지정하는 방식(a 사용자는 가,나,다 서버에 접속가능)이 있다. 실제 사용하는 경우 뒤의 방식이 더 편리하다. 앞의 방식은
클라이언트에서 설정을 일일이 세팅해야하지만 뒤의 방식은 클라이언트에서 동일한 설정을 유지하되 ldap서버에서 변경을 할 수가
있다.
13.1 특정 호스트에 접속가능한 사용자 제한하기 ¶
/etc/openldap/ldap.conf가 아니다. 사용자를 추가할때 host 에 접속가능한 호스트 지정. 여기서 IP로
지정하면 접속이 되지 않았고 정확한 도메인명을 지정해야한다.
# test, people, samjung.com
dn: uid=test,ou=people,dc=samjung,dc=com
중간내용 생략
host: kldp.org
host: cent3.tunelinux.pe.kr
13.2 특정 호스트에 접속가능한 사용자 제한하기 ¶
# cat host.ldif
dn: ou=hosts, dc=samjung, dc=com
ou: hosts
objectclass: organizationalUnit
objectclass: domainRelatedObject
associatedDomain: samjung.com
# ldapadd -x -D 'cn=manager,dc=samjung,dc=com' -W -f host.ldif
# cat iphost.ldif
dn: cn=linux,ou=hosts,dc=samjung,dc=com
objectClass: ipHost
objectClass: device
objectClass: extensibleObject
ipHostNumber: 192.168.0.23
cn: linux.samjung.com
cn: linux
member: uid=test,ou=people,dc=samjung,dc=com
member: uid=test2,ou=people,dc=samjung,dc=com
# ldapadd -x -D 'cn=manager,dc=samjung,dc=com' -W -f iphost.ldif
pam_groupdn cn=linux,ou=hostss,dc=samjung,dc=com
pam_member_attribute member
테스팅을 한 결과 /etc/ldap.conf 에 pam_groupdn 설정을 두개 넣으면 작동을 하지 않았다. 그렇지만 각 ldap client 쪽에 이 설정이 두가지 들어갈 일이 없으므로 문제가 되지는 않는다.
13.3.1 관련자료 ¶
13.3.2 NIS netgroup 기능 ¶
- 개별 시스템 또는 시스템그룹에 사용자와 그룹 로그인 접근 제어
- NFS 접근 제어 목록 관리
- 사용자,그룹에 대한 sudo 명령어 접근제어
- dsh(distributed shell)을 이용하여 원격 명령 실행 또는 시스템그룹에 작업
- cfengine을 이용하여 정책 기반의 시스템 설정관리
tcp 래퍼를 통하여 간단한 예를 살펴보자.
# /etc/hosts.deny
sshd: ALL
# /etc/hosts.allow
sshd: @sysadmin
sysadmin (a.com,-,-)(b.com,-,-)
또는 다른 netgroup을 포함할 수 있다.
all_sysadmin sysadmin secure_clients
(a.com,-,-) 구성은 host, user, NIS-domain 으로 구성이 되며 -는 생략을 해도 된다. 마지막 NIS-domain은 생략을 해도 LDAP과 cfengine 에서 사용이 가능하였다.
13.3.3 LDAP 에서 netgroup 구현 ¶
(cent.tunelinux.pe.kr,,samjung.com) 을 지정할 수 있으며 여러개의 값이 들어갈 수 있다.
memberNisNetgroup : 다른 netgroup 를 포함할 수 있다. 대그룹, 소그룹 등으로 분류하여 편리하게 사용할
수 있는 기능이다. 이또한 여러개의 값을 가질 수 있다.
dn: ou=netgroup,dc=samjung,dc=com
objectClass: organizationalUnit
ou: netgroup
dn: cn=sysadmin,ou=netgroup,dc=samjung,dc=com
objectClass: nisNetgroup
objectClass: top
cn: sysadmin
description: netgroup test group
nisNetgroupTriple: (cent1.tunelinux.pe.kr,-,-)
nisNetgroupTriple: (cent2.tunelinux.pe.kr,-,-)
dn: cn=sysadmin2,ou=netgroup,dc=samjung,dc=com
objectClass: nisNetgroup
objectClass: top
cn: sysadmin2
description: netgroup test group2
memberNisNetgroup: sysadmin
memberNisNetgroup: sysadmin2
dn: cn=allusers,ou=Netgroup,dc=samjung,dc=com
objectClass: nisNetgroup
objectClass: top
cn: users0
nisNetgroupTriple: (,a,)
nisNetgroupTriple: (,b,)
description: All QA users in my organization
넷그룹으로 묶으며 sysadmin2는 memberNisNetgroup을 이용하여 sysadmin, sysadmin2 넷그룹을
묶는 것이다. nisNetgroupTriple 과 memberNisNetgroup은 같이 들어갈 수도 있다. alluser는
a,b 사용자를 묶었다. 위에서 설명한바와 같이 NIS 도메인 명은 입력을 하지 않아도 작동하는데는 문제가 없었다. 페도라
디렉토리 서버 위키의 문서중 “System Access Control using LDAP backed NIS
netgroup”에는 다음과 같이 나와있다. http://directory.fedora.redhat.com/wiki/Howto:netgroup
Finally to enable the netgroup query, NISDOMAIN must be defined (in /etc/sysconfig/network) even though it is not used. This is required because the innetgr() call is used and it requires a nisdomainname as a paramter. Once the functions resolves to LDAP via nsswitch.conf, the nisdomainname in no longer required.
nss_base_netgroup ou=netgroup,dc=samjung,dc=com?one
netgroup: ldap
# getent netgroup sysadmin
sysadmin (cent1.tunelinux.pe.kr, , ) (cent2.tunelinux.pe.kr, , )
13.3.4 PAM 접근제어 연동 ¶
dn: cn=QAUsers,ou=Netgroup,dc=example,dc=com
objectClass: nisNetgroup
objectClass: top
cn: QAUsers
nisNetgroupTriple: (,bobby,example.com)
nisNetgroupTriple: (,joey,example.com)
description: All QA users in my organization
dn: cn=QASystems,ou=Netgroup,dc=example,dc=com
objectClass: nisNetgroup
objectClass: top
cn: QASystems
nisNetgroupTriple: (qa01,,example.com)
nisNetgroupTriple: (qa02,,example.com)
description: All QA systems on our network
지정할 수 있다. 이에 대해서는 별도로 PAM 정보를 참고한다. access.conf 파일에서 nis의 넷그룹은
@netgroupname 형태로 이용하면 된다. 여기서 호스트명이나 사용자명 한가지만 이용하는 것이 아니라 두가지를 결합하면
여러가지 편리한 점이 있다. 아래의 내용은 10.x.x.x 네트워크에서 QASystems에 QAUsers 가 접속할 수 있도록 하는 것이다.
+ : @QAUsers@@QASystems : 10.
+ : root : LOCAL
+ : @Admins : 10.
- : ALL : ALL
13.3.5 cfengine 에서의 사용 ¶
NIS netgroup을 이용하는 경우에는 +나 +@ 기호를 이용한다. 여기서 유용한 것이 netgroup except 이다.
아래에서 testgroup은 mynetgoup을 포함하고 있는데 mynetgoup 에서 특정 호스트만 빼려고 할 경우에는 –
기호를 이용하여 지정하면 된다.
groups:
science = ( +science-allhosts )
physics = ( +physics-allhosts )
physics_theory = ( +@physics-theory-sun4 dirac feynman schwinger )
testgroup = ( +mynetgroup -specialhost -otherhost )
13.3.6.2 nisNetgroupTriple 추가, 변경시 ¶
no equality matching rule 라는 에러가 난다. attribute 정의에서 nisNetgroupTriple 은
매칭 룰이 없다. 이 부분이 영향을 미치는 것 같다. 좋은 방법은 아닌듯하지만 스키마에서 EQUALITY 와 SYNTAX를
수정해주었지만 제대로 작동하지는 않았다.
# cat mod.txt
dn: cn=sysadmin2,ou=netgroup,dc=samjung,dc=com
changetype: modify
add: nisNetgroupTriple
nisNetgroupTriple: (cent2.tunelinux.pe.kr,,)
# ldapmodify -D "cn=manager,dc=samjung,dc=com" -W -x -v -f mod.txt
ldap_initialize( <DEFAULT> )
add nisNetgroupTriple:
(cent2.tunelinux.pe.kr,,)
modifying entry "cn=sysadmin2,ou=netgroup,dc=samjung,dc=com"
modify complete
ldap_modify: Inappropriate matching (18)
additional info: modify/add: nisNetgroupTriple: no equality matching rule
attributetype ( 1.3.6.1.1.1.1.13 NAME 'memberNisNetgroup'
EQUALITY caseExactIA5Match
SUBSTR caseExactIA5SubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.26 )
attributetype ( 1.3.6.1.1.1.1.14 NAME 'nisNetgroupTriple'
DESC 'Netgroup triple'
SYNTAX 1.3.6.1.1.1.0.0 )
않는다. 매칭룰때문에 생기는 문제라고 판단이 되며 이럴 경우 해당 dn을 삭제하고 신규로 dn를 넣어주어야 한다.
13.4 사용자 접근제한 어떤 방법이 좋을까? ¶
(pam_groupdn, pam_member_attribute 설정) pam_check_host_attr 또는 LDAP에
NIS를 연동하는 방식이 관리상 편리할 것이다.
지정한다. 모든 것을 LDAP에서 관리하고 /etc/ldap.conf 에서 pam_check_host_attr 지정하는 것 외에
별도의 설정이 필요없으므로 구성이 간단하다. 하지만 시스템과 사용자규모가 커지면 별도의 관리툴을 만들지 않으면 불편하다.
있다. /etc/security/access.conf는 시스템에 달라지는것이 아니라 모든 시스템에서 동일한 내용을 공유할 수
있다. 기본설정은 동일하되 특정 그룹에 대한 조정은 ldap을 통하여 하면 된다. 한가지 단점이라면
nisNetgroupTriple은 한개만 입력가능, 한개만 있을 경우 수정, 삭제가 가능한데 두개이상 추가는 되지가 않는다.
매칭룰때문에 생기는 문제라고 판단이 되며 이럴 경우 해당 dn을 삭제하고 신규로 dn를 넣어주어야 한다. 이러한 불편함은 있지만
기본 제공되는 기능만으로 가장 강력하게 접근제어를 할 수가 있다. 또한 NIS기능을 cfengine 등 다른 프로그램에서도
활용이 가능하다.
14 user 변경 프로그램 – cpu ¶
- rpmfind 에서 cpu rpm을 다운로드 받아도 됨. rhel4 버전에 맞춘 rpm이 있음. 여기서 설치한 rpm의 cpu 프로그램은 다른 사용자도 사용할 수 있으므로 root만 사용하도록 조정한다.
[root@cent3 migration]# ll /usr/sbin/cpu
-rwxr-xr-x 1 root root 12127 Feb 17 2005 /usr/sbin/cpu
[root@cent3 migration]# chmod 700 /usr/sbin/cpu
./configure --prefix=/usr/local/cpu
make
make install
이제 /usr/local/cpu 에 프로그램이 설치가 된다.
# grep samjung /usr/local/cpu/etc/cpu.conf
BIND_DN = cn=Manager,dc=samjung,dc=com
USER_BASE = ou=People,dc=samjung,dc=com
GROUP_BASE = ou=Group,dc=samjung,dc=com
#HASH = "md5"
HASH = "crypt"
BIND_PASS = xxxx
MAX_UIDNUMBER = 10000
MIN_UIDNUMBER = 1000
MAX_GIDNUMBER = 10000
MIN_GIDNUMBER = 1000
# /usr/local/cpu/sbin/cpu useradd test
# /usr/local/cpu/sbin/cpu userdel test
$ /usr/local/cpu/sbin/cpu usermod -p test2
[root@localhost openldap]# id test
uid=1001(test) gid=1001(test) groups=1001(test)
[root@localhost openldap]# /usr/local/cpu/sbin/cpu groupmod -g 1005 test
Group test successfully modified!
[root@localhost openldap]# id test
uid=1001(test) gid=1001 groups=1001,1005(test)
[root@localhost openldap]# /usr/local/cpu/sbin/cpu groupmod -n test222 test
Group test222 successfully modified!
[root@localhost openldap]# id test
uid=1001(test) gid=1001 groups=1001,1005(test222)
export PATH=$PATH:/usr/local/cpu/sbin
export MANPATH=$MANPATH:/usr/local/cpu/man
man cpu-ldap
[root@cent ~]# cpu cat
User Accounts
ldaptest:x:1001:1001::/home/ldaptest:/bin/bash
ldap2:x:1000:1002::/home/ldap2:/bin/bash
Group Entries
webdev:x:2000:
test:x:1000:
ldaptest:x:1001:
ldap2:x:1002:
[root@cent ~]# cpu usermod -p ldaptest
이름의 그룹을 생성한다. 그러므로 처음 생성시 -g 옵션을 이용하여 그룹을 지정하는것이 좋다. 아니면 사용자 생성후 그룹을
바꾸어주어도 된다.
[root@cent3 openldap]# cpu useradd -g test5 ilove
[root@cent3 openldap]# cpu usermod -g test ilove
15.1 nfs 서버 세팅 ¶
# cat /etc/exports
/tmp 192.168.0.0/255.255.255.0(rw,sync)
# /etc/init.d/nfs start
15.2 autofs 세팅 ¶
디렉토리에 접근하는 경우 /etc/auto.home 파일을 참고하며 auto.home 은 /home 의 모든 하위
디렉토리(*)에 접근하는 경우 nfs 192.168.0.24:/tmp 의 해당 디렉토리에 마운트함
# cat /etc/auto.master
/home /etc/auto.home --timeout=5
# cat /etc/auto.home
* -rw,soft,intr 192.168.0.24:/tmp/
# cat auto.master.ldif
dn: ou=auto.master,dc=samjung,dc=com
objectClass: top
objectClass: automountMap
ou: auto.master
dn: cn=/home,ou=auto.master,dc=samjung,dc=com
objectClass: automount
cn: /home
automountInformation: ldap:ou=auto.home,dc=samjung,dc=com
# ldapadd -x -D 'cn=manager,dc=samjung,dc=com' -W -f auto.master.ldif
Enter LDAP Password:
adding new entry "ou=auto.master,dc=samjung,dc=com"
adding new entry "cn=/home,ou=auto.master,dc=samjung,dc=com"
# cat auto.home.ldifc
dn: ou=auto.home,dc=samjung,dc=com
objectClass: top
objectClass: automountMap
ou: auto.home
dn: cn=/,ou=auto.home,dc=samjung,dc=com
objectClass: automount
cn: *
automountInformation: 192.168.0.24:/tmp/
# ldapadd -x -D 'cn=manager,dc=samjung,dc=com' -W -f auto.home.ldifc
Enter LDAP Password:
adding new entry "ou=auto.home,dc=samjung,dc=com"
adding new entry "cn=test,ou=auto.home,dc=samjung,dc=com"
이렇게 하는 경우 /etc/auto.master 를 ldap 에서 사용할 수 있도록 바꾸어 줄수 있음
# cat /etc/auto.master
#/home /etc/auto.home --timeout=5
/home ldap:192.168.0.23:ou=auto.home,dc=samjung,dc=com --timeout=5
16.1 outlook 등 이메일클라이언트 세팅하기 ¶
16.1.1 아웃룩 ¶
적절한 이름을 택하여 찾기 쉽도록 넣는다. 서버 이름에 ldap 서버 정보를 입력한다. 로그인 필요에서는 위에서 만든
ldaptest 등을 이용하면 된다. uid=ldaptest,ou=people,dc=samjung,dc=com 를 넣어주면 될
것이다. 암호는 위 id에 해당하는 비밀번호를 넣으면 된다. 보안 암호 인증을 사용하여 로그인은 잘 모르겠다. 고급에서
검색기준을 입력한다. ou=people,dc=samjung,dc=com
16.1.2 선더버드 ¶
찾기 쉽도록 넣는다. 호스트 이름에 ldap 서버 정보를 입력한다. 기본 dn에
ou=people,dc=samjung,dc=com 를 입력한다. 기준이 되는 dn을 입력하는 것이다. 포트번호는 ldap
포트번호를 적는다. DN 바인드는 인증을 사용할 경우에 해당한다.
uid=ldaptest,ou=people,dc=samjung,dc=com 암호는 접속시 입력을 하면 된다.
16.1.3 참고사항 ¶
16.1.4 웹주소록 프로그램 ¶
- /usr/share/doc/labe-3.3/REAME 파일을 참고. 여기서 먼저 suffix, rootdn를 만들어주고 ldap 대몬을 다시 띄움. 아래 스키마 추가도 여기에서 언급하고 있음.
- http://sourceforge.net/projects/labe/
여기에서 다운로드 받아 설치하면 된다. 설정은 ldap을 이해하고 있으면 간단하다. rpm으로 설치하면
/var/www/html/labe/ 디렉토리에 웹프로그램설치가 되고 setup.sh 에서 적절한 답변을 해주면 된다. 참고로
이유는 모르겠는데 /etc/openldap/slapd.conf 에서 labe 프로그램이 사용하는 스키마를 수동으로 추가해준다.
이는 자동으로 되지 않는 듯하다.
include /etc/openldap/schema/extension.schema
16.1.5 웹주소록 ACL 설정으로 인증된 사용자만 읽도록 하기 ¶
access to attr=userPassword
by self write
by anonymous auth
by dn="cn=manager,dc=samjung,dc=com" write
by * compare
access to *
by self write
by dn="cn=manager,dc=samjung,dc=com" write
by users read
위에서 users 에 read 권한을 주지 않으면 다른 정보도 볼수가 없다.
16.2 아파치 인증에 LDAP 사용하기 ¶
- 연동방법만 간략히 설명
- apache 에서 ldap 인증 아파치 공식한글문서중 관련내용
- htaccess 에서 아래와 같이 사용하면 됨. 상세한 설정을 위해서는 좀더 매뉴얼을 보고 연구가 필요함. 여기서는 매뉴얼에 나온 내용을 가지고 구현만 해본것임. dc=samjung,dc=co 이 부분을 적절히 바꾸면 될것임.
[joon@localhost moniwiki]$ cat .htaccess
AuthType Basic
AuthName "joon wiki system"
AuthLDAPURL ldap://localhost:389/ou=people,dc=samjung,dc=com?uid?sub?(objectClass=*)
require valid-user
16.3 samba, ldap 연동 ¶
17 ldap 에서 TLS 사용한 암호화 통신 ¶
17.1 인증 메커니즘 ¶
- anonymous authentication
- simple authentication
- simple authentication over SSL/TLS
- simple authentication and Security Layer (SASL)
SSL/TLS는 두가지 방법이 있다. ssl을 통해 ldap을 사용하는 방법(ldaps, tcp port 636)보다는 StartTLS LDAP 확장기능으로 사용하는 것이 좋다. StartTLS 는 tcp 389 port(ldap포트)를 통해서 TLS 통신을 할 수 있는 기능이다. 서버의 같은 포트에서 클라이언트의 요청에 따라 암호화된 세션과 암호화되지 않은 세션을 모두 처리할 수 있다.
17.2 인증서 생성 ¶
# cd /usr/share/ssl/misc
# ./CA -newca
CA certificate filename (or enter to create)
Making CA certificate ...
Generating a 1024 bit RSA private key
............................................................++++++
.++++++
writing new private key to './demoCA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [KO]:
State or Province Name (full name) [gurogu]:
Locality Name (eg, city) [seoul]:
Organization Name (eg, company) [Samjung dataservice]:
Organizational Unit Name (eg, section) [ITservice]:
Common Name (eg, your name or your server's hostname) [cent3.tunelinux.pe.kr]:
Email Address [joon@sds.co.kr]:
slapd-req.pem 이 CSR이다. 여기서 nodes 옵션을 쓴것은 ldap서버를 내리고 올려줄때 비밀번호를 넣어주지
않도록 하기 위해서이다.
openssl req -new -nodes -keyout slapd-key.pem -out slapd-req.pem -days 365
openssl ca -out slapd-cert.pem -infiles slapd-req.pem
CA 키 말고 아래에서 slapdcert.pem 도 이 디렉토리에 두면 TLS 기능이 제대로 작동하지 않는다. 이 디렉토리에서
ca 키를 찾도록 해 놓아서 에러가 나는 듯하다. 자세한 이유까지는 모르지만 다른 디렉토리에 두면 되므로 주의만 하면 될
것이다.
# cp -p slapd-key.pem /etc/openldap/slapdkey.pem -> private key
# cp -p slapd-cert.pem /etc/openldap/slapdcert.pem -> certificate
# chown ldap:ldap /etc/openldap/slapdcert.pem
# chmod 644 /etc/openldap/slapdcert.pem
# chown ldap:ldap /etc/openldap/slapdkey.pem
# chmod 400 /etc/openldap/slapdkey.pem
# cp /usr/share/ssl/misc/demoCA/cacert.pem /etc/openldap/cacerts/cacert.pem -> CA certificate
# chown ldap:ldap /etc/openldap/cacerts/cacert.pem
# chmod 644 /etc/openldap/cacerts/cacert.pem
귀찮은 작업이라서 복사해서 쓰게 아래에 적어놓는다.
cp slapd-key.pem /etc/openldap/slapdkey.pem
cp slapd-cert.pem /etc/openldap/slapdcert.pem
chown ldap:ldap /etc/openldap/slapdcert.pem
chmod 644 /etc/openldap/slapdcert.pem
chown ldap:ldap /etc/openldap/slapdkey.pem
chmod 400 /etc/openldap/slapdkey.pem
cp /usr/share/ssl/misc/demoCA/cacert.pem /etc/openldap/cacerts/cacert.pem
chown ldap:ldap /etc/openldap/cacerts/cacert.pem
chmod 644 /etc/openldap/cacerts/cacert.pem
TLSCipherSuite HIGH:MEDIUM:+SSLv2 -> openssl ciphers
TLSCACertificateFile /etc/openldap/cacerts/cacert.pem -> CA private key
TLSCertificateFile /etc/openldap/slapdcert.pem -> certificate
TLSCertificateKeyFile /etc/openldap/slapdkey.pem -> private key
TLS_CACERTDIR /etc/openldap/cacerts
#TLS_REQCERT allow
잘못되어도 세션이 진행된다. TLS_REQCERT 에서 demand로 하면 서버인증서를 요청하되 서버인증서가 없거나 인증서가
잘못되었으면 세션을 바로 끊는다. (man ldap.conf) ldap 서버를 내렸다가 다시 올려준다.
ssl start_tls
tls_checkpeer yes
tls_cacertfile /etc/openldap/cacerts/cacert.pem
tls_checkpeer 서버 certificate 를 필요로 하고 검증을 하도록 한다. (설정파일의 주석내용 참고)
로 설정이 된다. 위와 같이 tls_cacertfile 옵션을 이용하여 직접 파일을 지정할 수도 있고 아니면
/etc/opeanldap/cacerts 파일에 해당 인증서를 넣어두면 authconfig 에서 자동으로 c_rehah
유틸리티를 이용하여 해당 디렉토리에서 인증서파일을 가리키는 심볼릭 링크를 만든다.
# ls -alF /etc/openldap/cacerts
total 16
drwxr-xr-x 2 root root 4096 Jan 4 13:15 ./
drwxr-xr-x 4 root root 4096 Jan 4 13:18 ../
-rw-r--r-- 1 root root 1346 Jan 4 13:15 cacert.pem
lrwxrwxrwx 1 root root 10 Jan 4 13:14 cc9fe289.0 -> cacert.pem
자신이 편한대로 쓰면 되겠지만 authconfig 를 이용한다면 자동으로 생성되는 tls_cacertdir 옵션을 써도 될 것이다.
18.1 주의사항 ¶
나머지는 읽기전용이라는 것이다.현재 openldap에서는 multimaster 를 지원하는 않는다. replication에도
두가지 방식이 있으며 기존에 사용하던 slurpd와 최근부터 지원한 LDAP Sync Replication 이 있다. 현재는
slurpd만 테스팅을 하였다. 슬레이브에서 LDAP서버를 내리는 테스팅결과 잠시동안 네트워크등의 문제가 있다고 하더라도
슬레이브가 정상으로 돌아오면 리플리케이션이 정상적으로 동작되었다. 그렇지만 몇분이내의 간단한 테스팅만 한 것이므로 이것만을
가지고 신뢰성을 확인하기는 힘들 것이다. 그런데 네트워크의 이상등으로 연결이 되어있지 못할때 마스터에서 새로운 값을 입력하면
이는 나중에 연결이 복구되더라도 자동으로 슬레이브에 들어가지는 않는다.
18.2 LDAP Sync Replication ¶
서버)의 설정을 변경하거나 재시작하지 않고도 replicat를 생성할 수 있어 편리하다. slurpd 방식에 비해 여러가지
장점이 있는 듯 하지만 RHEL이나 CentOS
4.4 에 기본 설치되어 있는 openldap 2.2 대에서는 몇가지 제약이 있어 실제로 쓰기는 불편한 듯 하다. 이 기능이
필요하다면 소스로 설치하여 해결할 수 있을 듯 한데 개인적으로는 이 기능이 당장 절실히 필요한 것은 아니라서 추가 테스팅은 하지
않았다. 2.2대와 2.3대에서 구현할때 약간의 차이점, 제약이 있다.
http://www.openldap.org/doc/admin22/syncrepl.html (openldap 2.2 매뉴얼)
While slapd (8) can function as the LDAP Sync provider only when it is configured with either back-bdb or back-hdb backend, the syncrepl engine, which is a consumer-side replication engine, can work with any backends.
http://www.openldap.org/doc/admin23/syncrepl.html (openldap 2.3매뉴얼)
The syncrepl engine, which is a consumer-side replication engine, can work with any backends. The LDAP Sync provider can be configured as an overlay on any backend, but works best with the back-bdb or back-hdb backend. The provider can not support refreshAndPersist mode on back-ldbm due to limits in that backend's locking architecture.
2.2 에서 마스터서버는 백엔드로 back-bdb, back-hdb 가 필요하고 슬레이브에서는 백엔드 제한이 없다.
rpm 패키지에는 back-bdb 가 동작하지 않았으며 이에 대한 지원은 빠져있는 듯하다. 2.3 에서는 이러한 제한이 없다.
그렇지만 2.3에서도 백엔드로 back-bdb 나 back-hdb를 추천하고 있다.
18.3 구현순서 ¶
- 마스터서버의 slapd 대몬 내림
- 마스터서버의 slapd.conf 설정
- 마스터서버의 데이타를 슬레이브에 복사하고 슬레이브 서버에 넣어줌 (이경우 슬레이브 서버는 내려가 있다고 가정하고 이후에 세부 설정함)
- 슬레이브서버의 slpad.conf를 설정
- 슬레이브서버의 slapd 시작
- 마스터서버의 slapd 시작
- 마스터서버의 slurpd 시작 (centOS 에서는 replica 설정이 있는 경우 시작스크립트에서 자동으로 slapd, slurpd 함께 시작함)
18.4 마스터서버 설정 ¶
replogfile /var/lib/ldap/openldap-master-replog
replica uri=ldap://cent.tunelinux.pe.kr:389
suffix="dc=samjung,dc=com"
binddn="cn=replica,dc=samjung,dc=com"
credentials=xxxx
bindmethod=simple
tls=yes
replogfile 은 마스터서버에서 slapd가 로그 변화를 기록하는 파일이다. 이 파일을 slurpd가 읽어서 슬레이브 서버로 보낸다. replica 를 이용하여 각 슬레이브 서버를 지정한다.
- uri : 슬레이브 서버 및 포트
- suffix : suffix
- binddn : 슬레이브 서버의 sldapd.conf 에서 updatedn 과 일치해야한다. 슬레이브 서버에서
이 권한을 가지고 마스터서버에서 오는 로그를 기록한다. 마스터서버의 rootdn과는 당연히 다르게 하는것이 좋을 것이다. - bindmethod는 슬레이브와 통신을 하는데 사용하며 simple, sasl 을 선택할 수 있다. 여기서는
simple을 선택하였으며 credentials 는 슬레이브 서버에 바인드하기 위한 패스워드이다. 이는 슬레이브서버에서 지정한
것을 넣으면 된다. - tls 는 마스터서버와 슬레이브서버간의 통신을 암호화한다.
- 마스터서버에서 데이타를 슬레이브서버로 옮기는 경우에 ldap서버를 내리고 slapcat 을 이용하여 LDIF
파일형태로 옮길 수 있다. 리플리카(슬레이브)에서는 slapadd 를 이용하여 데이타를 복원하면 된다. 그전에
slapd.conf 설정은 되어있어야 할 것이다.
root@master# slapcat -b "dc=samjung,dc=com" -l contents.ldif
... contents.ldif를 슬레이브로 복사한다.
root@replica# slapadd -l contents.ldif
18.5 슬레이브서버 설정 ¶
> rootdn "cn=replica,dc=samjung,dc=com"
> rootpw {SSHA}IgT24XXXXEGN9aaLhBduKPJCp
> updatedn "cn=replica,dc=samjung,dc=com"
> updateref ldap://cent3.tunelinux.pe.kr
- updatedn : 마스터서버의 설정과 일치해야한다. updatedn은 해당 데이타에 쓰기 권한이 있어야 한다.
- updateref : 클라이언트에게 마스터 디렉토리 서버를 알려주는 URL. 클라이언트가 업데이트 요청을 하는 경우 마스터서버를 알려준다.
18.6 리플리케이션시 작동방식 ¶
슬레이브에서는 updateref를 이용하여 슬레이브에 업데이트요청시 마스터서버로 업데이트 요청을 보낸다. 예를 들어 위에서
people에 속한 사용자의 경우 자신의 패스워드를 변경할 수가 있다. 이경우 slave 서버에서 자신의 패스워드를 변경할 경우
이에 대한 요청은 마스터로 가고 마스터에서 업데이트한후 다시 슬레이브서버로 동기화가 된다. 단, rootdn은 직접 작동하였다.
19.1 GUI tool ¶
- http://ldapadmin.sourceforge.net/ ldap 검색, 수정 등 할 수 있는 윈도우 공개프로그램(GPL) 이 실제 사용해보니 편리함. GUI에서 사용자 이동, 복사, 그룹에 여러 사용자 추가등 가능함
- phpLDAPadmin (php), LDAP Account Manager(LAM, php), LDAP Browser(자바)등으로 된 프로그램이 있으나 사용하기에는 불편함
- LDAP Account Manager: lam.sourceforge.net 웹으로 계정추가 및 관리 가능
- phpLDAPadmin: phpldapadmin.sourceforge.net
- LDAP Browser: www-unix.mcs.anl.gov/~gawor/ldap
19.2 로그확인 ¶
connections/operations/results + 32 search filter processing + 8
connection management
loglevel 256
LDAP은 LOG_LOCAL4 facility를 사용하므로 /etc/syslog.conf 에 아래의 설정을 한다. ldap만 별도 파일로 저장할 수도 있다. 이 경우에는 로그로테이션을 주기적으로 해주어야 한다.
# grep local4 /etc/syslog.conf
local4.* /var/log/messages
설명은 없었다. 이에 대해서는 작동방식은 비슷할 것이라 여겨지므로 레드햇 디렉토리 서버의 매뉴얼을 참고하면 될 듯 하다. 이에
대한 내용은 레드햇 디렉토리 서버 매뉴얼
중에서 Configuration, Command, and File Reference 의 Chapter 5 Access Log
and Connection Code Reference 를 참고한다. 여기서 로그에 남는 기록이 어떤 에러코드인지 설명을
참고하자.
19.3 동적인 서버설정 지원 ¶
19.4 Object Class Types ¶
주의사항으로는 LDAP 디렉토리의 각 엔트에는 하나의 Structural object class만 있어야 한다. (오렐리
LDAP admin 20페이지)
19.6 db 생성, 관리프로그램 ¶
설정이 바뀐 경우 기존 인덱스가 자동으로 변경되지 않는다. 이러한 경우 필요하다. slapcat : 오프파인에서 데이타를
LDIF 형태로 덤프뜰때 사용. 백업시 편리함.
19.7 nscd 네임서비스 캐슁 대몬 사용하기 ¶
group, hosts 가 지정되어 있다. LDAP과 연동을 하는 경우 nscd를 사용하여 좀더 빠른 결과를 얻을 수 있을
것이다.