←Back|↑Index
既存アカウントの LDAP への移行
LDAP を認証に使うことで、Linux マシンのアカウントの統合を行なうことができます。また、SAMBA と併用することで Windows まで含めた認証の統合ができるようになります。サーバ台数、クライアント人数によっては管理の手間が大幅に軽減されます。
nss_ldap パッケージのインストール
LDAP を使用して認証を行なうには nss_ldap パッケージが必要になります。RedHat Linux 8.0 の場合は nss_ldap-198-3.i386.rpm をインストールします。
# rpm -ivh nss_ldap-198-3.i386.rpm
nss_ldap パッケージをインストールすると /etc/ldap.conf というファイルがインストールされます。このファイルの base エントリを適切に設定します。
base dc=in,dc=sdri,dc=co,dc=jp
LDIF ファイルの作成
/etc/passwd, /etc/shadow ファイルの変換
アカウント情報の LDIF ファイルを作成するために MigrationTools を使用しますが、これは CRYPT で暗号化されたパスワードにしか対応していません。そのため、CRYPT で暗号化された /etc/passwd ファイルを一時的に作成します。
まず authconfig ユーティリティを使用して shadow パスワードの使用と MD5 パスワードの使用を一時中断し、/etc/passwd ファイルに CRYPT されたパスワードが記録された状態にします。下の図のように
- 「シャドウパスワードを使用」
- 「MD5 パスワードを使用」
のチェックを外せば完了です。

パスワードファイルのコピー
/etc/passwd ファイルを作業用にコピーします。通常のユーザがアクセスできないディレクトリ、たとえば /root 配下などに置いてください。
/root/passwd ファイルから一般のユーザのエントリ以外を削除します。サービスを起動させるためのアカウントなどは必要ありません。root ユーザは、万が一 LDAP サービスが起動しない場合などを想定して LDAP にはデータ投入せず /etc/passwd, /etc/shadow を使用した認証をすることにします。
/etc/passwd, /etc/shadow を元に戻す
上記作業が完了したら、再度 authconfig を使用して以下のチェックを有効にしておきます。
- 「シャドウパスワードを使用」
- 「MD5 パスワードを使用」
LDIFファイルへの変換
MigrationTools を使用して /root/passwd ファイルを LDIF ファイルに変換します。以下のようにします。
# LDAP_BASEDN='dc=in,dc=sdri,dc=co,dc=jp' \
> /usr/share/openldap/migration/migrate_passwd.pl passwd > passwd.ldif
この処理が終ったら、セキュリティ上の問題にならないように /root/passwd は削除してください。
上位 dn の登録
前述の作業で出来上がった LDIF ファイルを参照すると、最初のエントリは以下のようになっていると思います。
dn: uid=tomohiko,ou=People,dc=in,dc=sdri,dc=co,dc=jp
ou=People というオブジェクトはまだ LDAP サーバに登録していませんので、
まずそれを登録します。以下のような LDIF ファイルを people.ldif という名称で作成してください。
dn: ou=People,dc=in,dc=sdri,dc=co,dc=jp
ou: People
objectClass: top
objectClass: organizationalUnit
この LDIF ファイルを登録します。
# ldapadd -x -D "cn=Manager,dc=in,dc=sdri,dc=co,dc=jp" \
> -W -f people.ldif
Enter LDAP Password:
adding new entry "ou=People,dc=in,dc=sdri,dc=co,dc=jp"
アカウント情報の登録
/root/passwd.ldif を LDAP サーバに登録します。
# ldapadd -x -D "cn=Manager,dc=in,dc=sdri,dc=co,dc=jp" \
> -W -f passwd.ldif
Enter LDAP Password:
adding new entry "uid=tomohiko,ou=People,dc=in,dc=sdri,dc=co,dc=jp"
adding new entry "uid=tsekine,ou=People,dc=in,dc=sdri,dc=co,dc=jp"
グループファイルの登録
/etc/passwd を LDIF 形式に変換し LDAP サーバに登録したのと同様に /etc/group ファイルも LDIF 形式に変換し LDAP サーバに登録します。
まず、ou=Group というオブジェクトを登録します。以下のような LDIF ファイルを用意します。
dn: ou=Group,dc=in,dc=sdri,dc=co,dc=jp
ou: Group
objectClass: top
objectClass: organizationalUnit
このファイルを ouGroup.ldif という名前で保存し、ldapadd コマンドを使用して登録します。
# ldapadd -x -D "dn=Manager,dc=in,dc=sdri,dc=co,dc=jp" \
> -W -f ouGroup.ldif
次に /etc/group ファイルを /root/group などにコピーし、サービスのグループを削除し一般ユーザのエントリだけにします。その上で LDIF 形式に変換します。MigrationTools には migrate_group.pl というスクリプトがあるので、それを利用します。
# LDAP_BASEDN='dc=in,dc=sdri,dc=co,dc=jp' \
> /usr/share/openldap/migration/migrate_group.pl \
> /root/group > group.ldif
ldapadd コマンドで LDAP サーバに登録すれば完了です。
# ldapadd -x -D "dn=Manager,dc=in,dc=sdri,dc=co,dc=jp" \
> -W -f group.ldif
アクセス権限の設定
アカウントの登録が完了しましたが、このままの状態では、どのユーザでもパスワードの変更や参照ができてしまいます。LDAP サーバへのアクセス制御を行なう必要があります。アクセス制御についての詳細なドキュメントは OpenLDAP 管理者ガイドの 5.3 アクセス制御にありますのでご一読をお薦めします。
アクセス制御は、/etc/openldap/slapd.conf の access ディレクティブによって行なわれます。slapd.conf に以下のようなエントリを追加します。
access to attr=userPasswd
by self write
by anonymous auth
by dn="Manager,dc=in,dc=sdri,dc=co,dc=jp" write
by * none
access to *
by self write
by dn="Manager,dc=in,dc=sdri,dc=co,dc=jp" write
by * read
最初の access ディレクティブでは全てのエントリに存在する userPassword 属性はそのエントリ及び Manager エントリから更新可能で、認証には使えますが、読み取ることはできないことを示しています。次の access ディレクティブでは、userPassword 以外の全ての属性はそのエントリ及び Manager エントリから更新可能で、誰でも読み取れることを示しています。
LDAP パスワードを使用する
ここから先の作業は間違えるとログインや su できなくなる可能性がかなり高くなります。ですから、どれか一つのコンソールは root になったままで置いておき、問題が起きた場合にすぐ設定ファイルを元に戻せるようにしておきましょう。もしもログインできなくなった場合にはシステムをシングルユーザモードで再起動し、設定内容を元に戻してログイン可能な状態にしてから再度設定作業を行なってください。
authconfig で LDAP 認証を有効にする
authconfig を利用して LDAP 認証する設定にします。


nsswitch.conf の設定
最後に nsswitch.conf の内容を確認します。passwd, shadow, group の各エントリの末尾に ldap という文字が付加されていることを確認します。付加されていない場合は自分で編集します。
passwd: files nisplus ldap
shadow: files nisplus ldap
group: files nisplus ldap
nsswitch.conf は左側のエントリから優先的に認証を行ないます。上記のように設定されていると、まず通常の /etc/passwd, /etc/shadow を優先して認証を行ない、アカウントが無ければ次に nisplus の認証を、さらにアカウントが無ければ LDAP 認証を行ないます。
このように /etc/passwd, /etc/shadow を使用した認証と併用することで、複数のサーバの認証を LDAP サーバに統合した場合でもサーバ毎にアカウントの有効、無効を設定できます。たとえば「このサーバにはユーザ A はログインさせたくない」というような場合には該当するサーバの /etc/passwd のログインシェルのエントリを /bin/true などに変更しておきます。こうすることで、そのサーバではユーザ A はログインすることができなくなります。
動作確認
ログインの確認
一般ユーザ、及び root アカウントでのログインを確認します。また、一般ユーザから su して root 権限を持つことができるかについても確認しておきましょう。
パスワード変更
パスワード変更は passwd コマンドで行なうことができます。しかし、/etc/passwd, /etc/shadow にエントリがある場合、そちらが優先して変更されます。このような場合に LDAP パスワードのみを変更したい場合には ldappasswd コマンドを使用して変更が可能です。
# ldappasswd -x -D \
> 'dn=Manager,dc=in,dc=sdri,dc=co,dc=jp' \
> -W -S 'uid=tomohiko,ou=People,dc=in,dc=sdri,dc=co,dc=jp'
New password:
Re-enter new password:
Enter bind password:
LDAP アカウントがあり、/etc/passwd, /etc/shadow にエントリの無いユーザの場合、パスワード変更を行なうと以下のような出力になります。
$ passwd
Changing password for user tsekine.
Enter login(LDAP) password:
New password:
Retype new password:
LDAP password information changed for tsekine
passwd: all authentication tokens updated successfully.
LDAP アカウントの削除
LDAP アカウントを削除するには ldapdelete コマンドを使用します。アカウントを削除する場合には、以下の点を注意してシステムに不整合が起こったり無駄なアカウントが残ったりしないように十分注意してください。
- /etc/passwd, /etc/shadow のエントリを削除するか
- LDAP の Group を削除するか(このグループに属した他のユーザが存在しないかどうか注意)
- ホームディレクトリを削除するか
ユーザ tomohiko 及び グループ tomohiko を削除するには以下のようにします。
# ldapdelete -x -D 'cn=Manager,dc=in,dc=sdri,dc=co,dc=jp' \
> -W 'uid=tomohiko,ou=People,dc=in,dc=sdri,dc=co,dc=jp'
# ldapdelete -x -D 'cn=Manager,dc=in,dc=sdri,dc=co,dc=jp' \
> -W 'cn=tomohiko,ou=Group,dc=in,dc=sdri,dc=co,dc=jp'
←Back|↑Index
|