Eye catch image by RRZEicons (Own work) [CC-BY-SA-3.0], via Wikimedia Commons
お久しぶりです。システム開発担当の齊藤です。
LDAP、皆さん利用しているでしょうか。
何となく地味な印象のLDAPですが、ApacheのBasic認証やRedmineと連携して社内のID/パスワードを一元管理したり、運用中のサーバーのメタ情報を管理したりと、あると何かと便利なサービスです。
今回は CentOS 6.5 と OpenLDAP (マスコットが巨大あおむし…キモイ…)でLDAPサーバーを構築します。
インストール
CentOS 6.5では openldap-servers パッケージでLDAPサービスを構築することができます。例によって yum install
でインストールします。ついでにクライアントもインストールします。
# yum install openldap-servers openldap-clients # service slapd start # chkconfig splapd on
設定
CentOS 6.x では OpenLDAP の設定は /etc/openldap
にあります。
# ls -F /etc/openldap certs/ ldap.conf schema/ slapd.d/
ldap.conf
はLDAPクライアントのため設定ファイルです。紛らわしいですが、サーバーの設定は slapd.d/
ディレクトリです。slapd.d/
ディレクトリには OpenLDAP サーバーの設定が LDIF (Ldap Data Interchange Format) で格納されています。LDIFはLDAPのディレクトリ情報をテキスト形式で表現したものですから、サーバーの設定もLDAP上で管理しているということになります。古いバージョンの CentOS では slapd.confという設定ファイルを使っていましたが、現在は obsolute となっています。
さて、これから OpenLDAP の設定を行っていきますが、OpenLDAPでは先に出てきたLDIFファイルを使って追加・修正・削除を行います。最初はLDIFの書き方に面くらいますが、一度設定してしまえば LDAP Admin や Apache Directory Studio といったリッチなGUIクライアントを使用して管理できるようになるので、頑張って設定してみてはいかがでしょうか。
準備
まず、バックエンドのデータベース (Berkeley DB) の設定ファイルを設置します。 サンプルファイルがあるので、これをそのまま使用します。
# cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG
次に、LDAPサーバールートパスワードを設定します。/etc/openldap/slapd.d/cn\=config/olcDatabase\=\{0\}config.ldif
に以下の一行を追記します。{SSHA}で始まるハッシュは slappasswd
コマンドで生成します。
olcRootPW: {SSHA}9E9ebYLyJxeDMHg8p0Pe4kvl5/XfqE8i
ルートパスワードを設定したら、この時点でサーバーを再起動します。
# service slapd restart
特権アカウントの追加
次に、ディレクトリの管理を行うための特権アカウントを設定します。
bdb-init.ldif
dn: olcDatabase={2}bdb,cn=config changetype: modify replace: olcRootDN olcRootDN: cn=System Administrator,dc=unicast,dc=ne,dc=jp - replace: olcSuffix olcSuffix: dc=unicast,dc=ne,dc=jp - add: olcRootPW olcRootPW: {SSHA}5w4xUIhsXxwn6qK19p45LyviMJbMR6iQ
LDIFファイルを作成したら、次のコマンドでLDAPディレクトリに反映します。
# ldapmodify -x -D cn=config -f bdb-init.ldif -W
ルートディレクトリの作成
次に、ディレクトリのルートを作成します。今回は unicast.ne.jp というドメインをルートにします。LDAPではドメインの各要素を dc (domain component) と呼び、 dc=unicast,dc=ne,dc=jp と表現します。このルートを作成するLDIFファイルが以下です。特権アカウントとして System Administrator というエントリを作成しています。
init.ldif
dn: dc=unicast,dc=ne,dc=jp objectclass: dcObject objectclass: organization o: Unicast, Inc. dc: unicast dn: cn=System Administrator,dc=unicast,dc=ne,dc=jp objectclass: organizationalRole cn: System Administrator
bdb-init.ldif で設定したアカウントを使用して認証をして、LDIFファイルを適用します。
# ldapadd -x -W -D "cn=System Administrator,dc=unicast,dc=ne,dc=jp" -f init.ldif
以降は特権アカウントを使用してGUIクライアント等から自由にエントリを作成することができます。個人的には LDAP Admin が使いやすいと感じました。
以上、CentOS 6.5 + OpenLDAP によるLDAPサーバーの構築でした。
投稿者紹介
- サーバ運用もできるプログラマと化した、2013年入社の元新人エンジニアです。
最近のエントリ
- 勉強会2017.03.10ユニキャストの勉強会のご紹介
- Ruby2014.05.16[ruby-install] Rubyのバージョン切替えスクリプトを書いた
- CentOS2014.05.14OpenLDAPサーバーを構築する
- Ruby2013.12.17AutomaticRubyとChatWorkを連携させる