連載 / WWW サーパーの育て方一① Apache HTTP サーバー UNIX MAGAZINE 1999.2 具合カ埆肖されました た。 6.4 からの新た新皀加はなく、既存の機能におけるいくつかの不 2 1998 年 12 月 22 日にバグフィックス版の 6.4.1 がリリースされまし ftp.postgreSQL.org/pub/です。ここから postgresql- PostgreSQL のオフィシャル FTP サイトは ftp:// た用途に使うことができます。 テープル名やカラム名、正見表現検索、 LIKE 検索といっ 日本語を扱えるようになりました。マルチバイト文字を、 ではマルチバイト文字がサポートされたので、そのままで PostgreSQL の山辭斤バージョンは 6.4 です 2 。山懿斤版 いへん高機能でイ囀生もあります。 ます。 PostgreSQL は、フリーの RDBMS としてはた バックエンドのデータベースには PostgreSQL を使い PostgreSQL のモジュール・コンポーネントをそのまま利用します。 ります。今回はとくに必要なモジュールはないので、標鴟 のモジュールをコンパイルできるようにしておく必要があ この段階で、標準でコンパイルされないモジュールや自作 これでコンパイルとインストールの準備は整いました。 # . /configure ——prefix=/usr/local/httpd ます。 を指定できます。ここでは、 /usr/local/httpd としてい オフションで、 Apache をインストールするディレクトリ 下のように configure スクリプトを実行します。 --prefix Apache のアーカイプを展開したディレクトリで、以 インストールの準備だけしておきましよう。 こでは ルとともにおこなわれるからです。したがって、 のコンパイルとインストールは、 mod-perl のインストー なぜ「準備編」かというと、 mod-perl 対応の Apache Apache のインストール ( 準備編 ) なミラーサイトを示します。 に近いミラーサイトから入手してください。表 1 に代表的 apache/dist/apache-l. 3.3. tar. gz か、ネットワーク的 新版はバージョン 1.3.3 です。 ftp://www.apache ・ org/ ーとして、依然 Apache に分があるように思います。最 い評 1 司を聞きませんが、フリーで誰もが使いやすいサーバ HTTP サーバーには Apache を使います。去も匠はよ 表 1 Apache の代表的な国内ミラー FTP サイト ftp://ftp.jaist ・ ac ・ jp/net/apache/dist/ ftp://ring ・ aist ・ go. jp/archives/net/apache/dist/ ftp://ring.asahi-net.or.jp/archives/net/ apache/dist/ ftp://sunsite.sut.ac.jp/pub/archives/WWW/ apache/dist/ ftp://ftp.infoscience ・ co ・ jp/pub/net/apache/dist/ ftp://ftp.lab.kdd.co.jp/infosystems/apache/dist/ ftp://mirror.nucba.ac.jp/mirror/Apache/ ftp://ftp.meisei-u.ac.jp/pub/www/apache/dist/ 表 2 PostgreSQL の代表的な国内ミラー FTP サイト ftp://ftp.jaist ・ ac ・ jp/pub/dbms/PostgreSQL/ ftp://ftp.sra ・ co ・ jp/pub/cmd/postgres/6.4/ ftp://ftp.u-aizu.ac.jp/dbms/postgreSQL/jp/6.4/ v6.4. tar. gz3 をもってくるか、表 2 に示した国内のミラー サイトから入手してください。 flex のパーションにラも意 PostgreSQL はコンパイル時に lex を使います。その 際、 GNU カ甘是供する lex である flex を使う場合はバージ ョンに注意してください。ノヾージョン 2.5.2 か 2.5.4 ↓淡十 . を使うようにする必要があります ( 2.5.3 は使えません ) 。 PostgreSQL 用アカウントの作成 絶対条件ではありませんが、できれは PostgreSQL 専 用のアカウントを作りましよう。私は、 postgres という 名前のユーサーを作るようにしています。 root では、デー タベースのインストールがうまくできません。 PostgreSQL のインストール インストール作業は PostgreSQL 専用のユーザーでお こなうことをお勧めします。 postgresql-v6.4. tar. gz を展開したら、 src/Makefile. custom というファイルを作り、次の 1 行を追加します。 MB=EUC_JP 続いて configure を実行すれは、コンパイルの準備か整 います。これも、 --prefix オプションでインストールする ディレクトリを指定できます。以下の例では、 /usr/local /pgsql にインストールするように指定しています。 % . /configure ——prefix=/usr/local/pgsql 3 去辭斤の postgresql-6.4.1. tar. gz を使ってください。インストール方 法などに変更はありません。 37
連載 / IJN Ⅸの玉手箱ー① 図 9 NIS マップ乍成 bash# cd /var/yp bash# make NIS Map update started 0 Ⅱ Fri Dec 18 17 : 04 : 33 JST 1998 for domain paradise ypservers . failed t0 send 'clear' tO 10Ca1 ypserv: RPC: Updating hosts . byname . failed tO send 'clear' t0 10Ca1 ypserv: RPC: new /var/yp/passwd file from /var/yp/master. passwd. Updat ing yp—mkdb : yp—mkdb : Creating yp—mkdb : yp—mkdb : yp—mkdb : yp—mkdb : Updating yp—mkdb : Updat ing yp—mkdb : Updating netid. byname . failed tO send 'clear' t0 10Ca1 ypserv: Updating hosts . byaddr. master master failed Updating passwd. byuid. failed Updating passwd. byname . failed tO send 'clear' tO 10Ca1 ypserv: tO send 'clear' tO 10Ca1 ypserv: tO send 'clear' tO 10Ca1 ypserv: . passwd. byname . failed tO send 'clear' tO 10Ca1 ypserv: . passwd. byuid. failed tO send 'clear' tO 10Ca1 ypserv: RPC : RPC : RPC : RPC : RPC : RPC : Program not registered Program not registered Program not registered Program not registered Program not registered Program not registered Program not registered Program not registered NIS Map update completed. bash# ■ か稼動するマシンが独自にもつべきパスワード情報を分け る必喫があるのです。 とはいっても、パスワード情報は暗号化されたパスワー ドを含むため、ソースファイルである /var/yp/master ・ passwd を自力で用意するのは困難です。そこで、 NIS バーカ醍供するパスワード情報は、 vipw コマンド などでいったん /etc/master. passwd に作成し、そのあ とで必要なエントリを /var/yp/master ・ passwd に移す といった方法を使えばいいでしよう。その際 / /yp 小、 /master. passwd には一般ユーサーのアカウントなど、 NIS を用いて共有したいものだけを一求します 7 。 なお、旧いパスワード形式である /var/yp/passwd は、 マップの作成時 (make の実行時 ) に /var/yp/master. passwd から自重加勺に生成されます。 Makefile のデフォ ノレトの言定では、 passwd マップ (/var/yp/passwd) の パスワード・フィールドはすべて * になります。 NIS クライアントがすべて FreeBSD8 であれは問題な いのですが、 FreeBSD 以外の NIS クライアントか存在 7 Solaris でも同様のことをしたければ、同しような MakefiIe と連用 ツールを作及すればよいでしよう。 8 より正確には、 "master ・ passwd によるシャドウ・パスワードをサポー トしている OS " です。 FreeBSD 以外では、 BSD/OS や NetBSD 102 などカ咄当します。 する工竟では、 passwd マップのパスワード・フィールド カ剛号化されたパスワードである必要があります。 passwd マップのパスワード・フィールドに暙号化され たパスワードを挿入するには、 MakefiIe 中の以下に示す 行の地寬こ付いている、 # " を削除します。 #UNSECURE = "True" すると、 make を実行してマップを作成する際、 /var/ yp/master. passwd ファイノレのノヾスワード・フィーノレド が /var/yp/passwd にそのままコピーされ、暗号化され たパスワードを含む passwd マップが自動的に作成され ます。 なお、 FreeBSD はパスワードの暗号化に MD5 を利用 していますが、その他の多くの OS は DES を利用して パスワードを暗号化します。したがって、このような OS の稼動するマシンが NIS クライアントに含まれる場合は、 NIS サーバーに国際版の DES パッケージをインストール し、すくなくとも NIS で共有するアカウントに関しては DES で暗号化されたパスワードに変更する必要がありま す。国際版 DES パッケージのインストールについては、 お里載の第 5 回 ( 1998 年 11 月号 ) を参照してください。 パスワード情報 ( およびするネットグルーフつ以外 UNIX MAGAZINE 1999.2
INTEG RATION ミングについて書かれた本の多くは、伊題に C を使ってい ドをリンクさせるのではなく、牛朱なスタブライプラリを る。 curses から M 。 tif にまで用いられている標準ライプ リンクさせて須勺な結合をおこなう。各ライプラリは 1 つ ラリは C のインターフェイスを備えている。 Windows の または複数の . DLL ファイルと関連している。プログラ コードも C で書くことかできる。 WindowsAPI は C か ムの実行時には、リンクしたスタブコードが DLL を探 ら呼び出すように書かれているし、多くの解説書も、 C の してロードする。正確には、 DLL のコードやデー . タをプ ソースコードを扱っている。 32 ビット Windows ( つまり ログラムのアドレス空間で利用できるようにする。すでに Windows 95 / 98 / NT ) の機能にアクセスするためのライ DLL がロードされている場合、アプリケーショ・ンはそれ プラリやヘッダファイルは、 W ⅲ 32 API をもとにしてい を使っているほかのアプリケーションとライプラリを共有 る。 VisuaI C 十十でインストールされるヘッダファイル する。 DLL を使うプログラムか残っているかぎり、 DLL を使えば、 Windows は C や C 十十で操作できるようにな はメモリから消去されない。 る。多くの場合、これは #ifdef プロックでその言語に特 COM (Cornponent Object Model) オプジェクト 有の機能を区別している。 W ⅲ 32 API のヘッダは C 十十 は、オペレーティング・システムに名前や位置などの清報 のクラスを定義していないが、 Visual C 十十にはⅥⅱ n32 をる当している DLL や実行ファイルである。 COM オプ API の鍵となる部分をクラスにもっオプジェクト・ライ ジェクトについての / 」難しい角見カヾ益れているが、そのせ プラリがある。 MFC (Microsoft Foundation CIasses) いで単純さと有用性か暖昧になっているのは残念だ。単純 は Windows の C 十十プログラミングの基本だ。面接で なのはよいことである。 COM はランタイムリンクよりも MFC に関する質問に答えることができないのなら、履歴 柔軟である。 DLL には、外部呼出しで DLL 中のシンポ 書の牛罸支欄に Windows C 十十プログラミングと書くのは ルを結びつけるためのライプラリが必要だが、 COM オプ やめたほうがいい。 ジェクトでは不要である。 CO オプジェクトはシンポル これから Windows プログラミングを学べることをあ とその型のリストをもっており、実彳郛に必要な清報を引 りがたく思うべきだ。 MFC は比較的最近の技術であり、 き出すための仕組みを内蔵している。 COM オプジェクト 複雑て気まぐれな W ⅲ 32 API を勉強する手間を省いて を利用するアプリケーションは、コンパイル時にライプラ くれる。 MFC 自体が巨大で複雑ではあるが、シンプルで リをリンクしておく必要はない。たんに、 Windows にオ 実用的な Windows アプリケーションを作るために必要な プジェクトとアプリケーションのリンクをイ嶽頁するだけで 労力と知識が MFC のおかげでかなり咸された。 MFC ある。この本来の意味でのランタイム結合により、型と引 については、あとでグラフィカル・プログラミングに挑戦 数のチェックをおこないつつも、驚くほどの柔軟性か得ら する際に紹介する。 れるようになる。 Microsoft は、ヘッダとライプラリを使う従来の DLL ではなく、 COM オプジェクトを使ってオペレーティン グ・システムを強化しようとしている。、、 Active"%{i ま こまで読んだところで、中級レベルの Windows プ る Windows 技術を調 , ヾてみると、たいがいは COM を ログラミングの本を買ったりすると、 UNIX にはないい 利用している。 DCOM (Distributed COM) は、 COM くっかの用語に頭を悩ますことになる。 オプジェクトをネットワーク用に拡張したもので、オプ ジェクトをリモートからロードしたり、間接的に使用する VisuaI C 十十でも、プログラムの外部関数の集まりで ことができる。 DCOM はまだ完全ではなく、 UNIX の ある . LIB ファイルをバインドする従来の手法が使える。 Remote Procedure Call よりも扱いにくい。しかし、今 だが、もっと効率的で広範に利用されているのが、 Win- 後は DCOM が Microsoft のリモート機能にアクセスす dows DLL (DynamicaIIy LoadabIe Libraries) を使っ るための標ま勺な手法になっていくだろう。 た重加勺な結合である。多くの UNIX てイ吏われている ld. so ランタイムリンカに馴染んでいるなら、 Windows DLL COM は Visual Basic のプログラムと低レベルで通 も問題なく使える。 VisuaI C 十十は、外部関数用のコー 信できるため、一般に VisuaI Basic 向きと考えられて 五ロ 用 87 UNIX MÄGAZINE 1999.2
INTEG RATION 吾やツールを追加インストールするにはさらにスペースが 開発をする場合は自分のコードの間違いを調べるためにラ 必要になる。困ったことに、 VisuaI Studio のエンター イプラリを参照することもある。 フライズ版には、開発者用の SQL Server など、館旨を Visual C 十十には、イ研鶤頁かのランタイム・ライプラリ 動かされそうなデータベースやクライアント / サーバー製 が伺属している。通常の開発では、マルチスレッドの共有 品が数多甦求されている。 SQL Server には心を惹かれ ライプラリさえあれは一ト分である。アプリケーションの配 るが、開発用マシンで生しるオーバーヘッドを考えると、 布を考えているなら、ランタイム・ライプラリを実行ファ 専用のマシンにインストールしたほうがいい。 イルに青勺にバインドする。こうすると、実行ファイルと VisuaI C 十十と VisuaI Studio は同しインストール・ いくっかのサポート・ライプラリではなく、 1 つのファイ プログラムを使う。新しいモジュールの追加は簡単にでき ルとしてアプリケーションを配布できる。ただし、物版 るので、初めは最小限のインストールにとどめておこう。 の Visual C 十十では肖勺バインドはできない。 Visual C 十十のインストールでは、標準インストールと オンライン・ドキュメントには、サンフ。ルのソースコー カスタム・インストールのどちらかを選択する。パッケー ドとチュートリアルが含まれており、 CD-ROM から参 ジの複雑さを考えれば、標準などないようなものだ。十分 照できる。ファイルをハードディスクに移せば、高速に な時間をかけてオフションを選んだほうがよい。 アクセスできるし CD-ROM ドライプを空けておけるが、 Microsoft の標準インストーラはすべての機能を階層的 かなりのディスクスペースか必要だ。ハードディスクにイ に表小する。尺した機能はチェックポックスを見れば分 ンストールするのは、よく使うものだけにしておいたほう かる。チェックしなけれは、その機能はインストールされ がいいだろう。 ない。チェックの付いたポックスが灰色なら、そのグルー プの機能のいくつかが、白ならすべての機能か〕尺されて IDE の機能 いることを示す。 インストーラの階層構造は、最初は分かりにくいかもし Visual C 十十の IDE ( 見在は VisuaI Studio の IDE れない。見れた Windows のツリー表示ではなく、構 と同し ) にはいいところも悪いところもあるが、徐々に進 造はフラットに表示される。そのグループロ尺可能な副 化してきている。コンパイラ、デバッガ、ドキュメント・ 機能があるかどうかは、機能グループ名 ( チェックポック プラウサ、コードエデイタ、プロジェクト・マネージャー スではない ) をクリックすれは分かる。 [DetaiI... ] ボタン のすべてを表示させるには、大きな画面 ( 最低でも 1 , 024 x 768 ) が必要だ。 VisuaI Studio の目標は、プロジェク がアクテイプになるときは、〕尺 - 可能な機能がある。イン ストーラはさらに複数の階層をもっている場合もある。 トの立ち上げから完了までをサポートすることだが、これ はほば達成されている。 チェックポックスは、すべて選択するかまったくしな いかのトグルスイッチになっている。グルーフ。のいくっか IDE は、かならすしも使う必要はない。 Visual C 十十 の機能を選択したあとで、灰色のチェックポックスをク には、コマンドラインのツールがひととおり含まれてい リックすると、すべてがクリアされてしまう。もとに戻す る。これらは UNIX と同し引数をとるわけではないが、 には、 [Detail... ] ボタンをクリックして 1 っ下の階層に サードノ、一ティーの UNIX ツールキット (Softway Sys- 移り、インストールしたいオプションをチェックするしか tems の OpenNT や Mortice Kern Systems の MKS TooIkit) を使えば、 VisuaI C 十十を cc のように扱うこと ができる。これらの製品を利用しなくても、 Visual C 十十 ディスクスペースを節約するには、おもに 3 つの j 尺 ではおⅧ染みの makefile かイ吏える。 Microsoft の nmake 肢がある。ソースコードとライプラリ、それにオンライン は make とまったく同しではないが、十分満足できる仕 ヘルフである。ライプラリのソースコードをインストール 上がりである。 IDE で makefile を生成したり、 makefile しておけばデバッグか楽になる。インストールしていない を IDE の専用形式て取り込むことができる。 と、ライプラリのコードはアセンプリ言語で表示される。 簡単なプログラミングであ川題にならないが、凝った VisuaI C 十十による開発の詳細はあとで詳しくとりあ 一三ロ 85 UNIX MÄGAZINE 1999.2
図 4 メールの言 ( その 3 ) 外部のメールサーバー : POP ファイアウォール 図 5 メールの言 ( その 4 ) fetchmail ー POP ーロ /var/mai1/userB /var/mai1/userA 外部のメールサーバ ファイアウォー popclient ロロロロ 4 ) 。ファイアウォール・ホスト上で、 POP の通信を中継 するフロキシー・サーバーを運用する必要がありますが、 この力法も作業的には簡単です。 「セキュリティ的なリスクを負うのは嫌ゃな。せやけど、 自分宛のメールはやつばり手許に酉当してもらわんと」 ちょっと手間はかかりますが、この方法も実現できま す。外部のメールスフール・サーバーから pop でメール をダウンロードし、そのメールを内部のメールスプールに 書き込みます ( 図 5 ) 。 通常の POP クライアント・フログラムは、ダウンロー ドしたメールをユーサーのメールポックスに書き込みます が、 fetchmail や popclient を利用するとダウンロードし たメールをメールスフールに書き込むことができます。し かし、あくまでも POP なので、外部からメールカ艚当医さ れるわけではありません。内部から、一定時間おきにこれ らのプログラムを実行する必要があります。しかし、電子 メールにはリアルタイム性を求められないので、大きな間 題は生じないでしよう。この方法を利用する場合、ファイ アウォール・ホスト上では、 POP の通信を中継するプロ キシー・サーバーを運用する必要があります。 POP を使用する方法では、外部からメールを受信する UNIX MAGAZINE 1999.2 内部のメールサーバー /var/mai1/userA /var/mai1/userB ロ ロロロ 必要がありません。したがって、サーバーを不正中継に ロ 27 メールの送信にもコストとリスクが発生します。受信用 を決定します。 電子メールの内部から外部への送信を許可するかどうか 電子メール週言の可否 る価値は十分にあるでしよう。 このようなサービスの利用も、 1 つの j 尺肢として検討す いる ISP (lnternet Service Provider) もあるようです。 ればなりませんが、現在ではこの種のサービスを提供して ルスプール・サーバーは、信頼のおけるところを選はなけ いのて堂々と文句を言うことができます。もちろん、メー プール・サーノヾーに障害カ起きても、こちらの責任ではな のこうのと心配する必要もありません。さらに、メールス を受信してくれるので、 MX (Mail eXchanger) がどう いるあいだも、外部のメールスプール・サーバーがメール です。しかも、停電などで自サイトのサーバーかイ亭止して の侵入など ) を受けたりする可能生がなく、かなりお勧め 利用されたり、サーバーの遠巣作による攻撃 ( 外部から
ロプログラミング・テクニック 公開鍵暗号 多治見寿和 ネットワーク経由で ~ 里 図 1 ローカル telnet ソケット TCP/IP ハードウェア 前回は、ネットワーク経山でログインする際にパスワー ドするワンタイム・パスワードの仕組みを紹介しま した。このオ対冓では、パスワード・ファイルの場合と同様 に、一方向関数を用いてパスワードを暗号化します。ただ し、関数の適用回数に工夫を施してネットワーク経由のロ グインの安全性を高めています。ネットワーク上を流れる パスワード情報はかならす暗号化されるため、ネットワー クか覗き見されていても安全です。さらに、このパスワー ドは 1 回しか使えないので、同し情報を用いて再隻ログイ ンすることはできません。 今回は、ネットワーク経由でログインするときに使われ を守るようにすれば、情報の不鶤頁にかかわらす安全に作業 る暗号化について説明します。 を進めることができます。 ネットワーク経由の処理には、すくなくとも 2 つのフ ログラムが介在します。 1 つは目の前にある ( ローカルな ) 計算機 - E て動くプログラムで、ユーサーカ髞作します。た とえば、適隔ログイン時に使う telnet コマンドなどがそ 前回とりあげた S/Key では、パスワードを暗号化する うです。もう 1 つはサービスを提供する telnetd などの ことによって一隻していました。しかし、守らなけれはな フログラムで、ネットワークの向こう側にある ( リモート らないのはログイン時にやりとりされる情報だけではあり の ) 言 1 ・算機ーヒて動くものです。 UNIX では、これらのフロ ません。ログインしたあとも、重要な情報がネットワーク グラムはソケット (socket) というイ目みを介してネット 上を流れることがあります。たとえは、ネットワーク経由 ワークを利用します。ソケットは TCP/IP を使い、さら で竹喋をしているときに管理者の権限が必要になったとし に TCP/IP は Ethernet インターフェイスなどのハード ます。このような場合、そのまま su コマンドを実行する ウェアを用いて実際の通信をおこないます ( 図 1 ) 。 と、スーパーユーサーのパスワードがネットワーク上を流 れてしまいます。企業秘密などか書かれたメールをやりと この図は説明のために簡略化してありますが、重要なの りするのであれは、これも守らなければなりません。 はいくっかの要素カ啾み上げられている点です。各要素が 互いに上下の要素とやりとりすることにより、結果的に通 su コマンドは、前回紹介した OPIE などのワンタイ 信が - 可能になります。・ - ドイ則の要素とのあいだで受け渡され ム・パスワードを利用したものを使えはいいでしよう。 る情報は、対応するレベルの要素と妾やりとりしている 子メールについては、 PGP (Pretty Good Privacy) な とみることもできます。つまり、左イ則の telnet は右側の どでイ描隻できます。しかし、このように個々に対応してい telnetd と、左側のソケットは右側のソケットと、左側の たのではきりがありません。通信路を流れるすべての情報 リモート telnetd ソケット TCP/IP ハードウェア 通信路の保護 62 UNIX MAGAZINE 1999.2
連載 / WWW サーパーの育て方一① リスト 1 カレンダー・テーカレを作成する SQL 文 CREATE TABLE schedule ( date date , begin—time time , end_time time , description varchar(80) , 6 5 4 3 2 1 ァータベースの準備 note varchar ( 80 ) ・予定の言岩田 ・予定の概要 ・終了時刻 開始時刻 ・日付 考えられます。 ダーは、以下の要素から成り立つレコードの集合であると ますは、基本言気 t を石忍しましよう。ごく単純なカレン 40 テープルが作成されます。 あとは、プロンプトにリスト 1 の SQL 文を入力すれは calendar=> % /usr/local/pgsql/bin/psql calendar ス名を指定します。 います。 psql のオプションとして、接続するデータベー greSQL のフロントエンド・プログラムである psql を使 る SQL 文がリスト 1 です。テープルの作成には、 Post- ルを作成しましよう。さきはど言気 t したテープルを作成す 続いて、この calendar というデータベースにテープ % /usr/local/pgsql/bin/createdb calendar という名前のデータベースを作成しています。 っューサーで実行してください。以下の例では、 calendar 用います。このコマンドは、データベースの伽限をも データベースの作成には、 createdb というコマンドを りません。 ろですが、その前にデータベース自体を作成しなければな タベース上に作成することにしましよう。といいたいとこ す。ではさっそく、上記の条件を満たすテープルをデー となってきますが、とりあえすは考慮しないことにしま ほかにも、ユーザーやレコードの書換え念などが必要 登録フォームを作ってみる 登録フォームには次の項目を入力できるようにします。 UNIX MAGAZINE 1999.2 を介しておこないます。 以降のデータベースに対する操作は、このオプジェクト $conn = Pg: : connectdb ("dbname calendar") ; います。 以下の例では、 calendar というデータベースに接続して べースに接続できなかった場合には、 undef カります。 ことで、接続済みのオプジェクトを取得できます。データ Pg モジュールは、 connectdb という関数を呼び出す Pg モジューノレ $cgi—>param ( 'year' ) 以ドの例は、 year という変数の値を参照しています。 名をなえることで、変数名に対応する値カ陬り出せます。 POST されたデータは、 param というメソッドに変数 $cgi = new CGI ; 生成して使用します。 CGI モジュールは、 new によってそのオプジェクトを CGI モジュール に登録するというものです。 け取り、 Pg モジュールを使ってその清報を PostgreSQL CGI モジュールでフォームから POST されたデータを受 リプト (regist-cal) がリスト 3 です。おおまかな言気 f•は、 このフォームの ACTION として指定されているスク 出力しているだけなので説明は不要でしよう。 ュールを使っている以外は、フォームのための HTML を ( リスト 2 ) 。日付情報を取得するために DateManip モジ 付のデフォルト値を自重加勺に入力するようにしてみました もかまいません。しかしせつかくなので、フォームの日 登録フォームは、いわゆる普通の HTML ファイルで ・予定の概要 ・終了時刻 ・開女都学刻 ・予定の日付
連載 /UNIX Communication N0tes 図 1 S/KEY でのやりとり host: vax UserlD SUglNl-I Count and Seed 29 vaxl 5 One-Time Password cat sun gaur tuft noun soon 4. システム側では、送られてきた一 1 ( t ) をもとにして S/KEY / げ " ー 1 の ) = のを引算する。 メッセージ・ダイジェストを用いた代表的なシステム 5. システム側で事前に計算した / れ (s) と、ユーサーから に、 Bellcore が開発した S/KEY [ 5 , 6 ] がある。 S/KEY 送られてきた値をもとに計算した ff(t) の値を上交す は、次のような構成になっている ( 図 1 ) 。 る。比較した 2 つの値が一致していれば、システムとユ ・ Secure Hash 関数に MD4 を使う。 ーサーは同一のパスフレーズを知っていることになり、 ・パスフレーズ s には、 seed と特定の文字列をつなげた ログインを許可する。 ものを使う。これは UNIX パスワードてイ月している l(s) を記 6. 次のログインのために、システム側では工 ソルトと同しで、特定の文字列 ( パスフレーズ ) を変更 録しておく。 しなくても、 seed を変えるだけで生成される系列も変 このオ冓を利用すると、次のようになる。 更できる。 ・システム側からは challenge として、れ一 1 と seed を この値か漏 ・システム側で fn(s) を言当求しているので、 与・える。 洩してもパスフレーズ s 隹測は難しい。 ・計算結果は、直だけでなく、共通の辞書に定義された ・ユーサー側でー 1 ( のの言算を安全におこなえは、パ 複数の単言リとしても表現される。これを結果として与・ スフレーズ t ( 正しければ s と一致 ) か漏洩することは えてもよい。 ・システム側では、一記の単言リを言求している。 ・ユーザー側からシステム側に送られる工 " 1 のを盗聴 しても、パスフレーズ t ク隹測は難しい。 S/KEY の特徴は、 Secure Hash 関数の言算結果が、 ・ / " ー 1 のから ff(t) を言算するところではパスフレー S/KEY の辞書で定義された単語を用いて表現されている ズ t は不要なので、安全に言算できる。 点である。 S/KEY を開発した Bellcore は、実装プログラムを無 つまり、ほかのユーザーがログインしていないラップ 料で配布したため、多くのサイトで S/KEY が運用され トップ PC 、あるいはパームトップ PC などで安全生に るようになった。 S / KEY のパッケージは、 注意して言 1 ・算すればよい。 ・ ftp://ftp.bellcore.com/pub/nmh/skey/ ノート 11 ログイン時にシステム側からなんらかの値をえ、その値 から入手できる。このパッケージは、 UNIX のログイン をもとにユーザー側で事前に合意しておいた演算を実行し、そ プロセスで使われる /usr/ucb/login を置き換えるプログ の結果をシステム側に送り返してログインの可否を判断する仕 ラムと、いくつかのユーティリテイから構成される。構造 組みを challenge-response 方式と呼ぶ。 UNIX MAGAZINE 1999.2 20
連載 / UN Ⅸの玉手箱ー① 図 8 NIS マップのソースファイルの言聢部分 (/var/yp/MakefiIe) ETHERS BOOTPARAMS= HOSTS NETWORKS PROTOCOLS RPC SERVICES GROUP ALIASES NETGROUP PASSWD # ethernet addresses ( f0 て rarpd) $ (YPSRCDIR) /ethers $ (YPSRCDIR) /bootparams # fo て booting Sun boxes (bootparamd) $ (YPSRCDIR) /hosts $ (YPSRCDIR) /networks $ (YPSRCDIR) /protocols $ (YPSRCDIR) /rpc $(YPSRCDIR)/services $ (YPSRCDIR) /group $ (YPSRCDIR) /aliases $ (YPDIR) /netgroup $ (YPDIR) /passwd . if ! defined (MASTER—PASSWD) MASTER . else MASTER . endif YPSERVERS PUBL 工 CKEY NETID AMDHO ST $ (YPDIR) /master. passwd = $ (MASTER_PASSWD) $(YPDIR)/ypservers # List of a11 NIS servers for a domain $ (YPSRCDIR) /publickey $ (YPSRCDIR) /netid $ (YPSRCDIR) /amd. host # List 0f maps that are always built . # If you want to omit some of them, fee1 free tO comment # them out from this 1ist . TARGETS= servers hosts networks protocols rpc services group #TARGETS + = aliases /etc 、 /var/yp に設定されているので、各マップとソース ファイルの対応は表 1 のようになります。 SoIaris ではや や異なります。詳しくは MakefiIe を参照してください。 しつにさまざまなマップがありますが、実際にはすべて のマップが作成されるわけではありません。図 8 の最後に ある TARGETS 変数で指定されたマップはかならす作成 されますが、それ以外はソースファイルが存するマップ だけカイ乍成されます。したがって、デフォルトの状態では 以下のマッフ。が作られることになります。 ypservers hosts networks protocols rpc servlces group デフォルトで作成されるマップのうち、 ypservers マ ップには NIS のスレープサーバーを登録します。今回は マスターサーバーのみを構築しますが、ソースファイルで ある /var/yp/ypservers を用意しておかないと make が 実行できません。こでは、 touch コマンドを使って空 UNIX MAGAZINE 1999.2 の /var/yp/ypservers ファイルを作っておきます。 bash# touch /var/yp/ypservers bash# ロ ypservers マップは、 Makefile の TARGETS 変数 では、、 servers" というキーワードに対応しているので、空 のソースファイルを作る代わりに TARGETS 変数から servers" を削除することもできます。 パスワード情報のマップ デフォルトの状態で作られるマップのなかには、パス ワード 1 青報に関するマッフ (passwd と master. passwd) がありません。これらのソースファイルは / etc ではなく /var/yp の下にあることを想定しているため、デフォル トの状態では作成されません 6 。 /etc/master ・ passwd を使わないのは、このファイル に NIS サーバーのスーパーユーサー (root) やシステムの アカウントが登録されているからです。また、 NIS サー ーにだけ独自のアカウントを設定したい場合もありうる ので、 NIS て才是供するパスワード情報と、 NIS サー 6 Solaris の場合は /etc/passwd と /etc/shadow を参照します。 101
連載 / IJN Ⅸの玉手箱ー① 図 1 inetd のみを用いた場合 ホスト A FreeBSD の場合、 OS 本体にはイ寸属しておらす、バイ ナリ・パッケージとして提供されています。そこで、まず はバイナリ・パッケージを FreeBSD マシンにインストー ルするところから始めましよう。 バイナリ・パッケージのインストール tcp-wrappers のノヾイナリ・ノヾッケージは FreeBSD の CD-ROM に鸞求されています。ファイル名は tcp- wrappers-7.6. tgz です。 CD-ROM の構成によって多 少違うかもしれませんが、 CD-ROM を /cdrom にマウ ントした場合は /cdrom/packages/All に置かれている 、はすです 1 。 〇 バイナリ・パッケージは FreeBSD 関連の FTP サイ トからも入手できます。国内であれは、 ・ ftp://ftp[1-6].jp.freebsd.org/pub/FreeBSD/ packages-stable/AII/ などにあるので、 FreeBSD の CD-ROM が手許にない 場合はこちらから入手するといいでしよう。 こでは、ノヾイナリ・ノ、ツケージを / tmp に置いたこと にします。インストールは、バイナリ・パッケージのイン ストーラである pkg-add を実行するだけで自重加勺におこ なわれます。図 3 のように、 、、一 v " オプションを付けると ともできます。 インストールの様子か詳しく表示さプログラム・ファ tcp-wrappers の最新バージョンは 7.6 です。国内で イルのほか、ライプラリやオンライン・マニュアルなどが は、以下に示す FTP サイトなどからソースパッケージ どこに置かれるのかが分かります。 (tcp-wrappers-7.6. tar. (z) が入手できます。 以 E ぞインストールは完了です。しかし、このままの状 ・ ftp://ftp.jpcert.or ・ jp/pub/security/tools/ 態ではインストール前と何も変わりません。 tcpd の機能 tcp-wrappers/ を利用するには、すくなくとも以下の設定が必要です。 ・ ftp://ftp.win.or ・ jp/pub/network/security/ ・ (inetd カ甘是供する ) どのサーピスに対して tcpd を適 tcp-wrappers/ 用するか。 ・あるサービスに対して、 tcpd をどのように動作させる BSD/OS に付属の tcp-wrappers は、ノヾージョン 7.3 をもとに BSD/OS 独自の拡張が施されたものです。具 ー勺には、、、 nolog" および、、 exec" というオプションか 前者は inetd の設定ファイルである /etc/inetd. conf 加されています。詳しくは、 BSD / OS のオンライン・マ を編集し、特定のサービスに対して tcpd を起動するよう ニュアル hosts-options(5) などをご覧ください。機育顎勺 に変更します。後者は tcpd が参照するアクセス制御デー には肄 i バージョンとあまり変わりませんが、必要であれ タベースを作成し、アクセスを許可 ( あるいは拒否 ) する は・ソースパッケージを入手してインストールするといいで ホストを設定します。 しよう。去斤バージョンは BSD/OS にも対応している 1 これと異なる場合は、 "packages" というサプディレクトリを探してみ ので、すんなりコンパイルできます。 てください。 fingerd i netd ホスト B telnetd 図 2 inetd と tcp-wrappers を組み合わせた場合 ホスト A tcpd ftpd i n etd ホスト B telnetd アクセス制御 テータベース アクセスログ 93 UNIX MAGAZINE 1999.2