Provided by EDB working group.
$Id: ac.html,v 1.11 2013/12/26 05:40:58 alex Exp $
目次
今日,さまざまな局面でWEBサーバの運用が行なわれている.
WEBサーバにコンテンツを掲載することにより,簡単にコンテンツを複数の利用者が閲覧できるからである.
しかし,限られた利用者にコンテンツを公開する手段は限られている.
勿論,対象が大学人というように利用者が特定のネットワーク(キャンパスネットワーク)に所属している場合には,ネットワークアドレスによりアクセスの可否を決定することができる.
ところがアクセス権はそのネットワーク全体に開放されてしまうため,教職員のような特定の利用者のみに限定することはできない.
結果として,利用者(各教職員)にアカウントを発行し,かつ,WEBサーバの利用者認証機構を利用することになる.
しかして,セキュリティを保持しつつアカウントを発行・運用するという作業はWEBページ作成者にとっては結構大変なことである.
何故か?
考えられる事柄をいくつか列挙すると
- アカウントを準備するには利用者にパスワードを決めてもらわないといけない.
→大抵の利用者はめんどくさがってやってくれない.
- 利用者がいつまでパスワードを覚えていてくれるか.
→大抵の利用者はすぐに忘れてしまう.
- ある程度セキュリティを保つためには,パスワードを定期的に変更しなくてはいけない.
→大抵の利用者は変更などしない.
- パスワードは他人が連想しにくい文字列が好ましい.
→大抵の利用者は簡単なものを好む.
- パスワードは他人に知られるべきではない.
→何人かの利用者は紙に書いて良く見える場所に張ろうとする.
などなど,きりがない.
所詮,セキュリティと利用者の思想は相反するものなのである.
現在,幸いなことに本学ではEDBの運用により教職員がEDBにログインするためのパスフレーズを持っている.
EDBにおいて行なわれる認証機構を利用して,学内外の汎用WEBサーバに使い捨てできるパスワードを発行するというのが本システムの目的である.
勿論,認証の対象となる利用者はEDBにおいて認証可能な利用者(本学の教職員)に限られるが,EDBに登録されている利用者全体や更に限定された利用者に設定可能とすることで,大学,学部や学科毎の教職員のみに制限されたコンテンツをWEB上に搭載できることの意義は大きい.
本システムの特徴を列挙すると,
- 教職員の個人認証をEDB認証機構を用いて行ない,その結果を他のWEBサーバに伝達する.
- WEBサーバには,アカウント情報(ユーザID,使い捨てパスワード)を与えることにより,WEBサーバ上でのユーザ認証・識別を可能にする.
- WEBサーバでは,受け入れユーザ(アカウント登録)を利用者毎に制限することが可能.
- WEBのCGIインタフェースを用いてアカウント情報の伝送を行なうため,複雑なWEBサーバ設定やサーバプログラムの変更を必要としない.
- 特殊な閲覧ソフト(WEBブラウザ)もしくはプラグインを必要としない.(利用者側の特別な作業を必要としない.)
- 使い捨てパスワードは一定時間を経過すると抹消されるため,ユーザによるパスワード変更作業を必要としない.
- ユーザはおのおののWEBサーバに登録されているパスワードを記憶しておく必要がない.
- 使い捨てパスワードにはランダムな文字列が利用されるため解読が困難である.また,使い捨てパスワードは完全に独立に生成されるため,他のシステムのセキュリティレベルを下げる心配はない.
- 同一WEBサーバ(同一パスワードファイルによって保護されているコンテンツ)では,一度の認証手続きのみで継続して閲覧が可能.(通常のWEBのユーザ認証と同じ)
などがあげられる.
さらに,本システムを利用することによって,従来おのおののWEBページ作成者が行なっていたアカウント管理を飛躍的に軽減することが可能である.
また,利用者はEDBのパスフレーズだけを覚えていれば良く,複数のパスワードを紙に書かずに覚えておくという非常に苛酷な試練を免れるのである.
本システムを利用するにあたりWEBページ作成者は以下の事柄を了解する必要がある.
- EDBサーバ(web.db.tokushima-u.ac.jp)からのアクセスは信用する.
- 本システムで認証可能な対象は,EDB利用者(EDBにログイン可能なユーザ)の部分集合である.
- WEBサーバにおけるユーザ認証のセキュリティレベルはBasic認証と同等である.
- HTTPプロトコルによるBasic認証をサポートしていること.
- CGIを利用できる環境にあること.(パスワードの登録,ログアウトに必要)
- 定期的な実行(ex. cron(UNIX) タスク(WindowsNT))を利用できる環境にあること.(パスワードの消去に必要)
- プログラミング言語Perlを利用できること.
現存のほとんどのUNIX+WEBサーバ(Apache)はこれぐらいのことは設定次第で可能なので心配はありません.
(その他のOSについては未調査ですが,並のOSならばできるでしょう)
通常,WEBサーバのユーザ認証はサーバ内に用意したパスワードファイルの情報をもとにして行なわれる.
本システムでは,このパスワードファイル(以下の例では".passwd")の内容を
- EDBの認証手続きから起動されるCGIプログラムによるアカウント登録
- ユーザのCGIプログラムへのアクセスによるアカウントの抹消
- 定期的なCGIプログラムの実行によるアカウントの抹消
で制御する.
本システムの動作を簡単に説明すると次のようになる.
アクセス制限されたWEBサーバのページにアクセスしたユーザは,EDBサーバにおいて利用者認証を受けることを要求される.
EDBサーバにおける利用者認証に成功した場合,EDBサーバから目的の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管理者がパスワードファイルを選択するなどの目的で任意に定義して良い)(省略可)
- EDB: EDBのサーバ(web.db.tokushima-u.ac.jp)
- EDB_AC(=https://web.db.tokushima-u.ac.jp/cgi-bin/edb_ac) : 本システムのEDB上の立役者
引数:
- EID=$EID: 認証画面に表示する利用者一覧をある個人や組織に限定したいときに指定する.【個人】情報のEID,もしくは【組織】情報のEID.(省略可)
(注)一覧に掲載する利用者名を制限するだけで,WEBサーバに登録される利用者を限定するためのものではありません.
- R=$R: WEB上のパスワードを設定するCGI.(省略時は $L/.regist.cgi となる)
- L=$L: 目的地のURL(WEBサーバ上).(必須)
- I=$I: Identifier.$Rで示されるCGIにパラメータとして渡される.EDB_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/.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 : リンク「EDB_AC?R=$R&L=$L&I=$I」が含まれたページを返す.
- CLI → EDB : 「EDB_AC?R=$R&L=$L&I=$I」にアクセス.
- EDB → CLI : 認証画面を表示.($R, $L, $Iを保存)
- CLI → EDB : (認証対象者,パスフレーズ)を送信.
- EDB → CLI : (認証対象者,パスフレーズ)を検証.
- 失敗: 手順終了.
- 成功: ユーザID($U), 使い捨てパスワード($P)と$Pの暗号化パスワード($CP)を合成.
- EDB → WEB : パスワードを登録するためのアクセス($R?U=$U&P=$CP&I=$I)を行なう.
- WEB: CGI($R)は$U,$CP,$Iの情報を用いてパスワードファイル(.passwd)を変更.
- WEB → EDB: 終了ステータスを返送.
- EDB → CLI : WEBに登録したユーザID($U), パスワード($P)の情報を画面に提示.
- CLI → WEB : $Lに$U, $Pを用いてアクセス.
- WEB → CLI : 認証の結果,$Lの内容を返送.
実装例としては,(認証を行っていない状態では)アクセスできない
http://web.db.tokushima-u.ac.jp/ac-example/が,
本システムの認証を経ることによって,
- https://web.db.tokushima-u.ac.jp/cgi-bin/edb_ac?
- R=http://web.db.tokushima-u.ac.jp/ac-example/.regist.cgi&
- L=http://web.db.tokushima-u.ac.jp/ac-example/
でみることができます.(Apacheのマニュアルページが目的地にあります.)
上記の認証手順で登録されたパスワードは自動的には消去されないので,何らかの手順を行なうことが必要です.
本システムでは,WEBサーバ上で動作するCGIプログラム($R)を利用して,パスワードの無効化手続きを行ないます.
現在用意しているCGIプログラム($R).regist.cgiを利用すると,
- 利用者が$Rにアクセスしたとき.
- crontab(UNIX)により定期的にCGIプログラムを動作させ,有効期限がEXPIREしたとき.
- 新たに認証手順を行ない新しいパスワードを登録したとき.
に(古い)パスワードを消去します.
UNIX上でApacheを運用している場合について導入手順(例)を説明します.
ここではユーザ認証を必要とするディレクトリ($L)において,
の3つのファイルを設定する方法を説明します.
- ApacheのBasic認証手順が有効になっているディレクトリを準備する.
(例)http://web.db.tokushima-u.ac.jp/ac-example/ ($Lの値)
Basic認証手順を利用するためには,Apacheの設定ファイルにて
の設定をいくつかの場所に追加しなくてはならないかも知れません.
また,アクセス認証は,通常そのディレクトリにおかれた .htaccess で設定します.
Basic認証が不可能になっている場合には,サーバの管理者に相談して下さい.
- ".regist.cgi"を用意したディレクトリ(または,CGIが実行可能なディレクトリ)におく.
- デフォルトはディレクトリ($L)におかれることを想定している.このときEDB_ACのパラメータR=$Rは省略できる.
- CGIをドキュメントのディレクトリで実行可能にするためには,Apacheの設定ファイルにて
- Option ExecCGI
- AddHandler cgi-script .cgi
の設定をいくつかの場所に追加しなくてはならないかも知れません.
CGIが実行できない場合には,サーバの管理者に相談して下さい.
- /bin-cgi/のようなシステム共通の場所においた場合には,EDB_ACのパラメータR=$Rを明示的に指定する必要がある.
- ApacheのユーザID(または,CGIの実行ユーザID)で実行パーミッションがONになっている必要があります.
- ".regist.cgi"の設定.
適当なエディタを用いて".regist.cgi"を編集し,以下の設定項目を調整して下さい.
- ".regist.cgi"に正しいPerlのパスを教える.(CONFIGURATION [0]: 1行目)
- CONFIGURATION [1]: EDBのFQDN(変更する必要なし)
- CONFIGURATION [2]: 認証登録の範囲($accept_edb_user)
- 0: パスワードファイルに既存の利用者のみを受け付ける.
- 1: EDBで認証可能な利用者(教職員)を全て受け付ける.
- CONFIGURATION [3]: パスワードの有効期限.(秒単位で設定)
- CONFIGURATION [4]: パスワードファイルのパス名.(デフォルトは .regist.cgi のあるディレクトリの".passwd")
- パスワードファイルを準備する.
- パスワードファイルは .regist.cgi の CONFIGURATION [4] で指定した場所に作成してください.
- パスワードファイルはApacheのユーザID(または,CGIの実行ユーザID)で書き換え可能になっている必要があります.
- パスワードファイルはApacheのBasic認証システムが利用する(htpasswdコマンドで作成される)ファイルの拡張になっています.
- パスワードファイルには,EDB利用者以外の一般のユーザのパスワードも登録することができます.
".regist.cgi"の設定時に $accept_edb_userを1にセット(全てのEDB利用者,すなわち教職員全員を受け入れるに)し,かつ他のユーザがいない場合にはパスワードファイルを特に編集する必要はなく,空のファイルを用意して下さい.
$accept_edb_userを0とした場合や,他にも閲覧を許可するユーザがいる場合には,付録A.4を参考にして,ユーザのリストをパスワードファイルに登録して下さい.
- $Lのディレクトリに".htaccess"を作成し,サンプル.htaccessを参考にして調整する.
- 2行目のAuthUserFileは認証に利用するパスワードファイルのパス名を指定するためのものです.(フルパスで書く)
状況に応じて変更してください.
- 「Allow from 150.59.230.68」という行の"150.59.230.68"はEDBサーバの現在のIPアドレスです.
このIPアドレスは変更される可能性がありますので,HostNameLookupsがonになっているApacheシステムでは"web.db.tokushima-u.ac.jp"に変更した方がベターです.
- サンプルは,
- 150.59.230.68からの.regist.cgiへのアクセス.
- Basic認証手順を経たユーザの任意のファイルへのアクセス.
のいずれかが満足された場合,アクセスを許可する設定です.
- 「ErrorDocument 401 ....」はWEBサーバでの認証が成功しなかったときに,表示するメッセージ,リダイレクトするURLを指定するためのものです.
期待した入口から辿って来なかったユーザをEDB認証に導くようなメッセージ(もしくはページを作成しそのURL)を記述して下さい.(詳しくは,Apacheのマニュアルページを参照)
サンプルでは必要最小限のメッセージしか記述していませんが,適切なスクリプトを利用・指定すればEDB認証後に目的のURLに導くことができると思われます.
- ApacheのユーザID(または,CGIの実行ユーザID)で実行される crontab にて定期的に(1時間周期ぐらいで),.regist.cgi を実行してください.
有効期限を過ぎたパスワードを消去します.(パスワードファイルの第2フィールドを無効なパスワードに書き換える)
(例)毎時45分に.regist.cgiを実行し,有効期限に達したパスワードを消去する.
45 * * * * /usr/local/share/apache/htdocs/ac-example/.regist.cgi > /dev/null
- アクセス制限されていないWEBページにURL: $Lへのリンクを,「EDB_AC?R=$R&L=$L&I=$I」の形式で張り付ける.
(例)
- ○「....については<a href="https://web.db.tokushima-u.ac.jp/cgi-bin/edb_ac?
- L=http://web.db.tokushima-u.ac.jp/ac-example/">こちら</a>
を参照してください.ただし,閲覧は大学の教職員に限られています(EDB認証機構を利用).」
- ○「....については<a href="https://web.db.tokushima-u.ac.jp/cgi-bin/edb_ac?
- R=http://web.db.tokushima-u.ac.jp/ac-example/.regist.cgi&
- L=http://web.db.tokushima-u.ac.jp/ac-example/">こちら</a>
を参照してください.ただし,閲覧は教職員に限られています(EDB認証機構を利用).」
- ○「学科内の教職員は<a href="https://web.db.tokushima-u.ac.jp/cgi-bin/edb_ac?
- R=http://web.db.tokushima-u.ac.jp/ac-example/.regist.cgi&
- L=http://web.db.tokushima-u.ac.jp/ac-example/">ここ</a>
から入ってください(EDB認証機構を利用).その他のユーザは<a href="http://web.db.tokushima-u.ac.jp/ac-example/">ここ</a>から入ってください(静的に登録されたアカウントを利用).」
- ○通常と同じように, 「学科内の教職員は<a href="http://web.db.tokushima-u.ac.jp/ac-example/">ここ</a>から入ってください.」としておいて,WEBサーバの認証エラーで表示されるメッセージでEDB認証に導くというのも一つの方法です.
- ○EDB認証画面に表示する利用者の一覧を特定の学科に限定する.
- 建設工学科: (EID=11077)「....については<a href="https://web.db.tokushima-u.ac.jp/cgi-bin/edb_ac?
- EID=11077&
- R=http://web.db.tokushima-u.ac.jp/ac-example/.regist.cgi&
- L=http://web.db.tokushima-u.ac.jp/ac-example/">こちら</a>
を参照してください.ただし,閲覧は本学科の教職員に限られています.」
- 機械工学科: (EID=11090)
- 化学応用工学科: (EID=11103)
- 電気電子工学科: (EID=11115)
- 知能情報工学科: (EID=11128)
- 生物工学科: (EID=11139)
- 光応用工学科: (EID=11150)
- 共通講座: (EID=11159)
- エコシステム工学専攻: (EID=11044)
- ユーザに明示的にアカウントを消去させるためには,ユーザに.regist.cgiにアクセスさせてください.
(例)
- 「閲覧が終了しましたら,<a href="http://web.db.tokushima-u.ac.jp/ac-example/.regist.cgi?
- L=http://web.db.tokushima-u.ac.jp/">ログアウト</a>
してください.」
ここで与えるパラメータLは,ログアウト後に移動するページのURLです.
[カスタマイズ]
- ◎パスワードファイルをよりセキュアな場所におく.
- EDBサーバから与えられる使い捨てパスワード以外に,静的にパスワードを設定しているユーザが存在する場合には,パスワードファイルをセキュアな場所におくことをお奨めします.
- たとえば,パスワードファイル(teacher-password)を外部からアクセスできないディレクトリ(例: /usr/local/share/apache/passwd/)におく場合には,
- .htaccess におけるパスワードファイルの設定 AuthUserFile をパスワードファイルの場所に合わせて変更して下さい.
(例) AuthUserFile /usr/local/share/apache/passwd/teacher-password
- .regist.cgi の CONFIGURATION [4] の $pwfile をパスワードファイルの場所に合わせて変更して下さい.
(例) $pwfile = "/usr/local/share/apache/passwd/teacher-password";
の変更を行なって下さい.
- ◎.regist.cgi を他の場所(システム共通の場所 .../cgi-bin/ など)におく.
- あまりお奨めではありませんが,以下のことに注意してシステムを調整して下さい.
- .regist.cgi のアクセス権を
- EDBサーバからは無条件にアクセスできる.
- 上記以外では,Basic認証されているユーザからのみアクセスできる.
(.regist.cgi が用いているパスワードファイルで制限されたユーザにのみ制限されていることが望ましい.
パスワードファイルを幾種類も運用する場合には少し面倒である.)
のように制限して下さい.
- crontabによって実行する.regist.cgiを変更する.(管理しているパスワードファイル毎に設定する.)
- リンク作成時の「<a href="EDB_AC?R=$R&L=$L"> ... </A> 」中のRパラメータ(.regist.cgiのURL)を必ず指定する.
- Basic認証
- 本システムでは閲覧ソフト-WEBサーバ間の認証手順にHTTP/1.0, HTTP/1.1 で規定されているBasic認証を利用する.
Basic認証では,パスワードは平文(実際にはbase64で符号化されているが暗号化の意味では平文と同じ)で送信されるため,簡単に盗聴することが可能である.
これに対し,HTTP/1.1ではDigest認証が規定されており,Challenge-response型(平文のパスワードがネットワーク上を流れない)の認証が可能である.ただし,この認証方式をサポートしている閲覧ソフトを利用しなくてはならない.
(現在,全ての閲覧ソフトがDigest認証方式をサポートしている訳ではない)
今日においては,利用されている閲覧ソフトの種類はある程度集約されているが,閲覧ソフトの変更やバージョンアップの作業を利用者に科さなくてもよく,かつ,利用している閲覧ソフトによって利用者を限定させなくても良いBasic認証を利用する.
なお,盗聴の危険性はあるが,一定時間経過するとパスワードを消去することで,不正アクセスの可能性を減じる.
(システムの構成としてDigest認証方式が不可能なことを意味しているのではない.Digest認証方式が広く一般的に利用できるようになった段階で,Digest認証方式が利用できるインプリメントを考えるということである.)
- EDB認証にかかるパスフレーズ
- 閲覧ソフト-EDBサーバ間のパスフレーズの送信は,SSLで保護されているため,盗聴の危険性は希少である.
また,EDBサーバにおいて生成される使い捨てパスワードは,パスフレーズとは独立に生成されるので,パスワードからパスフレーズを解読される可能性はない.
また,EDBサーバから閲覧ソフトに対しページ上に平文のパスワードを提示するが,このページもSSLにより保護されているため,盗聴の危険性は希少である.
- EDBサーバ-WEBサーバ間のパスワード転送
- EDBサーバからWEBサーバに転送されるパスワードは,MD5で暗号化されている.
暗号化パスワードが盗聴されれば,その文字列から平文のパスワードを解読される危険性があるが,(解読プログラムの演算速度によるが)パスワードの有効期限を数時間〜数日程度としておけば,解読されるころにはパスワードはEXPIREしている.
- 解読アルゴリズムに依存するが,素当たり方式(+現在のPCの性能)では解読には(期待値として)数年以上を要する.
- 利用者の限定
- EDBサーバでは利用者の認証と使い捨てパスワードの生成のみを行ない,実際にその情報(ユーザID,パスワード)を利用するか否かは,WEBサーバ上で起動する .regist.cgi によって判断される.
すなわち,利用者の範囲の決定権は完全にWEBページ作成者に委ねられる.
- WEBサーバ上でのユーザ識別(UNIX+Apacheの場合)
- Apacheサーバは,Basic認証 を行なったアクセスに関しては,環境変数 ``REMOTE_USER'' にユーザIDをセットする.
この環境変数をCGIプログラムから参照することで,現在アクセスしているユーザをCGIプログラム中で容易に特定することができる.
情報の更新作業がWEB上で可能なCGIプログラムを作成するときに,誰が更新作業を行なったかを特定できることは有用な情報となる.
(ユーザIDから,EDBの【個人】情報を得る方法については,付録A.1を参照のこと)
本ページでは,EDB認証機構を利用して,汎用のWEBサーバにおいて複雑な手続き無しに教職員を識別する方法について述べた.
従来,構想時点で噸座することが多かった,
- 教職員のみに公開すべき情報(学生には非公開の情報など)のWEBへの掲載,
- 教職員のみが情報を登録できるページ(学生への掲示板など)の作成
が,このシステムを利用することによって促進されることを望む.
なお,ここにあげた例以外にも,ユーザ認証が可能になることによって,さまざまな応用例を考えることができると思われる.
みなさんの発想力の豊かさに期待する.
なお,本システムに対する質問,意見,コメントなどはEDB working groupにお願いします.
EDBでは,whois/tcp インタフェースによる登録情報(公開可能なものに限る)へのアクセス方法を提供しています.
ユーザIDから,そのユーザの姓名を得るには,
whois -h web.db.tokushima-u.ac.jp
'STYLE=TSV DML=PLAIN LANG=Japanese LOOK=\E{ユーザID} PRINT={@.surname @.givenname}'
(実際には1行)として下さい.
Perlで書くと,以下のようなプログラム.
# $lifename = get_user_info(uid)
# Notice: please set correct path of 'whois' command.
sub get_user_info {
my $uid = $_[0];
my $name = "(unknown)";
my $line; my $eid; my $surname; my $givenname;
open(WHOIS, "/usr/bin/whois -h web.db.tokushima-u.ac.jp …(行は継続)
'STYLE=TSV DML=PLAIN LANG=Japanese …(行は継続)
LOOK=\\E{10729} PRINT={@.surname @.givenname}' |") or return "(unknown)";
while($line = <WHOIS>) {
chomp($line);
($eid, $surname, $givenname) = split(/\t/, $line);
if($eid eq $uid) {
$name = "$surname $givenname";
}
}
close(WHOIS);
return $name;
}
本システムでは,WEBサーバ側の要求に合わせて,アカウント登録用CGIプログラム(.regist.cgi)を改造することを禁止していません.
WEBページ作成者の責任において自由に変更して下さい.
プログラミング言語Perlで書かれている必要もありません.
ただし,EDBサーバからのアクセスは
CGIプログラム?U=$U&P=$CP&I=$I
のようになっておりますので,これらの引数を正しく処理するようにして下さい.
また,CGIプログラムの(EDBサーバに対する)出力は,'Content-Type: text/plain'形式とし,
正常に終了した場合には,
STATUS: 200 何らかのメッセージ
何らかの理由で失敗した場合には,
STATUS: 100 失敗の原因を示すようなメッセージ
を返答して下さい.
Linux や FreeBSD などのOSで,ApacheでBasic認証やCGI利用のための設定がすでに完了していて,教職員に限定したページを作成する場合.
- tutorial% su アパッチの実行ユーザ名
- tutorial% cd $TOP …($TOP はアパッチのドキュメントルート.以下,同様)
- tutorial% mkdir for-eng-teachers …(教職員に限定するコンテンツを入れるディレクトリ)
- tutorial% cd for-eng-teachers
- .regist.cgi を ".regist.cgi" にダウンロード.
- .htaccess を ".htaccess" にダウンロード.
- tutorial% touch .passwd
- tutorial% chmod +x .regist.cgi
- tutorial% ./.regist.cgi
Perlがないというメッセージが出たら,".regist.cgi" の1行目を修正.(正しいperlのパスを設定する)
- tutorial% vi .htaccess
- 「AuthUserFile ...」を「AuthUserFile $TOP/for-eng-teachers/.passwd」に変更する.
- 「ErrorDocument 401 ...」の行の 「L=...」を「L=http://貴方のサーバの名前/for-eng-teachers/」に変更する.
- tutorial% vi index.html …何かページを作成する.他からコピーしても良い.
- 閲覧ソフトでhttp://貴方のサーバの名前/for-eng-teachers/をみる.
- ユーザ名,パスワードを聞いて来ない.→WEBサーバ管理者にアクセス制限設定について相談.
- EDBの認証はとおるが,アカント登録に失敗する.→WEBサーバ管理者にCGI実行権限について相談.
- その他,正常にログインできない..→メッセージ,現象をみて考える.わからなければ有識者に尋ねる.
- tutorial% crontab -e
45 * * * * $TOP/for-eng-teachers/.regist.cgi > /dev/null
という行を追加する.
- 終了.(以上の作業で,$TOP/for-eng-teachers/以下のコンテンツが教職員に限定される)
- ログインできるユーザを制限したい.→付録A.4(パスワードファイルの作成方法)を読む.
以上,超簡単な説明でした.
本ページで提供するWEBサーバ上のパスワード登録CGI(.regist.cgi)が扱うパスワードファイルは,Apacheのhtpasswdコマンドで作成されるパスワードファイルの拡張になっています.
拡張されたパスワードファイルの様式は,1行毎に
ユーザID:暗号化パスワード:ライフネーム:登録時刻
が記述されます.
それぞれのフィールドは,
- ユーザID: ユーザ名(本システムでは,【個人】情報のEID)
- 暗号化パスワード: MD5で暗号化されたパスワード
- ライフネーム: ユーザの現実名(コメント)
- 登録時刻: UNIX TIME (second)
となっています.(htpasswdでは,`ユーザID'と`暗号化パスワード'のみが作成され,Apacheのユーザ認証ではその2つだけが利用される.)
- □ EDB利用者を全て受け入れる
- .regist.cgi の設定パラメータ $accept_edb_user を 1 にセットして下さい.
EDBで認証可能な利用者(すなわち,全教職員)を全て受け入れます.
- □ EDB利用者を制限する.
- .regist.cgi の設定パラメータ $accept_edb_user を 0 にセットして下さい.
- パスワードファイル(.passwd)に受け入れ可能なEDB利用者毎に
ユーザID:*:ライフネーム:1
という行を用意してください(Windowsなどの crypt(3)関数を実装していないOS上でApacheを起動している場合には,
ユーザID:$apr1$abcdefgh$*:ライフネーム:1
としてください).ユーザIDはEDBに登録されている【個人】情報のEID(情報識別子)です.
パスワードファイルに登録されたEDB利用者のみについて,.regist.cgiはパスワード登録を受け付けます.
(例) 12345:*:Ichiro Suzuki:1
12346:*:Hideo Nomo:1
12351:*:Naoko Takahashi:1
13459:*:Sumika Minamoto:1
-
これらの行の作成は少々面倒ですが,学科や講座単位の教職員に限定するような場合では,EDB閲覧インタフェースの【個人】情報の〔検索〕ページにて,
- 形式: PLAIN
- 書式: TSV
- 言語: 英語
- 文字コード: 欧文
- 表示項目: 名,姓
とし,検索条件として[所属]などを指定して得られた検索結果(テキスト)をもとにすると,割と簡単に学科や講座単位の利用者リストを作成できると思われます.(一応,リストの過不足はチェックして下さい)
- WHOISを利用して
tutorial% whois -h web.db.tokushima-u.ac.jp 'STYLE=TSV LANG=English DML=PLAIN LOOK=person.{@.affiliation=\E{組織情報のEID}} PRINT={@.surname @.givenname}' | grep '^[0-9]' | awk '{ print $1 ":$apr1$abcdefgh$*:" $2 ", " $3 ":1"; }'
としてももとになるデータを作成することができます.
- □ EDB利用者以外のユーザを登録する.
- EDB利用者のユーザIDと重複しないユーザ名(EDB利用者のユーザIDは整数値(【個人】情報のEID)を示す文字列で与えられますので,一般のユーザについては数字(0〜9)以外で始まるユーザIDを割り当ててください.)を選び,
htpasswdコマンドを用いて,
% htpasswd .passwd ユーザ名
Enter new password: password
Re-enter new password: password
のようにすると,ユーザを登録することができます.(passwordの部分は画面にエコーバックされません)
当然ながら,このように作成したユーザについては,ユーザ名とパスワードを本人に知らせる必要があります.
-