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

** 語彙
 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>Subversion]]をインストールしました。もしくは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.htmlや[[LDAP/OpenLDAP>http://www.9203.net/~takech/pukiwiki/index.php?LDAP%2FOpenLDAP]]
を参照します。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>http://www-unix.mcs.anl.gov/~gawor/ldap/index.html]]~
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はもう怖くない>http://www.atmarkit.co.jp/fjava/rensai3/eclipseplgn21/eclipseplgn21_1.html]]~
***MigrationToolsはどこ?
http://www.padl.com/の[[Open Source Software>http://www.padl.com/Contents/OpenSourceSoftware.html]]から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 ドメインコントローラの構築>http://www.miraclelinux.com/technet/library/openldap/]]~
[[OpenLDAPの使用方法とスキーマ>http://park15.wakwak.com/~unixlife/practical/openldap-1.html]]~
[[そろそろLDAPにしてみないか?>http://gihyo.jp/admin/serial/01/ldap]]~
[[OpenLDAP構築メモ>http://www.upken.jp/report/openldap/]]~
[[改めてOpenLDAPはじめませんか?>http://www.thinkit.co.jp/free/article/0706/15/2/]]~
[[「シングル・サインオン」へのファーストステップ>http://www.atmarkit.co.jp/fnetwork/rensai/dirt02/01.html]]~
[[FreeBSD 5.1 + OpenLDAP(スキーマ、LDIF)>http://www.hayagui.com/openldap02.html]]~
属性の説明があります。~
[[OpenLDAPでLDAP Syncレプリケーション!>http://www.thinkit.co.jp/cert/article/0706/15/2/2.htm]]~
slapd.confの説明があります。~
[[OpenLDAPでパフォーマンスが>http://blog.eyes-works.com/archives/000324.php]]~
[[Description of LDAP-attribute sambaSIDList>http://archives.devshed.com/forums/samba-120/description-of-ldap-attribute-sambasidlist-139689.html]]~
[[OpenLDAPの設計>http://www.atmarkit.co.jp/flinux/rensai/openldap01/openldap01a.html]]~
[[OpenLDAPのインストールと動作確認>http://www.atmarkit.co.jp/flinux/rensai/openldap02/openldap02a.html]]~
[[OpenLDAPサーバを利用したユーザー認証>http://www.atmarkit.co.jp/flinux/rensai/openldap03/openldap03a.html]]~
** 参考書籍

** コメント
-#comment

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS