Overview
CentOS 6 における LDAP サーバー (OpenLDAP) の構築手順です。この LDAP サーバーは、Samba, FreeRadius と連携します。
インストール
OpenLDAP をインストールします。
[root@centos-6 ~]# yum -y install openldap-servers openldap-clients pam_ldap nss-pam-ldapd
Samba をインストールします。Samba スキーマの入手のみが目的であるため、このホストで Samba は稼働させません。
[root@centos-6 ~]# yum -y install samba samba-swat samba-client
Samba と同じ目的で、FreeRadius をインストールします。
[root@centos-6 ~]# yum -y install freeradius freeradius-utils freeradius-ldap freeradius-perl
管理者パスワードの生成
slappasswd を使用し、SSHA (Secure Salted Hash Algorithm) でハッシュされた管理者パスワードを生成します。生成したパスワードは、後述の設定ファイルに記述します。
[root@centos-6 ~]# slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxx
スキーマを配置
Samba スキーマは Samba のインストール時点で適切に配置されていますが、FreeRadius スキーマは手動で配置する必要があります。
[root@centos-6 ~]# cp -a /usr/share/doc/freeradius-2.1.12/examples/openldap.schema /etc/openldap/schema/radius.schema
slapd.conf.obsolete
OpenLDAP 2.3 以降、設定方法がファイル形式から DB 形式に変更されました。DB 形式になることで、設定変更がオンラインで可能になるなどのメリットがありますが、現状では参考とする情報量が少なく、今回は完全な DB 形式での設定は断念します。回避策として、一時的に従来のファイル形式での設定し、それを DB 形式に変換する方法をとります。
設定ファイルのテンプレート (slapd.conf.obsolete) を配置します。obsolete (時代遅れ)というファイル名の通り、OpenLDAP としても非推奨であることは分かります。
[root@centos-6 ~]# cp -a /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap
/etc/openldap/slapd.conf.obsolete を編集します。以下は追記箇所のみを記載しています。
[root@centos-6 ~]# vim /etc/openldap/slapd.conf.obsolete
# Append
include /etc/openldap/schema/samba.schema
include /etc/openldap/schema/radius.schema
database monitor
access to *
by self write
by dn="cn=admin,dc=si1230,dc=com" write
by * read
access to attrs=userPassword
by self write
by dn="cn=admin,dc=si1230,dc=com" write
by anonymous auth
by * none
# Modification
suffix "dc=si1230,dc=com"
rootdn "cn=admin,dc=si1230,dc=com"
rootpw {SSHA}xxxxxxxx
include /etc/openldap/schema/samba.schema
samba.schema スキーマファイルをインクルードしています。これは Samba 用の LDAP スキーマを追加するためのものです。
include /etc/openldap/schema/radius.schema
radius.schema スキーマファイルをインクルードしています。これは Radius (Remote Authentication Dial-In User Service) 用の LDAP スキーマを追加するためのものです。
database monitor
モニタリングデータベースを使用することを指定しています。これにより、LDAP サーバーの状態や動作を監視することができます。
access to *
by self write
: ユーザーは自分のエントリーに対して書き込み権限を持ちます。by dn="cn=admin,dc=si1230,dc=com" write
:cn=admin,dc=si1230,dc=com
は全てのエントリーに対して書き込み権限を持ちます。by * read
: その他のユーザーは読み取り権限のみを持ちます。
access to attrs=userPassword
by self write
: ユーザーは自分の userPassword 属性に対して書き込み権限を持ちます。by dn="cn=admin,dc=si1230,dc=com" write
: 管理者は userPassword 属性に対して書き込み権限を持ちます。by anonymous auth
: userPassword 属性への認証(ログイン)操作を匿名ユーザーに許可します。by * none
: その他のユーザーには userPassword 属性へのアクセスを完全に拒否します。
suffix "dc=si1230,dc=com"
この設定で定義されているデータベースのサフィックス(データベースのルートとなる DN)を dc=si1230,dc=com
と指定しています。
rootdn "cn=admin,dc=si1230,dc=com"
管理者 (root) の DN を cn=admin,dc=si1230,dc=com
と指定しています。
rootpw {SSHA}xxxxxxxx
管理者のパスワードを SSHAでハッシュ化した値で設定しています。xxxxxxxx
は実際のハッシュ値に置き換えて下さい。
[ ACL 設定について ]
この設定により、管理者は全ての情報と userPassword
属性を書き換えることができ、一般ユーザーは自分自身のエントリーと userPassword
属性のみを書き換えることができます。また、匿名ユーザーは userPassword
属性の認証操作のみを行うことができます。
設定ファイルを DB 形式に変換
設定ファイルを DB 形式に変換します。
[root@centos-6 ~]# rm -rf /etc/openldap/slapd.d/*
[root@centos-6 ~]# slaptest -f /etc/openldap/slapd.conf.obsolete -F /etc/openldap/slapd.d
[root@centos-6 ~]# chown -R ldap:ldap /etc/openldap/slapd.d
サービス起動設定
slapd サービスを起動し、システムの起動時に有効になるように設定します。
[root@centos-6 ~]# service slapd start && chkconfig slapd
[root@centos-6 ~]# chkconfig slapd --list
初期データ登録
初期データを登録します。以下のように LDIF を作成します。
[root@centos-6 ~]# vim /root/init.ldif
dn: dc=si1230,dc=com
objectClass: dcObject
objectclass: organization
o: si1230
dc: si1230
dn: cn=admin,dc=si1230,dc=com
objectclass: organizationalRole
cn: admin
dn: ou=users,dc=si1230,dc=com
objectClass: organizationalUnit
ou: users
dn: ou=groups,dc=si1230,dc=com
objectClass: organizationalUnit
ou: groups
ldapadd で LDIF を登録します。ここまで、OpenLDAP 自体の設定は一通り完了となります。後はユーザー登録、各アプリケーションの LDAP 参照設定となります。
[root@centos-6 ~]# ldapadd -x -D "cn=admin,dc=si1230,dc=com" -W -f /root/init.ldif