ApacheのBasic認証でLDAPを使う
さて、「ユーザ」なる概念の情報がLDAPサーバに準備できたので、早速それを使ってみよう。
立ち上げているApacheのHTTP認証(Digest)をファイルベースからLDAPベースに替える。
http://www.9203.net/~takech/pukiwiki/index.php?LDAP%2FOpenLDAP%2FApache%A4%CE%C7%A7%BE%DA
http://www.kensuke.jp/~kensuke/pukiwiki/index.php?etch%2Fpark2%2F10_apache2
上記サイトなどを参考にやってみた。
authnz_ldapなるモジュールが最初からはいっていたみたいなので、それをa2enmodで有効化して、以下を参考に設定してみた。
http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html#examples
Digest認証にすることができるかわからないが、LDAPで登録したユーザでBasic認証できた。
(このauthnz_ldapモジュールはDigest認証には対応していないらしい。SSL併用が必要ですな。)
後日以下をやりたい
LDAP Account Managerのインストールと設定
さてLDAPの概要は分かったような気がしてきた。
しかし、当初の目的「認証連携、Posix/Apache/Redmineアカウント一元管理」のためにはどうしたらよいだろう。
アカウント管理に用途を限らないLDAPは自由度が高すぎて、色々学ぶことや決め事が必要そうだ。
アカウント管理のためには、どういうツリーをつくるべきなののか?
いわゆる設計というやつである。ベストプラクティス的なものが世の中にあるはずだが・・
というわけで、おそらくそういう人をターゲットにしたであろう、
フリーのPHP実装、アカウント管理特化型WebUI LDAPクライアントにたどりついた。その名もずばりldap-account-manager。
http://lam.sourceforge.net/
インストール
早速インストールしてみた。
apt-get install ldap-account-manager
なんだか、勝手にapache2がprefork MPMになったりしてビビッたが、なんだかインストールされてくれた。
既にapache2はインストール済みで色々使っている状態だったので、へんな設定上書きされるのが心配だったが、結論だけ言えばそれは杞憂に終わった。さすがUbuntu。
ちょっとだけ整合性を取る調整をしたあと、ブラウザで、http://example.com/lam/ 的なURLを入れると、「PHPで使えるメモリが16Mしかなくて困る。php.iniをいじって64M以上にしてくれ」的なエラーメッセージが出てきた。最初「php.iniってどこにあるの?」と困ったが、調べたところintrepid (ubuntu8.10)では/etc/php5/apache2/php.ini なんてところにあることが分かった。該当部分を編集してapache再起動したところ、こんな感じのログイン画面が出てきた。
こういう画面が出たということは、インストール自体はOKということだろう。
LDAP Account Manager (LAM)の設定
「さて、早速使ってみよう。」と思った矢先、困った。「どうやってログインするんだ?」
先ほどのスクリーンショットは、インストール直後は、正確にはちょっと違っていて、実はUser Nameプロダウンのところに「admin」(slapdインストール時に作られたadminユーザ)なんていう風には出てこない。そうでていれば迷わなかったが、最初は「Manager」なんていうのが出ていて、「誰よこれ?」的理由でログインできずに少し混乱した。この部分は後で説明するが、正解は、「LAM設定をする」というプロセスが必要ということ。先ほどインストールしたslapdの初期設定とこのLAMとやらの初期設定は全然リンクしてません。ですので、そこをヒモ付けてやる作業が必要になる。
具体的には、以下のとおり
- このLAMとやらには、「マスターパスワード」という概念があって、それは初期設定では「LAM」になっている。
- 先ほどのログイン画面スクリーンショット右上のLAM configurationメニューを押すと以下がでてくる
- ここで下のメニューを押すと、以下のようなのがでてくるので、
このスクリーンショットも設定後のものなので、インストール直後は設定値がちょっと違っていた。縦長の画面だが、上から見ていこう。
- まず、Server-settingsのTreeSuffixの部分。ここには、マシンのFQDN名を入れた。これは、slapdのインストール時に初期値としてそう設定されるからである。(と思われる。)
- つぎに、Unix> Password Hash TypeをPLAINに変更した。が、これは、意味がなかったようだ。初期値であるSSHAにしておくのが良さそうだ。
- 最後に、Security settings> List of valid usersの項目だ。 最初、ここにManagerなんていうものが入っているので、最初のログイン画面で混乱させられたわけだ。ここには、自分のサーバのFQDNにあわせて、上記のような値を書いてやる。そうすると、slapdインストール時に設定したadminユーザとそのパスワードで、先ほどのLAMのログイン画面(LAMと入れたところではない)からログインできるようになる。
- ログインすると、以下のようにLDAPの中身をいじる(ユーザ管理をする)メニューがでてくる。
- あとは、UIにしたがって、ユーザなりグループなりを作ればよい。この部分は比較的分かりやすい。
LDAP Browserで、設定内容を確認してみる。
フリーのLDAP Browserというソフトがあって、それを使うとLDAPのツリーの中身をGUIで整理して見られるそうな。
取ってきてインストールしてみた。
こんな感じのWindowsアプリである。
上位版は有料だが、とりあえずLDAP学習・理解という意味ではまずはこのフリー版で十分だと思った。
先ほど立てたslapdの中身を見るには、こんな感じで、場所指定をすればよいようだ。
まずこんな風に、ホストのIPアドレスやポートを入れるのだが、そこは悩まずにいける。その次のBaseDNってところで、「なにそれ?」的になったが、ここで、cn=configとセットすると、slapdの設定情報を見ることができるという寸法らしい。たぶん、サーバ側で以下のようになっているのとこれは対応している。
root@thyme:~# ls -l /etc/ldap/slapd.d/ total 8 drwxr-x--- 3 openldap openldap 4096 Mar 7 02:21 cn=config -rw-r----- 1 openldap openldap 407 Mar 7 01:50 cn=config.ldif
Ubuntu8.10 (intrepid) にOpenLDAPをインストールして設定
OpenLDAPのインストール
環境としては、Ubuntu server 8.10 である。ここにまずはOpenLDAPとやらをインストールすることからはじめた。インストール自体は非常に簡単で、以下で一発ではいる。
apt-get install slapd
なんだか、ほっぺたが痛くなるような名前だなぁ・・(slap = 平手打ち)
途中で、adminのパスワードなるものを設定させられたが、適当に入力したところ、すんなりインストール完了。(これは後で使う)
しかし、すぐに難関にぶつかった。
Ubuntu8.10でのOpenLDAPの設定
さて、どうやって動かすのだろう。。ていうか、もう動いてるね・・
root@hoge:~# ps -fe|grep slapd openldap 6027 1 0 01:50 ? 00:00:00 /usr/sbin/slapd -g openldap -u openldap -F /etc/ldap/slapd.d/
いや、デーモンが動いてることはわかったけど、いったいこれは何?これをどう使うのだ??
まずは設定しないとな・・ということで、ググってみたのだが、いまいちよくわからない。
そこらじゅうのサイトに「/etc/ldap/slapd.conf なるファイルをいじってみよう」と書いてあるのだが、そんなファイルは見つからないのだ・・
調べてみると、こんなことが書いてあった→https://help.ubuntu.com/8.10/serverguide/C/openldap-server.html
要するに、「8.10からはLDAPサービスを止めずに設定を書き換えたり動機したりできるように、設定自体をLDAPの中に書いちゃうようになりましたよー。」的な話のようだ。
タナボタってこともあるんですね。「めんどくせーな」と思いながら、上記Ubuntu提供のチュートリアルをちょっと腰をすえて読んで、指示に従って色々動かしてみたところ、なんとなくLDAPなるものがどういう風に動くのかわかってきた。いわゆるひとつの「手を動かさないとよくわからない」「手を動かすと分かった気がしてくる」というヤツですな。
その後、あとになってから、以下のような分かりやすい記事を発見。
http://d.hatena.ne.jp/ehara_kw/20080122/1200972379
LDAPで認証統合をしてみよう!
会社で仮想マシンを5台ほど割り振ってもらって、色々することとなった。その上に、Redmineを立てたり、Subversionを立てたりもする。分散したプロジェクトで、管理するリポジトリが二つ、Redmineも二つ、それぞれ地球上の位置としては数千キロ以上離れた場所に立てる。
で、仮想マシンを一台立ち上げて、Redmineをインストールし、Redmineのアカウント作ろうとして、固まった。
えーと、何人分つくるんだ? っていうか、それはいいとして、何多重になる?? 無駄多すぎ・・;;
RedmineにはLDAP認証連携機能がついているように見えたので、これはLDAPをちょっとやってみるべきかなという風に考えた。
そのとき、金曜日の午後6時・・知識ほぼゼロから色々やってみたんだけど、さっぱりわからず、無常にも時はすぎ、10時をまわった。
久しぶりに「徹夜してもいっか」的気分になったが、ちょっと冷静になって家に帰ることにした。家に帰って、ごはんたべて、風呂入って、自宅サーバに戦場を移し、色々格闘して、今、翌日の朝4:51。やっとなんとか意味のあることができたので、その成果について記したい。
i-name をもう一個取っちゃったよ。
数ヶ月前にlinksafeってとこで =akioっていうi-nameを取ったけど、先ほど、勢いで、もう一個=shimonoってのも取っちゃったですよ。自分、i-nameってOpenIDとして使えるってことぐらいしか分かってないんだけど、ちょっといじってみて、今回気付いたことを書いてみる。
=shimono とかっていうi-nameをコミュニティi-nameにすることができた。
=shimonoをコミュニティi-nameにしたら、子供のi-name すなわち
=shimono*akio (私)だとか =shimono*keiko(妻)だとか、そういうものを発行することができた。
http://linksafe.name では、取ったi-nameをコミュニティi-nameにするのも、
コミュニティi-nameの子i-nameを作るのも無料だった。(1年だけかな?)
前項から導き出される結果として、=shimono*akio*hogeとか=shimono*akio*hoge*piyoとか
そういうのも無料でつくれるっぽい。
ただし、有効期限が1年で設定されて、延長には年間8ドルかかるような画面がでてきた。(うーむ。そういう商売か。マルチっぽいなw)
ということで、みなさん。「家族のために、苗字の=i-nameとるってのもよさそうですよ。」ってことで。
URI Templateを意識して波カッコ使おう
結構いまさら話題なのかもしれなく、少々恥ずかしいのですが、URLの例なんかを書くとき、
http://example.com/{user-id}/{object-id}
なんて書き方をよくしますよね。上記の例だと「パス第1階層にはuser-idを入れて、第2階層にobject-idを入れてね」とか、そういうことを伝えたいために。
で、自分はこれまで、上記なようなものを書くとき、中(波)括弧を使わず、鍵括弧あたりを使っちゃったり、そのときの気分でいろいろやっちゃってたんですけど、URI Templateという仕様が以下のように定められつつあるわけなので、今後は中(波)カッコをつかって書いた方がいいなと思いました。
http://tools.ietf.org/html/draft-gregorio-uritemplate-03
URI Template 自体は上記読めばわかる通り、「中括弧使いましょう」だけじゃなくて、変数や配列や簡単な演算までサポートしたTemplate Engine仕様として定められていて、自分はまだその詳細はまだ読めていませんが、*1まず波カッコを使うことで、「URI Templateを使うぞ」っていう気分が盛り上がっていいじゃんと思うわけです。
RESTful にWebをつくってゆくときって、URI設計が本質的な作業になるわけで、その点、このURI Templateの仕様理解はこれからのWeb技術者のMUST知識になりそうな予感。(っていうか、既にMUST知識だったりする?w、ごめんなさーい^^ 今まで認識甘かったッす)
そういうわけで、まずはノートに設計イメージ書くときとか、仲間との議論でホワイトボードにURI書くときなんかにも、波カッコ使うところからはじめてみようかなと思うわけです。
*1:以下の記事なんかもちゃんと読んで、キャッチアップしなきゃな〜 http://d.hatena.ne.jp/n_shuyo/20080614/uritemplates http://d.hatena.ne.jp/ZIGOROu/20081211/1229008879