OpenLDAPを利用したLDAPサーバの構築
簡易なデータベースを利用したLDAPサービスは様々なソフトウェアから利用可能になり、OSからの参照なども容易に設定できることから認証システムの一部としても頻繁に利用されるようになった。
以下では基本的なシステム設定に関して記載しています。他アプリケーションとの連携、OSとの連携手順については別途ページを追加していきます。
スキーマ
OpenLDAPに格納する情報を表現するデータ定義をスキーマと呼びます。openldap標準でインストールされている(設定されているかについてはシステムに依存)スキーマは次のようなものがあります。
ファイル名 |
内容 |
主な用途 |
collective.schema |
Collective attributes (experimental) |
ユーザ追加情報格納 |
corba.schema |
Corba Object |
|
core.schema |
OpenLDAP "core" |
サーバ設定 |
cosine.schema |
COSINE Pilot |
LDAPv3 derived from X.500 |
duaconf.schema |
Client Configuration (work in progress) |
DUA |
dyngroup.schema |
Dynamic Group (experimental) |
|
inetorgperson.schema |
InetOrgPerson |
ユーザ認証 |
java.schema |
Java Object |
|
misc.schema |
Miscellaneous Schema (experimental) |
|
nadf.schema |
North American Directory Forum (obsolete) |
|
nis.schema |
Network Information Service (experimental) |
ユーザ認証 |
openldap.schema |
OpenLDAP Project (FYI) |
|
ppolicy.schema |
Password Policy Schema (work in progress) |
|
基本的なLDAPの利用目的であれば、core.schema、corba.schema、cosine.schema、inetorgperson.schema、nis.schema、misc.schema、openldap.schemaあたりをIncludeしておけば問題ないでしょう。
アクセス制御
LDAPをユーザ認証に利用する場合、システムのユーザに他人のパスワードを閲覧させるのはセキュリティー的に問題があります。以下の制限をslapd.confに追加することで、自分自身のパスワード以外を読み取り、書き込みできなくなります。
access to attrs=userPassword
by self write
by users read
by anonymous auth
access to *
by self write
by users read
by anonymous read
ディレクトリ基本情報登録
管理対象となるディレクトリ情報、管理者パスワードなどを設定します。
暗号化されたパスワードはslappasswdコマンドで作成します。暗号化方式は好みに応じて設定してください。
[root@tsamba openldap]# /usr/sbin/slappasswd -v -h {MD5}
New password: ←パスワードを入力
Re-enter new password: ←上記と同じパスワードを入力
{MD5}FyyorNi2ImXXnMCAP2bA9g==
得られたパスワードをもとに、slapd.confファイルを編集します。
database ldbm
suffix "dc=i-sys,dc=biz"
rootdn "cn=root,dc=i-sys,dc=biz"
rootpw {MD5}FyyorNi2ImXXnMCAP2bA9g==
検索用Indexの設定(参照の高速化)
参照系で頻繁に利用される項目はIndex化しておくと処理が高速になります。データベースのIndex作成処理と同じで、むやみにIndex作成を行うとメモリ使用量が圧迫し、重複する情報にIndexを作成しても検索効率は高くならないことに留意してください。
index objectClass eq,pres
index ou,cn,mail,surname,givenname eq,pres,sub
index uidNumber,gidNumber,loginShell eq,pres
index uid,memberUid eq,pres,sub
index nisMapName,nisMapEntry eq,pres,sub
TLS通信の確保
サーバ証明書、サーバキー、証明書の設定をslapd.confに導入します。
TLSCertificateFile /etc/openldap/cacerts/ldap.cert
TLSCertificateKeyFile /etc/openldap/cacerts/ldap.key
TLSCACertificateFile /etc/CA/cacert.pem
サービスの起動
設定は以上で完了です。各システムのコマンドを利用してサービスを起動します。
FreeBSDの場合
/etc/rc.conf
slapd_enable="YES"
/usr/local/etc/rc.d/slapd start
RHEL系の場合
/sbin/chkconfig ldap on
/sbin/service ldap start
接続確認
標準接続(非暗号化通信)
[root@tsamba tls]# ldapsearch -v -x -H 'ldaps://tsamba' -b "dc=i-sys,dc=biz"
ldap_initialize( ldaps://tsamba )
filter: (objectclass=*)
requesting: All userApplication attributes
# extended LDIF
#
# LDAPv3
# base with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1
SSL接続(暗号化通信)
自己認証局を利用している場合、下記のようなエラーが発生することがあります。
[root@tsamba tls]# ldapsearch -v -x -H 'ldaps://tsamba' -b "dc=i-sys,dc=biz"
ldap_initialize( ldaps://tsamba )
ldap_bind: Can't contact LDAP server (-1)
additional info: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
利用している証明書が信用できると確信できる場合には/etc/openldap/ldap.confに下記一行を追記することで対応可能です。
TLS_REQCERT never
問い合わせに成功すると正常処理結果が返されます。
[root@tsamba tls]# ldapsearch -v -x -H 'ldaps://tsamba' -b "dc=i-sys,dc=biz"
ldap_initialize( ldaps://tsamba )
filter: (objectclass=*)
requesting: All userApplication attributes
# extended LDIF
#
# LDAPv3
# base <dc=i-sys,dc=biz> with scope subtree
# filter: (objectclass=*)
# requesting: ALL
#
# search result
search: 2
result: 32 No such object
# numResponses: 1