OpenLDAP Serverを建てる
Mail管理をVirtual Domainで実施しようとすると、どうしてもLDAPが欲しい局面があらわれる。なので、OpenLDAPを入れてみる。
Install
というわけで、openldapをインストールする。
- user/groupを作成
- vipwして、user slapdを作成
- mysqlはnologin/nohomeにしておく
- groupにldapを作成
- pkgsrcからinstall
- mk.confに色々書くことになる。
PKG_OPTIONS.openldap-client= slp inet6 # kerberos sasl PKG_OPTIONS.openldap-server= bdb slp inet6 dso # sasl smbk5pwd PKG_OPTIONS.odbc= iodbc unixodbc
- これで、あとはpkgsrc/databases/openldap-clientとpkgsrc/databases/openldap-serverをmake updateする
- /etc/rc.conf.d/slapdを作成。/usr/pkg/share/examples/rc.d/slapdを/etc/rc.dにコピーして以下を加える
- slapd
start_precmd="set_limits" set_limits() { ulimit -s 4096 }
- /etc/rc.confに以下を追加
slapd=YES
- /usr/pkg/share/examples/rc.d/slapd を/etc/rc.dにコピーする
以前は、pkgsrc下のOpenLDAPはUID=rootで動作していた。しかし現在では、その権限のないアカウント(slapd:ldap)で動作している。 従って、各種のpermissionを正しく設定しないと、はまることになるので注意。
特にLDAP管理ツール(slapadd, slapindex等)をroot権限で動作させる場合に、注意が必要。
# /usr/sbin/chown -R slapd:ldap /var/openldap/openldap-data/* # /usr/sbin/chown :ldap /usr/pkg/etc/openldap/slapd.conf # /bin/chmod 640 /usr/pkg/etc/openldap/slapd.conf
初期設定
まず、Databaseの雛形が/usr/pkg/share/examples/openldap/DB_CONFIG
なので、これを/var/openldap/openldap-data/
にコピーする。
コピーしたら、/usr/sbin/chown -R slapd:ldap /var/openldap/openldap-data/*
を実行しておこう。
このファイルに、OpenLDAPのDB関係のパラメータを設定する事ができるので、性能問題を感じたらここに設定を入れる。
OpenLDAP関連の設定は
- Server用の設定: /usr/pkg/etc/openldap/slapd.conf
- client用の設定: /usr/pkg/etc/openldap/ldap.conf
で行う。
- slapd.conf
####################################################################### # OpenLDAP slapd Configuration File. # See slapd.conf(5) for details on configuration options. # Database Schema include /usr/pkg/etc/openldap/schema/core.schema include /usr/pkg/etc/openldap/schema/cosine.schema include /usr/pkg/etc/openldap/schema/inetorgperson.schema include /usr/pkg/etc/openldap/schema/nis.schema include /usr/pkg/etc/openldap/schema/mail.schema # System File pidfile /var/openldap/run/slapd.pid argsfile /var/openldap/run/slapd.args ####################################################################### # BDB database definitions database monitor database bdb ####################################################################### # Root DN Definition. suffix "o=example" rootdn "cn=Manager,o=example" rootpw secret directory /var/openldap/openldap-data ####################################################################### # Access Control List. access to dn.subtree="ou=vmail,o=example" attrs=userPassword by self write by anonymous auth by * none access to * by self write by * read # Indices to maintain index objectClass eq
Passwordの作り方
上記slapd.conf内のrootpwには、RootDNのパスワードを入力する必要がある。 このパスワードは、以下の方法で作成する。
$ /usr/pkg/sbin/slappasswd -h [CRYPT|MD5|SMD5|SSHA|SHA] -s secret
標準のHASH方式はSSHAなので、slappasswd -s secret
でパスワードを作成すればOK
$ slappasswd -s 12345678 {SSHA}tTTZQEwu7eair4ISCNmxrS/U2Qn8laHO $
この結果を貼り付ければok
openldap起動
ここまで問題がなければ、
# /etc/rc.d/slapd start
でslapd(OpenLDAP Server)が起動する。
なお、slapdを起動する際にlogに
bdb_monitor_db_open: monitoring disabled; configure monitor database to enable
というメッセージがでることがあるが、これは、monitor database backend付きでCompileされているのに、database monitorを利用していない場合にでるメッセージなので、今は無視していて良い。
基本ディレクトリ作成
とにかくまず、LDAPを動かすために必要な最小限のデータは登録しなければならない。 何はともあれ、基本ディレクトリと、その管理者を登録する。
基本ディレクトリ構造は以下の通り
この構造に合わせたLDIFファイルを作成する
- init.ldif
dn: o=example, c=net objectClass: organization o: example dn: cn=Manager, o=example, c=net objectClass: organizationalRole cn: Manager
その後、以下のコマンドを入力して、DataをLDAP Serverに投入する
$ ldapadd -x -D "cn=Manager, o=example" -W -f init.ldif Enter LDAP Password: adding new entry "o=example" adding new entry "cn=Manager, o=example"
これで最小限の設定は終了。あとはApplication毎の設定を投入するだけ。
いくつかのコマンドのメモ
- LDAPにデータを登録する
ldapadd -x -h localhost -D "cn=Manager,o=example" -w 12345654321 -f LDIF-file
- とにかく見てみる
ldapsearch -x -h localhost -b '' -s base +
- example/vmail/example.netからuidがtest1のデータを検索する
ldapsearch -x -h localhost -b 'dc=example.net,ou=vmail,o=example' uid=test1
- indexを更新する
slapindex -v -b o=example -f /usr/pkg/etc/openldap/slapd.conf