本システムを利用するにあたりWEBページ作成者は以下の事柄を了解する必要がある.
- CMS-LDAPサーバ(cms-ldap.db.tokushima-u.ac.jp)からのアクセスは信用する.
- 本システムで認証可能な対象は,徳島大学統一認証基盤ユーザの部分集合である.
- WEBサーバにおけるユーザ認証のセキュリティレベルはBasic認証と同等である.
- HTTPプロトコルによるBasic認証をサポートしていること.
- CGIを利用できる環境にあること.(パスワードの登録,ログアウトに必要)
- 定期的な実行(ex. cron(UNIX) タスク(WindowsNT))を利用できる環境にあること.(パスワードの消去に必要)
- プログラミング言語Perlを利用できること.
現存のほとんどのUNIX+WEBサーバ(Apache)はこれぐらいのことは設定次第で可能なので心配はありません.
(その他のOSについては未調査ですが,並のOSならばできるでしょう)
通常,WEBサーバのユーザ認証はサーバ内に用意したパスワードファイルの情報をもとにして行なわれる.
本システムでは,このパスワードファイル(以下の例では".passwd")の内容を
- 徳島大学統一認証基盤の認証手続きから起動されるCGIプログラムによるアカウント登録
- ユーザのCGIプログラムへのアクセスによるアカウントの抹消
- 定期的なCGIプログラムの実行によるアカウントの抹消
で制御する.
本システムの動作を簡単に説明すると次のようになる.
アクセス制限されたWEBサーバのページにアクセスしたユーザは,徳島大学統一認証基盤における利用者認証を受けることを要求される.
利用者認証に成功した場合,目的のWEBサーバに対して〔ユーザID,使い捨てパスワード〕のアカウント登録要求(CGI)を行ない,WEBサーバ上にその利用者のアカウントを登録する.
利用者には,〔ユーザID,使い捨てパスワード〕を埋め込んだURLによるリンクを提示する.
利用者は,提示されたリンクを辿ることにより,目的のWEBサーバへアクセスすることが可能となる.
本システムの動作を詳しく説明しよう.
まず,役者を紹介する.
- CLI: 利用者もしくはWEB閲覧ソフトが起動しているマシン.
- WEB: 本システムを利用して利用者認証を行なうWEBサーバ.
- $L: アクセスしたいコンテンツのURL.
- $R: パスワードを設定するCGI.
引数:
- U=$U: ユーザID(ログアウト時には必要なし)
- P=$CP: 使い捨てパスワード(MD5で暗号化されている)(ログアウト時には必要なし)
- L=$Loc: ログアウト時にロケーションヘッダ(Location: $Loc)を生成するためのURL.
- I=$I: Identifier.何に利用するかはCGIの自由.(WEB管理者がパスワードファイルを選択するなどの目的で任意に定義して良い)(省略可)
- CMS-LDAP: 徳島大学統一認証基盤の認証を受けるサーバ(cms-ldap.db.tokushima-u.ac.jp)
- LDAP_AC(=http://cms-ldap.db.tokushima-u.ac.jp/cgi-bin/ldap-ac; 学内) : 本システムにおいて徳島大学統一認証基盤の認証を行なうCGI
- LDAP_AC(=https://cms-ldap.db.tokushima-u.ac.jp/cgi-bin/ldap-ac; 学内) : 本システムにおいて徳島大学統一認証基盤の認証を行なうCGI
引数:
- R=$R: WEB上のパスワードを設定するCGI.(省略時は $L/.ldap-regist.cgi となる)
- L=$L: 目的地のURL(WEBサーバ上).(必須)
- I=$I: Identifier.$Rで示されるCGIにパラメータとして渡される.LDAP_ACでの処理には用いない.(省略可)
- E=$enc: パスワード暗号化アルゴリズムを指定する.(省略可)
- ApMD5 : Apache実装のMD5暗号化アルゴリズムを利用する.
Apacheを利用し,かつOSのライブラリ関数 crypt(3) がMD5をサポートしていない場合はこれを指定して下さい.(Solaris や NetBSD, OpenBSD, WindowsNTなどのOSでは必要(?))
- SHA : SHA暗号化アルゴリズムを利用する.
- (省略): UNIX系のcrypt(3)実装のMD5暗号化アルゴリズムを利用する.
以下,本ページの例では,
- $L : http://web.db.tokushima-u.ac.jp/ac-example/ (アクセス制限されたコンテンツ)
- $R : http://web.db.tokushima-u.ac.jp/ac-example/.ldap-regist.cgi (アカウント登録用CGI)
- $Loc : http://web.db.tokushima-u.ac.jp/ (ログアウト後に見せるページ)
- $I : (省略)
- $enc : (省略:crypt(3)関数のMD5を利用する)
の場合を示している.
すなわち,クライアント(CLI)がWEBサーバ(WEB)にあるアクセス制限されたコンテンツ($L: http://web.db.tokushima-u.ac.jp/ac-example/)にアクセスするという状況を考えている.
認証手順は以下のように行なわれる.
- CLI → WEB : $Lの入口のページにアクセス.
- WEB → CLI : リンク「LDAP_AC?R=$R&L=$L&I=$I」が含まれたページを返す.
- CLI → CMS-LDAP : 「LDAP_AC?R=$R&L=$L&I=$I」にアクセス.
- CMS-LDAP → CLI : 認証画面を表示.($R, $L, $Iを保存)
- CLI → CMS-LDAP : (認証対象者,パスフレーズ)を送信.
- CMS-LDAP → CLI : (認証対象者,パスフレーズ)を検証.
- 失敗: 手順終了.
- 成功: ユーザID($U), 使い捨てパスワード($P)と$Pの暗号化パスワード($CP)を合成.
- CMS-LDAP → WEB : パスワードを登録するためのアクセス($R?U=$U&P=$CP&I=$I)を行なう.
- WEB: CGI($R)は$U,$CP,$Iの情報を用いてパスワードファイル(.passwd)を変更.
- WEB → CMS-LDAP: 終了ステータスを返送.
- CMS-LDAP → CLI : WEBに登録したユーザID($U), パスワード($P)の情報を画面に提示.
- CLI → WEB : $Lに$U, $Pを用いてアクセス.
- WEB → CLI : 認証の結果,$Lの内容を返送.
上記の認証手順で登録されたパスワードは自動的には消去されないので,何らかの手順を行なうことが必要です.
本システムでは,WEBサーバ上で動作するCGIプログラム($R)を利用して,パスワードの無効化手続きを行ないます.
現在用意しているCGIプログラム($R).ldap-regist.cgiを利用すると,
- 利用者が$Rにアクセスしたとき.
- crontab(UNIX)により定期的にCGIプログラムを動作させ,有効期限がEXPIREしたとき.
- 新たに認証手順を行ない新しいパスワードを登録したとき.
に(古い)パスワードを消去します.
本システムでは,WEBサーバ側の要求に合わせて,アカウント登録用CGIプログラム(.ldap-regist.cgi)を改造することを禁止していません.
WEBページ作成者の責任において自由に変更して下さい.
プログラミング言語Perlで書かれている必要もありません.
ただし,サーバからのアクセスは
CGIプログラム?U=$U&P=$CP&I=$I
のようになっておりますので,これらの引数を正しく処理するようにして下さい.
また,CGIプログラムの出力は,'Content-Type: text/plain'形式とし,
正常に終了した場合には,
STATUS: 200 何らかのメッセージ
何らかの理由で失敗した場合には,
STATUS: 100 失敗の原因を示すようなメッセージ
を返答して下さい.
Linux や FreeBSD などのOSで,ApacheでBasic認証やCGI利用のための設定がすでに完了していて,構成員(学生,教職員)に限定したページを作成する場合.
- tutorial% su アパッチの実行ユーザ名
- tutorial% cd $TOP …($TOP はアパッチのドキュメントルート.以下,同様)
- tutorial% mkdir for-students …(構成員に限定するコンテンツを入れるディレクトリ)
- tutorial% cd for-students
- .ldap-regist.cgi を ".ldap-regist.cgi" にダウンロード.
- .htaccess を ".htaccess" にダウンロード.
- tutorial% touch .passwd
- tutorial% chmod +x .ldap-regist.cgi
- tutorial% ./.ldap-regist.cgi
Perlがないというメッセージが出たら,".ldap-regist.cgi" の1行目を修正.(正しいperlのパスを設定する)
- tutorial% vi .htaccess
- 「AuthUserFile ...」を「AuthUserFile $TOP/for-students/.passwd」に変更する.
- 「ErrorDocument 401 ...」の行の 「L=...」を「L=http://貴方のサーバの名前/for-students/」に変更する.
- tutorial% vi index.html …何かページを作成する.他からコピーしても良い.
- 閲覧ソフトでhttp://貴方のサーバの名前/for-students/をみる.
- ユーザ名,パスワードを聞いて来ない.→WEBサーバ管理者にアクセス制限設定について相談.
- 徳島大学統一認証基盤の認証はとおるが,アカント登録に失敗する.→WEBサーバ管理者にCGI実行権限について相談.
- その他,正常にログインできない..→メッセージ,現象をみて考える.わからなければ有識者に尋ねる.
- tutorial% crontab -e
45 * * * * $TOP/for-students/.ldap-regist.cgi > /dev/null
という行を追加する.
- 終了.(以上の作業で,$TOP/for-students/以下のコンテンツが構成員に限定される)
- ログインできるユーザを制限したい.→付録A.4(パスワードファイルの作成方法)を読む.
以上,超簡単な説明でした.
本ページで提供するWEBサーバ上のパスワード登録CGI(.ldap-regist.cgi)が扱うパスワードファイルは,Apacheのhtpasswdコマンドで作成されるパスワードファイルの拡張になっています.
拡張されたパスワードファイルの様式は,1行毎に
ユーザID:暗号化パスワード:ライフネーム:登録時刻
が記述されます.
それぞれのフィールドは,
- ユーザID: ユーザ名(本システムでは,【個人】情報のEID)
- 暗号化パスワード: MD5で暗号化されたパスワード
- ライフネーム: ユーザの現実名(コメント)
- 登録時刻: UNIX TIME (second)
となっています.(htpasswdでは,`ユーザID'と`暗号化パスワード'のみが作成され,Apacheのユーザ認証ではその2つだけが利用される.)
- □ 徳島大学統一認証基盤ユーザを全て受け入れる
- .ldap-regist.cgi の設定パラメータ $accept_ldap_user を 1 にセットして下さい.
徳島大学統一認証基盤で認証可能な利用者(すなわち,全構成員)を全て受け入れます.
- □ 徳島大学統一認証基盤ユーザ以外のユーザを登録する.
- 徳島大学統一認証基盤ユーザのユーザIDと重複しないユーザ名(徳島大学統一認証基盤ユーザのユーザIDは現在S, c, Vのいずれかの文字で始まる名前である.ただし,これは将来追加されるかも知れない.)を選び,
htpasswdコマンドを用いて,
% htpasswd .passwd ユーザ名
Enter new password: password
Re-enter new password: password
のようにすると,ユーザを登録することができます.(passwordの部分は画面にエコーバックされません)
当然ながら,このように作成したユーザについては,ユーザ名とパスワードを本人に知らせる必要があります.
-