LDAPサーバを利用した社内サーバ管理(第2回)
2008年09月01日(月)09:22|天方
LinuxユーザアカウントをLDAPで統合管理する。
前回(LDAPサーバを利用した社内サーバ管理(第1回))は、Webシステムの開発サーバで統合認証を行うためにざっとOpenLDAPサーバを導入する手順を見てきました。 今回はLDAPをLinuxのユーザアカウント認証に使う設定を紹介したいと思います。
今回もGentoo Linuxで説明していきたいと思います。 他のLinux系OSでも基本は変わりません。
nss_ldapとpam_ldapのインストール
まず、LinuxアカウントをLDAPで管理するためのライブラリを導入します。
dev1 ~ # emerge -uvD openldap
dev1 ~ # emerge -uvD nss_ldap
dev1 ~ # emerge -uvD pam_ldap
nss_ldapは、Linuxのファイルシステムなどに利用されるユーザ、グループをLDAPの情報から取得できるようにするパッケージです。 pam_ldapは、Linuxアカウントへのログイン認証など扱うPAM認証でLDAPを利用できるようにするパッケージです。
ldap.confの設定
まず、ldap.confの設定を行います。 ldap.confでは、どのLDAPサーバの情報で認証を行うのか、 どのような条件で認証を行うのか、認証情報をどの属性から取得するのかなどを定義することができます。
dev1 ~ # cat /etc/ldap.conf
host example.com # LDAPサーバのホスト名 or IP
base dc=example,dc=com # LDAPのベースDN
ldap_version 3
port 389
pam_filter objectclass=posixAccount # 認証に用いるLDAPのノードのクラスはposixAccountに制限する
pam_login_attribute uid # ログイン時のユーザ名はuid属性とする。
pam_member_attribute memberUid # グループのmemberUid属性(グループに複数持つことができる)
# に設定された名前をグループに所属するユーザとする。
pam_password exop
nss_base_passwd ou=Users,dc=flatz,dc=jp?sub # ユーザ(passwd)のDN
nss_base_shadow ou=Users,dc=flatz,dc=jp?sub # ユーザ(shadow)のDN
nss_base_group ou=Groups,dc=flatz,dc=jp?one # グループのDN
ssl no
nss_reconnect_tries 4
nss_reconnect_sleeptime 1
nss_reconnect_maxsleeptime 16
nss_reconnect_maxconntries 2
pam_filterには論理演算などを組み合わせた複雑な条件を書くことも可能ですが今回は簡単な条件としました。
pamの設定
次に/etc/pam.d/system-authを書き変えます。
system-authを書き変えると、system-authを利用している全てのPAM認証を扱うアプリケーションに影響があるので注意が必要です。
ここでは、通常のLinuxアカウントを追加するような感覚でLDAPを使うことを前提としているため、system-authを直接書きかえます。
dev1 ~ # cat /etc/pam.d/system-auth
auth required pam_env.so
auth sufficient pam_unix.so try_first_pass likeauth nullok
auth sufficient pam_ldap.so use_first_pass #LDAP用の記述
auth required pam_deny.so
account required pam_unix.so
account [default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore authinfo_unavail=ignore] pam_ldap.so #LDAP用の記述
password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 try_first_pass retry=3
password sufficient pam_unix.so try_first_pass use_authtok nullok md5 shadow
password sufficient pam_ldap.so use_authok #LDAP用のの記述
password required pam_deny.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
session required pam_limits.so
session required pam_env.so
session required pam_unix.so
session optional pam_ldap.so #LDAP用のの記述
基本的にはpam_unixモジュールでの従来の認証を行えるようにし、pam_ldapモジュールで、LDAPの情報でも認証が行えるように設定します。
ちょっと難しいのですが、
[default=bad success=ok user_unknown=ignore service_err=ignore system_err=ignore authinfo_unavail=ignore]
という記述のは、LDAPサーバが落ちている場合でもpam_unixによる認証は成功するために必要な設定です。
この設定がないと、LDAPサーバが落ちた場合に、サーバにログインすることができなくなります(泣
あと、
session required pam_mkhomedir.so skel=/etc/skel/ umask=0022
はオプションなのですが、ユーザ情報があって、/homeにディレクトリが作成されていない場合に 自動的にディレクトリを作成してくれるようになる設定です。あると新たなユーザを追加した場合に便利です。skelはフォルダのひな形のパス、umaskは作成するファイルの権限のマスクを定義しています。
nss_ldapの設定
次にnsswitchのcomaptという記述の隣にldapという単語を追加します。これにより、ファイルシステムなどでLDAPの情報を扱えるようになります。ここでcomaptは通常の/etc/passwd、/etc/groupなどを利用した認証方法です。この場合、comapt→ldapの順に情報が利用されます。
dev1 ~ # cat /etc/nsswitch.conf
passwd: compat ldap
shadow: compat ldap
group: compat ldap
....(省略)
あとは、これらの設定をそれぞれの開発サーバに設定していきます。
今回の設定では全てのサーバにLDAPに設定したアカウントでログインできますが、設定方法によってはサーバごとにアクセス権限を設定することも可能です。
次回
次回は、LDAPサーバを利用した社内サーバを管理する場合のちょっとしたノウハウを公開したいと思います。