OpenLDAP

Lightweight Directory Accesss Protocolです。そろそろアカウントを一括管理してシングルサインオンの管理をしていきたいなーと思いつついれてみることにしました。

語彙

DIT (Directory Information Tree) 階層ツリー
DN (Distinguished Name) 識別名
RDN (Relative Distinguished Name) 相対識別名
DSE (Directory Service Entry) ルートエントリ
LDIF (LDAP Data Interchange Format) データの入出力のテキスト形式

インストール CentOS5

まず、Berkeley DB 4.3,openssl,cyrus-saslが入っているかどうかを確認しておきましょう。 http://www.openldap.org/software/download/より、2.3.38をダウンロードしました。

wget ftp://ftp.dti.ad.jp/pub/net/OpenLDAP/openldap-release/openldap-2.3.38.tgz
tar xzvf openldap-2.3.38.tgz
cd 
./configure
make depend
make
make test #時間がかかります。
make install 

起動用のユーザとグループを作ります。

groupadd ldap
useradd -g ldap -d /dev/null -s /bin/false ldap

では/usr/local/etc/openldap/slapd.confを開いて下記を追加、修正します。

include   /usr/local/etc/openldap/schema/cosine.schema
include   /usr/local/etc/openldap/schema/inetorgperson.schema

インストール

OpenLDAPをインストールする前に準備をします。http://www.iodbc.org/からiODBCをインストールしました。これをいれておかないとOpneLDAPをインストールするときの --enable-sqlでエラーになります。

wget http://www.iodbc.org/downloads/iODBC/libiodbc-3.52.3.tar.gz
tar xzvf libiodbc-3.52.3.tar.gz
cd libiodbc-3.52.3
./configure --with-iodbc-inidir=/usr/local/etc
make
make install

http://www.amy.hi-ho.ne.jp/jbaba/postgre9.htm
次にバックエンドで使うBerkeleyDBをインストールしました。もしくはftp://ftp.gnu.org/pub/gnu/gdbmよりgdbmをインストールします。

wget ftp://ftp.gnu.org/pub/gnu/gdbm/gdbm-1.8.3.tar.gz
tar xzvf gdbm-1.8.3.tar.gz
cd gdbm-1.8.3

READMEのとおりに

 ./configure
make
make install
make install-compat

またOpenSSLがインストールされているか確認しておきます。

ではhttp://www.openldap.org/http://www.openldap.org/software/download/からダウンロードしました。2.3.17です。

wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-stable/openldap-stable-20060112.tgz
tar xzvf openldap-stable-20060112.tgz
groupadd ldap
useradd -g ldap -d /dev/null -s /bin/false ldap
./configure --prefix=/usr/local --enable-wrappers --enable-rlookups --enable-ldap --enable-sql
make depend
make
make test

んーエラーがでます。BerkeleyDBのバージョンは4.2みたいなんですが、4.3をインストールしているからでしょうか。ちょっとOpenLDAPのバージョンを落として試してみます。

wget ftp://ftp.openldap.org/pub/OpenLDAP/openldap-release/openldap-2.2.30.tgz
tar xzvf openldap-2.2.30.tgz
cd openldap-2.2.30
./configure --enable-rlookups --enable-ldap --enable-perl --enable-ldbm=yes -enable-ldbm-api=auto --enable-sql --prefix=/usr/local --enable-wrappers
make depend
make 
make test

おーいけた。なんでだ?んーとりあえず先に進もう。だめな場合は、./configureの頭に

env CPPFLAGS="-I/usr/local/BerkeleyDB.4.3/include" LDFLAGS="-L/usr/local/BerkeleyDB.4.3/lib"

をつけてみましょう。

make install

次に/usr/local/etc/openldap/slapd.confを確認して、権限を変更しておきます。openSUSEでYaSTからインストールすると/etc/openldap/slapd.confにいました。

chown ldap:ldap /usr/local/etc/openldap/slapd.conf
chmod 777 /usr/local/var/run/
chown -R ldap:ldap /usr/local/var/openldap-data/
chown -R ldap:ldap /usr/local/var/openldap-slurp

データベースをコピーしておきます。

cd /usr/local/var/openldap-data
cp DB_CONFIG.example /usr/local/var/openldap-data/DB_CONFIG
chown -R ldap:ldap /usr/local/var/openldap-data

ログも設定しておきましょう。/etc/syslog.confに(fedoraとかであればrsyslog.conf)

local4.* /var/log/ldap.log

空ログつくって

touch /var/log/ldap.log; chown ldap:ldap /var/log/ldap.log

slapd.confに

loglevel 288

を追加。このログレベルは、http://www.linux.or.jp/JF/JFdocs/LDAP-HOWTO-3.htmlLDAP/OpenLDAP を参照します。syslog再起動して

service syslog restart

では実行してみましょう。

/usr/local/libexec/slapd

openSUSEでYaSTからインストールすると/usr/lib/openldapにいました。起動されているか確認してみます。

 /usr/local/bin/ldapsearch -x -b '' -s base +

ここでCan't contact LDAP serverと出る場合は、  /usr/local/libexec/slapd -d 127 でメッセージをチェックします。私の場合は、権限の設定をミスって落ちてました。では停止しておきます。openSUSEでYaSTからインストールすると/usr/binにいます。

 kill -INT `cat /usr/local/var/run/slapd.pid`

下記は起動用のスクリプトです。

#!/bin/sh
#
# Startup script for the OpenLDAP
#
# chkconfig: 345 90 15
# description:OpenLDAP

# Source function library.
. /etc/rc.d/init.d/functions

PROFILEDIR=/usr/local/var/run
case "$1" in
start)
    if [ -f $PROFILEDIR/slapd.pid ] ; then
          echo "Running slapd"
    else
       /usr/local/libexec/slapd -u ldap -g ldap
       echo "Stating slapd"
   fi
;;
stop)
   if [ -f $PROFILEDIR/slapd.pid ] ; then
         kill `cat $PROFILEDIR/slapd.pid`
         rm -f $PROFILEDIR/slapd.pid
         echo "Stopping slapd"
   else
       echo "Not Running slapd"
   fi
;;
restart)
  if [ -f $PROFILEDIR/slapd.pid ] ; then
         kill `cat $PROFILEDIR/slapd.pid`
         echo "Stopping slapd"
         /usr/local/libexec/slapd -u ldap -g ldap
         echo "Stating slapd"
  else
          /usr/local/libexec/slapd -u ldap -g ldap
         echo "Stating slapd"
 fi
;;
*)
    echo "Usage: `basename $0` {start|stop|restart}" 1>&2
    exit 1
    ;;
esac
exit 0

TIPS

複数のデータベースを使う。

slapd.confの

database	ldbm
suffix		"dc=my-domain,dc=com"
   .
     .
directory       /usr/local/var/openldap-data

の下に

database	ldbm
suffix		"dc=my-domain2,dc=com"
   .
     .
directory       /usr/local/var/openldap-data2

追加します。/usr/local/var/openldap-data2の権限は変更しておきましょう。

http://cvs.cacanet.org/fsc/ldap/0601/examples/two-db.html

データ

登録

まずtestent.ldifという名前でデータをつくります。このときo=hoge,c=jpは、slapd.confのsuffixを参照してください。またスキーマとしてslapd.confに

include         /usr/local/etc/openldap/schema/cosine.schema
include         /usr/local/etc/openldap/schema/inetorgperson.schema

を追加しています。

dn: o=hoge,c=jp
objectclass: top
objectclass: organization
o: hoge

保存後、変換します。最後にリターンで終わるとエラーになります。

iconv -f SHIFT-JIS -t UTF-8 testent.ldif > testent2.ldif

では追加します。

slapadd -b 'o=hoge,c=jp' < testdn.ldif

では確認します。

slapcat -b 'o=hoge,c=jp'

ouの追加

dn: ou=ho,o=hoge,c=jp
objectClass: organizationalUnit
ou: ho

メンバの追加

dn: emloyeeNumber=012345,o=hoge,c=jp
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
cn: Hoge Hogeo
cn;lang-ja: 穂下 穂下雄
sn: Hoge
sn;lang-ja:穂下
givenName: Hoge
givenName;lang-ja: 穂下雄
mail:hoge@hoge.jp

これをUTF-8に変換します。

iconv -f SHIFT-JIS -t UTF-8 test.ldif >test2.ldif

http://d.hatena.ne.jp/satob/200407

検索

ldapsearch -x -LLL -D 'cn=Manager,dc=my-domain,dc=com' -W -b 'ou=People,dc=my-domain,dc=com' '(objectClass=*)'
-x 簡易認証指定
-D DN指定
-L 検索結果をLDIFv1で
-LL 検索結果をコメントなしフォーマットで
-LLL 検索結果をコメントなし、LDAPバージョンなしで

追加

ldapadd -x -D 'cn=Manager,dc=my-domain,dc=com' -W -f man.ldif

man.ldifは

dn: cn=Taro,ou=People,dc=my-domain,dc=com
objectClass: Person
cn: Taro
sn: Hoge

dn: cn=Jiro,ou=People,dc=my-domain,dc=com
objectClass: Person
cn: Jiro
sn: Hoge2

修正は

ldapmodify -x -D 'cn=Manager,dc=my-domain,dc=com' -W -f man.ldif

管理者

slapd.confのディレクティブrootdnで管理者のDNを設定します。またrootpwでパスワードの設定をします。またこのパスワードはslappasswdでハッシュ化できます。

slappasswd -s パスワード

クライアント

LDAP Browser/Editor
JAVAでできているLDAPクライアントです。Windowsの場合、lbe.batで実行です。JDK1.5でも動いてます。コネクトでサーバ等を設定する際にanonymous bindにチェックをつけるとエディットができませんので、これを外して、

User DN cn=Manager,o=hoge,c=jp
Password slapd.confのrootpwで指定しているパスワード

で接続します。

アカウント統合

ネームサービススイッチNSSやPAMから利用できるようにします。 http://www.padl.com/Contents/OpenSourceSoftware.htmlから

wget http://www.padl.com/download/nss_ldap.tgz
wget http://www.padl.com/download/pam_ldap.tgz
tar xzvf nss_ldap.tgz
cd nss_ldap-260
./configure  --with-ldap-conf-file=/usr/local/etc/openldap/ldap.conf
make
make install
cd ..
tar xzvf pam_ldap.tgz 
cd pam_ldap-184
./configure  --with-ldap-conf-file=/usr/local/etc/openldap/ldap.conf
make
make install

では/usr/local/etc/openldap/ldap.confを編集します。

BASE    dc=hoge, dc=com
URI     ldap://localhost

また/etc/nsswitch.confも編集します。

passwd:     files ldap
shadow:     files ldap
group:      files ldap

次に/etc/pam.d/system-authを編集します。

auth        required      pam_env.so
auth        sufficient    pam_unix.so nullok try_first_pass
auth        sufficient    pam_ldap.so use_first_pass
auth        requisite     pam_succeed_if.so uid >= 500 quiet
auth        required      pam_deny.so

account     required      pam_unix.so broken_shadow
account     sufficient    pam_localuser.so
account     sufficient    pam_succeed_if.so uid < 500 quiet
account     [default=bad success=ok user_unknown=ignore] pam_ldap.so
account     required      pam_permit.so

password    requisite     pam_cracklib.so try_first_pass retry=3
password    sufficient    pam_unix.so md5 shadow nullok try_first_pass use_authtok
password    sufficient    pam_ldap.so use_authtok
password    required      pam_deny.so

session     optional      pam_keyinit.so revoke
session     required      pam_limits.so
session     [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session     required      pam_unix.so
session     optional      pam_ldap.so

再起動したときに、fedoraだったんですが

システムロガーを起動中

で止まっちゃいました。/etc/init.d/rsyslogの起動が12になっていたんで、 ldapの起動を11にすると立ち上がりました。

TIPS

GUIで操作したいんだけど。

Eclipseを使っているんで、Apache Directory Studioをインストールしました。 追加もらくらく!日本語も編集できますね。 Apache LDAP StudioでLDAPはもう怖くない

MigrationTools?はどこ?

http://www.padl.com/Open Source SoftwareからMigrationTools?をダウンロードします。

do_extended: unsupported operation "1.3.6.1.4.1.1466.20037"

どうもTLSがらみでエラーがでているようだ。/etc/smbldap-tools/smbldap.confの

ldapTLS="1"

ldapTLS="0"

とするとおさまるが、なぜ出ているかは不明

TODO

http://www.atmarkit.co.jp/flinux/rensai/apache2_07/apache07a.html

リンク

http://www.linux.or.jp/JF/JFdocs/LDAP-HOWTO.html
http://www.linux.or.jp/JF/JFdocs/LDAP-HOWTO-2.html
Samba + OpenLDAP による Windows ドメインコントローラの構築
OpenLDAPの使用方法とスキーマ
そろそろLDAPにしてみないか?
OpenLDAP構築メモ
改めてOpenLDAPはじめませんか?
「シングル・サインオン」へのファーストステップ
FreeBSD 5.1 + OpenLDAP(スキーマ、LDIF)
属性の説明があります。
OpenLDAPでLDAP Syncレプリケーション!
slapd.confの説明があります。
OpenLDAPでパフォーマンスが
Description of LDAP-attribute sambaSIDList
OpenLDAPの設計
OpenLDAPのインストールと動作確認
OpenLDAPサーバを利用したユーザー認証

参考書籍

コメント

  • #comment

トップ   編集 凍結解除 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-11-14 (金) 01:46:00 (5663d)