LDAPにユーザ情報を追加し、apacheへのアクセス時に参照させる
前回までの話
ou=People,dc=shonbori,dc=net ou=Group,dc=shonbori,dc=net
というディレクトリを作った。
これはdc=netをルートとし、その下位にdc=shonboriディレクトリがあり、
さらにその配下にou=Peopleとou=Groupディレクトリが並列して存在するデータ構造であった。
LDAPに追加登録するデータ
このシリーズの目的は、LDAPのデータツリーに、認証対象となるユーザとパスワードを格納し、
apacheと連携させることである。
これを実現する上でさらに必要なデータは、ユーザとパスワードの対である。
これまでの設定でちょうどPeopleというディレクトリを作ったので、
この配下にユーザIDやパスワードのエントリ(LDAP的にはattribute(属性)らしい)を追加していこう。
具体的には、次のようなldifファイルを新たに用意し、
ldapaddでdn(distinguished name)を追加してやる。
# cat user.hoge.ldif dn: uid=hoge,ou=People,dc=shonbori,dc=net # hogeというユーザIDに相当するdnを定義 uid: hoge # 相対dn的な表記 objectclass: account # *よくわからないが objectclass: posixAccount # *POSIXに準拠した #objectclass: shadowAccount # *データをここに書くことで cn: hoge # *既存のschemaを利用できるらしい uidNumber: 1001 # * gidNumber: 1001 # * userPassword: {SSHA}smFKBYZoO403X9ay+3wpcg5oLQ8uXPSb # * # hogehoge homeDirectory: /home/hoge # * loginShell: /bin/bash # *
POSIXにおけるAccountとは、最低限
cn,uid,uidNumber,gidNumber,homeDirectory
の属性を持っているものらしい。
userPassword属性は、先のエントリで述べた、
# slappasswd -h {SSHA}
このコマンドで暗号化したパスワードである。
ここまでやった後、以下を実行する。
# ldapadd -x -W -D "cn=Manager,dc=shonbori,dc=net" -f user.hoge.ldif adding new entry "uid=hoge,ou=People,dc=shonbori,dc=net"
これで、uid=hoge,ou=People,dc=shonbori,dc=netというdnについての情報が追加されたはず。
ためしにldapsearchで見てみると・・・
# ldapsearch -x -W -D "cn=Manager,dc=shonbori,dc=net" '(uid=hoge)' # extended LDIF # # LDAPv3 # base <> with scope subtree # filter: (uid=hoge) # requesting: ALL # # hoge, People, shonbori.net dn: uid=hoge,ou=People,dc=shonbori,dc=net uid: hoge objectClass: account objectClass: posixAccount cn: hoge uidNumber: 1001 gidNumber: 1001 userPassword:: e1NTSEF9c21GS0JZWm9PNDAzWDlheSszd3BjZzVvTFE4dVhQU2I= homeDirectory: /home/hoge loginShell: /bin/bash # search result search: 2 result: 0 Success # numResponses: 2 # numEntries: 1
このように無事参照できるはずである。
ちなみに余談だが、FreeBSD/Linux等の/etc/passwdもPOSIX準拠のposixAccountのリストであり、
これをそのままLDAPに乗せ換えて、サーバへのログインをLDAP認証に切り替えてしまうこともできるようだ。
apache側の設定
apacheモジュール
LoadModule ldap_module modules/mod_ldap.so LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
以上の2つがおそらく必要になるだろう。
.htaccessの記述
AuthType Basic AuthName "LDAP Auth" AuthBasicProvider ldap AuthzLDAPAuthoritative off # よくわからなかった AuthLDAPURL ldap://localhost/ou=People,dc=shonbori,dc=net?uid Require valid-user
.htpasswdファイルを使う場合はAuthBasicProvider,AuthzLDAPAuthoritative,AuthLDAPURLの代わりにAuthFileディレクティブを使っていた。
AuthLDAPURLの書式はapache.orgのマニュアルに詳しく記述されているのでぜひ参照されたい。
ともかくこれで、この.htaccessを設置したディレクトリにhttpでアクセスした場合は、
ldapaddで追加したユーザ(valid-user)のIDとパスワードを入力して認証されなければコンテンツを参照できなくなった。
あとは、LDAPの初期化やユーザの追加を自動化するスクリプトを書いたりすれば、
LDAPサーバのアドミニストレータを名乗れるのではなかろうか。
・・・・だめ?