dpkg-reconfigure slapd
を使えば簡単に LDAP データベースをより詳細に再設定することが可能です。
falcot.com
」と入力します。
dpkg-reconfigure slapd
を実行する場合など、空っぽのデータベースから設定を再開したい場合、「はい」を選びます。
$
ldapsearch -x -b dc=falcot,dc=com
# extended LDIF # # LDAPv3 # base <dc=falcot,dc=com> with scope subtree # filter: (objectclass=*) # requesting: ALL # # falcot.com dn: dc=falcot,dc=com objectClass: top objectClass: dcObject objectClass: organization o: Falcot Corp dc: falcot # admin, falcot.com dn: cn=admin,dc=falcot,dc=com objectClass: simpleSecurityObject objectClass: organizationalRole cn: admin description: LDAP administrator # search result search: 2 result: 0 Success # numResponses: 3 # numEntries: 2
/etc/passwd
、/etc/group
、/etc/services
、/etc/hosts
など) からのデータを展開するための一連のスクリプトが含まれます。スクリプトを使ってデータを変換し、LDAP データベースに投入します。
/etc/migrationtools/migrate_common.ph
を編集してください。つまり、IGNORE_UID_BELOW
と IGNORE_GID_BELOW
オプションを編集して (コメント解除するだけで十分です)、DEFAULT_MAIL_DOMAIN
と DEFAULT_BASE
を更新する必要があります。
migrate_all_online.sh
コマンドを使って行います。
#
cd /usr/share/migrationtools
#
LDAPADD="/usr/bin/ldapadd -c" ETC_ALIASES=/dev/null ./migrate_all_online.sh
migrate_all_online.sh
から LDAP データベースに移行するデータの種類に関する数個の質問を尋ねられます。表 11.1 には Falcot の使用例で使った回答がまとめられています。
表 11.1 migrate_all_online.sh
スクリプトからの質問に対する回答
質問 | 回答 |
---|---|
X.500 命名コンテキスト | dc=falcot,dc=com |
LDAP サーバのホスト名 | localhost |
管理者の識別名 | cn=admin,dc=falcot,dc=com |
認証情報の紐付け | LDAP データベース管理用パスワード |
DUAConfigProfile を作成 | no |
ETC_ALIASES=/dev/null
を指定することで意図的に /etc/aliases
ファイルの移行を行いませんでした。なぜなら、Debian の提供する標準的なスキーマには、このスクリプトが電子メールアドレスを表現するために使う構造が含まれないからです。このデータをディレクトリに統合したい場合、標準的なスキーマに /etc/ldap/schema/misc.schema
ファイルを追加するべきです。
ldapadd
コマンドの -c
オプションの利用について触れておきます。このオプションはエラーが起きた場合に処理を停止しないように要求するものです。このオプションを使うことが必要です。なぜなら、/etc/services
を変換する際に、無視しても問題ない数個のエラーが起きることが多いからです。
表 11.2 libnss-ldap パッケージの設定
質問 | 回答 |
---|---|
LDAP サーバの Uniform Resource Identifier | ldap://ldap.falcot.com |
検索ベースの識別名 | dc=falcot,dc=com |
使用する LDAP バージョン | 3 |
LDAP データベースはログインを必要としますか? | no |
root への特別な LDAP 権限 | はい |
オーナのみ設定ファイルの読み書きができるようにしますか | no |
LDAP 管理用アカウント | cn=admin,dc=falcot,dc=com |
LDAP 管理用パスワード | LDAP データベース管理用パスワード |
/etc/nsswitch.conf
ファイルを変更し、最近インストールした ldap
モジュールを使うように NSS を設定する必要があります。
例 11.26 /etc/nsswitch.conf
ファイル
# /etc/nsswitch.conf # # 以下は GNU Name Service Switch 機能の設定例です。 # `glibc-doc' と `info' パッケージをインストール済みならば、 # `info libc "Name Service Switch"' で詳細情報を参照できます。 passwd: ldap compat group: ldap compat shadow: ldap compat hosts: files dns ldap networks: ldap files protocols: ldap db files services: ldap db files ethers: ldap db files rpc: ldap db files netgroup: ldap files
ldap
モジュールは他のモジュールよりも前に書き込みます。こうすることで、問い合わせの際に ldap
モジュールが優先して使われます。注目すべき除外例が hosts
サービスです。なぜなら、LDAP サーバに接続するには (ldap.falcot.com
の名前解決を行うためには) 先に DNS を調べる必要があるからです。hosts
サービスで最初 ldap
モジュールを使うようにすると、LDAP サーバにホスト名を問い合わせることになります。しかし、名前解決を担当している LDAP サーバに接続するには LDAP サーバの名前解決が必要なので、無限ループすることになります。
files
モジュールの使うローカルファイルからの応答を無視する場合)、以下の構文を使ってサービスを設定します。
service: ldap [NOTFOUND=return] files
.
/etc/environment
と /etc/default/locale
」を参照してください) を説明します。ここで説明した PAM 設定を使うことで、アプリケーションは LDAP データベースに向けて認証を要求することが可能になります。
表 11.3 libpam-ldap の設定
質問 | 回答 |
---|---|
LDAP 管理アカウントがローカルの root のように振る舞うことを許しますか? | はい。こうすることで、通常の passwd コマンドから LDAP データベースに保存されているパスワードを変更することが可能になります。 |
LDAP データベースはログインを必要としますか? | no |
LDAP 管理用アカウント | cn=admin,dc=falcot,dc=com |
LDAP 管理用パスワード | LDAP 管理用パスワード |
パスワードに使うローカル暗号化アルゴリズム | crypt |
/etc/pam.d/common-auth
、/etc/pam.d/common-password
、/etc/pam.d/common-account
ファイルで定義されたデフォルトの PAM 設定が適用されます。このメカニズムは専用の pam-auth-update
ツール (libpam-runtime パッケージから提供される) を使います。pam-auth-update
ツールは PAM モジュールを有効化または無効化したい管理者によって実行される場合もあります。
./build-key-server ldap.falcot.com
を実行すると、数個の一般的な (場所、組織名などに関する) 質問を尋ねられます。「Common Name」に対する回答は必ず LDAP サーバの完全修飾ホスト名にしてください。今回の場合 ldap.falcot.com
にしてください。
./build-key-server ldap.falcot.com
は証明書を作成し、keys/ldap.falcot.com.crt
ファイルに保存します。さらに対応する秘密鍵は keys/ldap.falcot.com.key
に保存されます。
openldap
ユーザ権限で実行されている LDAP サーバが秘密鍵を読み込み可能であることを保証しなければいけません。これを行うために以下の通り実行します。
#
adduser openldap ssl-cert
ユーザ `openldap' をグループ `ssl-cert' に追加しています... ユーザ openldap をグループ ssl-cert に追加 完了。 #
mv keys/ldap.falcot.com.key /etc/ssl/private/ldap.falcot.com.key
#
chown root:ssl-cert /etc/ssl/private/ldap.falcot.com.key
#
chmod 0640 /etc/ssl/private/ldap.falcot.com.key
#
mv newcert.pem /etc/ssl/certs/ldap.falcot.com.pem
slapd
デーモンにこれらの鍵を暗号化に使うように伝えることも必要です。LDAP サーバの設定は動的に管理されます。つまり、設定は cn=config
オブジェクト階層に対する通常の LDAP 操作によって更新され、サーバは設定を永続的なものにするために /etc/ldap/slapd.d
をリアルタイムで更新します。このため、設定を更新するには ldapmodify
ツールを使ってください。
例 11.27 暗号化用の slapd
の設定
#
cat >ssl.ldif <<END dn: cn=config changetype: modify add: olcTLSCertificateFile olcTLSCertificateFile: /etc/ssl/certs/ldap.falcot.com.pem - add: olcTLSCertificateKeyFile olcTLSCertificateKeyFile: /etc/ssl/private/ldap.falcot.com.key - END
#
ldapmodify -Y EXTERNAL -H ldapi:/// -f ssl.ldif
SASL/EXTERNAL authentication started SASL username: gidNumber=0+uidNumber=0,cn=peercred,cn=external,cn=auth SASL SSF: 0 modifying entry "cn=config"
/etc/default/slapd
ファイル内の SLAPD_SERVICES
変数を変更することです。ここでは慎重を期して、安全対策されていない LDAP を無効化しています。
例 11.28 /etc/default/slapd
ファイル
# slapd.conf ファイルまたは slapd.d cn=config ディレクトリの # デフォルト位置を指定してください。空の場合、コンパイル時のデフォルト値 # (/etc/ldap/slapd.d およびその代替の /etc/ldap/slapd.conf) が使われます。 SLAPD_CONF= # slapd サーバを実行するシステムアカウントを指定してください。 # 空の場合、root 権限で実行します。 SLAPD_USER="openldap" # slapd サーバを実行するシステムグループを指定してください。 # 空の場合、SLAPD_USER のメイングループ権限で実行します。 SLAPD_GROUP="openldap" # slapd サーバの pid ファイルのパスを指定してください。未指定の場合、 # init.d スクリプトは $SLAPD_CONF (デフォルト値は /etc/ldap/slapd.conf # です) を評価してパスを指定しようとします。 SLAPD_PIDFILE= # 通常 slapd は TCP ポート 389 番だけにサービスを提供します。 # さらに slapd は TCP ポート 636 番 (ldaps) および unix ソケット # にもサービスを提供できます。 # 以下はその使用例です。 # SLAPD_SERVICES="ldap://127.0.0.1:389/ ldaps:/// ldapi:///" SLAPD_SERVICES="ldaps:/// ldapi:///" # SLAPD_NO_START を設定した場合、init スクリプトは # slapd を開始および再開しません (停止だけは実行されます)。 # 別の手段で slapd を実行している場合や、通常はマシンの起動時に # slapd を開始したくない場合、以下の行を有効化してください。 #SLAPD_NO_START=1 # SLAPD_SENTINEL_FILE がファイルへのパスに設定され、設定されたファイル # が存在する場合、init スクリプトは slapd を開始および再開しません # (停止だけは実行されます)。設定ファイルを編集したくない場合 # (たとえば、メンテナンス中または設定管理システムの使用中などの場合)、 # ここで指定したファイルを使って一時的に slapd の開始を無効化します。 SLAPD_SENTINEL_FILE=/etc/ldap/noslapd # slapd は (SASL を介した) Kerberos 認証の際にデフォルトでシステムの # keytab ファイル (/etc/krb5.keytab) を使います。別の keytab ファイルを # 使うには、以下の行でそのファイルを指定し、以下の行を有効化してください。 #export KRB5_KTNAME=/etc/krb5.keytab # 以下では slapd に渡す追加の引数を指定します。 SLAPD_OPTIONS=""
ldaps://
URI を使うように設定する作業が必要です。
/usr/local/share/ca-certificates
に配置して update-ca-certificates
を実行します。
#
cp keys/ca.crt /usr/local/share/ca-certificates/falcot.crt
#
update-ca-certificates
Updating certificates in /etc/ssl/certs... 1 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d.... Adding debian:falcot.pem done. done.
/etc/ldap/ldap.conf
を編集すれば変更することが可能です。こうすることで、入力する量を激減させることが可能です。