* [[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