手当たり次第に書くんだ

飽きっぽいのは本能

CentOS 6 OpenLDAP サーバー構築 – slapd と LDAP ディレクトリの基本

この記事は CentOS 6 を前提にした古いサーバー構築・保守手順の記録です。CentOS 6 は既にサポートが終了しているため、新規構築では現行の Linux ディストリビューションを利用してください。ここでは、当時の環境を保守・確認するための資料として整理しています。

CentOS 6 サーバー構築・保守ガイドへ戻る

概要

CentOS 6 における LDAP サーバー (OpenLDAP) の構築手順です。この LDAP サーバーは、Samba, FreeRadius と連携します。

インストール

OpenLDAP をインストールします。

yum -y install openldap-servers openldap-clients pam_ldap nss-pam-ldapd

Samba をインストールします。Samba スキーマの入手のみが目的であるため、このホストで Samba は稼働させません。

yum -y install samba samba-swat samba-client

Samba と同じ目的で、FreeRadius をインストールします。

yum -y install freeradius freeradius-utils freeradius-ldap freeradius-perl

管理者パスワードの生成

slappasswd を使用し、SSHA (Secure Salted Hash Algorithm) でハッシュされた管理者パスワードを生成します。生成したパスワードは、後述の設定ファイルに記述します。

slappasswd
New password:
Re-enter new password:
{SSHA}xxxxxxxx

スキーマを配置

Samba スキーマは Samba のインストール時点で適切に配置されていますが、FreeRadius スキーマは手動で配置する必要があります。

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 というファイル名の通り、当時でも旧来の設定方式であることが分かります。この手順は、CentOS 6 当時の slapd.conf ベースの構築記録として残しています。

cp -a /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap

/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 形式に変換します。

rm -rf /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf.obsolete -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d

サービス起動設定

slapd サービスを起動し、システムの起動時に有効になるように設定します。

service slapd start && chkconfig slapd
chkconfig slapd --list

初期データ登録

初期データを登録します。以下のように 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 参照設定となります。

ldapadd -x -D "cn=admin,dc=si1230,dc=com" -W -f /root/init.ldif

関連記事

CentOS 6 OpenLDAP サーバー構築 – slapd と LDAP ディレクトリの基本

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る