OpenLDAP構築@Ubuntu10.10

インストール

$ sudo apt-get install slapd ldap-utils

設定

OpenLDAP2.3からはslapd.confとかで管理しないようになったらしく
設定ファイルもデータベース化しちゃう方針になったみたい(Configuration Backendなる機能
原因不明なのが色々あってずいぶん困った…
Ubuntu10.10のアップデート待ってたらいつの間にか出来るようになってた


Ubuntu10.04公式ガイドとやり方は同じ
https://help.ubuntu.com/10.04/serverguide/C/openldap-server.html

スキーマを組み込む

$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/cosine.ldif
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/nis.ldif
$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/schema/inetorgperson.ldif

backendを作成

$ sudo vi /etc/ldap/backend.example.com.ldif

# Load dynamic backend modules
dn: cn=module,cn=config
objectClass: olcModuleList
cn: module
olcModulepath: /usr/lib/ldap
olcModuleload: back_hdb

# Database settings
dn: olcDatabase=hdb,cn=config
objectClass: olcDatabaseConfig
objectClass: olcHdbConfig
olcDatabase: {1}hdb
olcSuffix: dc=example,dc=com
olcDbDirectory: /var/lib/ldap
olcRootDN: cn=admin,dc=example,dc=com
olcRootPW: secret
olcDbConfig: set_cachesize 0 2097152 0
olcDbConfig: set_lk_max_objects 1500
olcDbConfig: set_lk_max_locks 1500
olcDbConfig: set_lk_max_lockers 1500
olcDbIndex: objectClass eq
olcLastMod: TRUE
olcDbCheckpoint: 512 30
olcAccess: to attrs=userPassword by dn="cn=admin,dc=example,dc=com" write by anonymous auth by self write by * none
olcAccess: to attrs=shadowLastChange by self write by * read
olcAccess: to dn.base="" by * read
olcAccess: to * by dn="cn=admin,dc=example,dc=com" write by * read

$ sudo ldapadd -Y EXTERNAL -H ldapi:/// -f /etc/ldap/backend.example.com.ldif

frontendを作成

$ sudo vi /etc/ldap/frontend.example.com.ldif

# Create top-level object in domain
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectclass: organization
o: Example Organization
dc: Example
description: LDAP Example

# Admin user.
dn: cn=admin,dc=example,dc=com
objectClass: simpleSecurityObject
objectClass: organizationalRole
cn: admin
description: LDAP administrator
userPassword: secret

# unit1
dn: ou=unit1,dc=example,dc=com
objectClass: organizationalUnit
ou: unit1

# unit1-1
dn: ou=unit1-1,ou=unit1,dc=example,dc=com
objectClass: organizationalUnit
ou: unit1-1

# member
dn: uid=0001,ou=unit1-1,ou=unit1,dc=example,dc=com
objectClass: inetOrgPerson
cn: Yamada Taro
sn: Taro
uid: 0001
userPassword: hoge

$ sudo ldapadd -x -D cn=admin,dc=example,dc=com -W -f /etc/ldap/frontend.example.com.ldif

確認

$ ldapsearch -xLLL -b "dc=example,dc=com"
で登録したのが出ればOK

検索

$ sudo slapcat(サーバ側で出力させる
$ ldapsearch -x -h "uid=hoge" (ldapクライアントから条件検索

削除

$ ldapdelete -x -D "cn=admin,dc=example,dc=com" "uid=hoge,ou=unit1-1,unit1,dc=example,dc=com" (hogeさん削除 ※leafのみ可
$ ldapdelete -x -D "cn=admin,dc=example,dc=com" "dc=example,dc=com" -W -r (dc=example,dc=com以下を削除

変更

rootpwの変更

$ vi /etc/ldap/rootpw.ldif

dn: olcDatabase={0}config,cn=config
changetype: modify
replace: olcRootPW
olcRootPW: newpasswd

$ ldapmofiy -x -D cn=config -w secret -f /etc/ldap/rootpw.ldif

rootDNの変更

$ vi /etc/ldap/backend.modify.ldif

dn: olcDatabase={1}hdb,cn=config
replace: olcSuffix
olcSuffix: o=hoge,c=JP
-
replace: olcRootDN
olcRootDN: cn=admin,o=hoge,c=JP
-
replace: olcAccess
olcAccess: {0}to attrs=userPassword by dn="cn=admin,o=hoge,c=JP" write by anonymous auth by self write by * none
olcAccess: {3}to * by dn="cn=admin,o=hoge,c=JP" write by * read

$ sudo ldapmodify -Y EXTERNAL -H ldapi:/// -f /etc/ldap/backend.modify.ldif



以下は問題が起きまくってたときのメモ(たぶん不要)

すでに/etc/ldap/slapd.d
があったけどrootpwがsecretじゃないようで自分で作り直した

$ sudo mv /etc/ldap/slapd.d /etc/ldap/slapd.d.orig
$ sudo -u openldap mkdir /etc/ldap/slapd.d
$ sudo vi /etc/ldap/slapd.conf

database config
rootdn  "cn=config"
rootpw  secret

$ sudo -u openldap slaptest -f /etc/ldap/slapd.conf -F /etc/ldap/slapd.d
$ sudo /etc/init.d/slapd restart

The pidfile for slapd is neither specified in "/etc/ldap/slapd.d/" nor
in /etc/default/slapd. Consequently, slapd will not be started.

とか言われるので
$ sudo vi /etc/default/slapd

SLAPD_PIDFILE="/var/run/slapd/slapd.pid"

$ sudo /etc/init.d/slapd restart
これで無事起動

$ ldapsearch -x -D cn=config -b cn=config -w secret
でずらずら出ればひとまず完了