LDAPデータをPOSIXユーザーとして使う、つまり、LDAPのデータでLinuxがログインできるようにしてみよう。これによってNISサーバーのようにユーザー管理が一元化できるし、NFSで共有したときのユーザーIDに悩むこともなくなる。このエントリーではすでにあるOpenLDAPサーバーを使用して CentOS 5.2 をLDAPクライアントにする。まだLDAPサーバーがない場合は OpenLDAPサーバー構築 を参照してほしい。
まずはユーザー情報をLDAPサーバーに登録しよう。LDIFの書き方はいろいろあるが、シンプルにやるなら以下のような感じだ。一点注意するとしたら、posixAccountは補助スキーマなのでaccountやinetOrgPersonなどが必要になることだ。userPasswordは事前にslappasswdで作成しておこう。
# slappasswd
New password:
Re-enter new password:
{SSHA}HqRcWT1SlBrX1aCPhmM9/URequ50vbsD
dn: cn=gadget,ou=Groups,dc=rewse,dc=jp
objectClass: posixGroup
cn: gadget
gidNumber: 1000
dn: cn=svn,ou=Groups,dc=rewse,dc=jp
objectClass: posixGroup
cn: svn
gidNumber: 5000
memberUid: gadget
dn: uid=gadget,ou=People,dc=rewse,dc=jp
objectClass: account
objectClass: posixAccount
uid: gadget
cn: gadget
userPassword: {SSHA}HqRcWT1SlBrX1aCPhmM9/URequ50vbsD
uidNumber: 1000
gidNumber: 1000
gecos: Firstname Lastname
homeDirectory: /home/gadget
loginShell: /bin/bash
できたLDIFをLDAPサーバーに読み込ませればサーバー側は完了だ。
# ldapadd -cxW -D "cn=Manager,dc=rewse,dc=jp" -f /var/lib/ldap/ldif/nis.ldif Enter LDAP Password: adding new entry "cn=gadget,ou=Groups,dc=rewse,dc=jp" adding new entry "cn=svn,ou=Groups,dc=rewse,dc=jp" adding new entry "uid=gadget,ou=People,dc=rewse,dc=jp"
それではクライアント側(ログインするマシン側)の設定を行う。NSS用のLDAPモジュール、設定ツール、それと毎回LDAPサーバーにアクセスせずにローカルでキャッシュするためのネーム・サービス・キャッシング・デーモンをインストールしよう。
# yum install nss_ldap authconfig nscd
authconfigを使用してLDAPデータでログインできるように設定ファイルを書き換える。また、authconfigでは設定できないが、デフォルトではもしLDAPサーバーに接続できなかった場合に延々とリトライしてしまうで、すぐにエラーになるように変更した。
# authconfig \ --enableldap \ --enableldapauth \ --ldapserver=ldap.rewse.jp \ --ldapbasedn="dc=rewse,dc=jp" \ --update # echo "bind_policy soft" >> /etc/ldap.conf
これでLDAPサーバーの情報を参照できるようになっているはずなので、/etc/passwd にないユーザー情報が見えることを確認してみよう。
# grep gadget /etc/passwd # getent passwd gadget gadget:x:1000:1000:Firstname Lastname:/home/gadget:/bin/bash # id gadget uid=1000(gadget) gid=1000(gadget) 所属グループ=5000(svn),1000(gadget)
このままでもログイン可能だけど、たとえばlsしたときの所有者や所有グループの名前解決のたびにLDAPサーバーにアクセスしてしまうので、キャッシュしてくれるnscdを起動しておく。
# service nscd start # chkconfig nscd on
また、ホーム・ディレクトリがないときは自動で作成するように、PAMの設定に以下を追加する。
# echo "session optional pam_mkhomedir.so skel=/etc/skel umask=077" >> /etc/pam.d/system-auth


[...] ボクの環境にはLDAPサーバーがあり、OSユーザーはローカル管理せずにこのLDAPサーバーを使うようにしているので、この連携を行う。連携方法については 複眼中心: LDAPとOSユーザーを連携 を参照してほしい。 [...]