local - みる会図書館


検索対象: UNIX MAGAZINE 2004年9月号
22件見つかりました。

1. UNIX MAGAZINE 2004年9月号

■ SFU の活用 [ 02 ] 図 18 GNU make と PostgreSQL の取得から導入までの手偵 $ make check $ make . /configure cd make—3.80 tar —zxf -/make—3.80—interix ・ tar. gz cd /tmp/compile $ wget ftp://ftp.interopsystems.com/src/gmake/make—3.80-interix.tar ・ gz —with—libraries=/usr/local/lib ——with—openssl=/usr/local/ssl ——with—CXX ——with—gnu—ld \ —enable—locale —enable—multibyte —with—includes=/usr/local/include \ $ . /configure ( 図 21 のように追記する ) $ ng src/interfaces/libpq/fe—misc . c ( 図 20 のように 404 行目を変更する ) $ ng src/backend/libpq/pqcomm. c ( 図 19 のように一 static を削除する ) $ ng src/bin/psq1/Makefi1e $ cd postgresq1-7.2.2 $ tar —zxf -/postgresq1—7.2.2—interix. tar. gz $ cd /tmp/compile $ wget ftp: //ftp. interopsystems . com/src/postgresq1/postgresq1-7.2.2—interix. tar ・ gz $ cd $ make install ( ロードアベレージの取得には失敗するが問題はない ) Regressin PASSED: GNU Make 3.80 (i386—pc-interix3) build with gcc [check—loadavg] E てて or 1 (ignored) make [ 2 ] : Error getting load average : Undefined error : 0 . /loadavg The GNU load average checking code thinks : [check—loadavg] Error 127 (ignored) make [ 2 ] : make [ 2 ] : uptime : Command not found uptime The system uptime program believes the 10ad avarage tO be : No Fai1ures 78 Tests Comp1ete —enable—syslog $ make (GNU rnake (/usr/local/bin/make) を使用する ) $ make install 態がありますが、 こではバックエンドのデータベースに PostgreSQL を使用することにします (MySQL やファ イルを用いた簡易 DB も使用できます ) 。 PostgreSQL の導入 ■ PostgreSQL は、フリーの強力な RDB サーバーです。 これも移植版が Tool Warehouse に公開されているので、 そこから取得してください。 PostgreSQL をビルドする 164 には、 SFU に添付されている make ではなく、 GNU make が必要になります。これも Tool Warehouse で公開され ているのであわせて入手します。導入は、 GNU make 、 PostgreSQL の順になります ( 図 18 ) 。 ただし、 Tool Warehouse で公開されている Post- greSQL は、バイナリ・パッケージをインストールしてサー バーを動作させることはできても、データベースに接続で きません。移植カ坏完全なのです。それどころか、ソース UNIX MAGAZINE 2004.9

2. UNIX MAGAZINE 2004年9月号

■ SFU の活用 [ 02 ] 図 22 ~/. bashrc と ~/. cshrc の言聢例 ( 下線部分を追言 LD-LIBRARY-PATH の言のみを抜粋 ) ・ /. bashrc LD—LIBRARY_PATH=/usr/10ca1/pgsq1/1ib: /usr/local/ssl/lib: /usr/1ib:/usr/X11R6/1ib: /usr/local/lib: - /usr/local/canna/lib export LD-LIBRARY—PATH ( 再読込みの操作 ) ~ / . bashrc ・ /. CShrc setenv LD—LIBRARY—PATH /usr/local/pgsql/lib: /usr/local/ssl/lib:/usr/lib : /usr/X11R6/1ib: /usr/local/lib: /usr/local/canna/lib ( 再読込みの操作 ) % source ~ / . cshrc 図 23 PostgreSQL の設疋 $ mkdir /usr/local/pgsql/data $ /usr/local/pgsql/bin/initdb —D /usr/local/pgsql/data The files belonging to this database system i11 be owned by use " f00 " ThiS user must alSO own the server process . Fixing permissions on existing directory /usr/local/pgsql/data/. creating directory /usr/local/pgsql/data//base . ok creating directory /usr/local/pgsql/data//global. ok creating directory /usr/local/pgsql/data//pg-xlog ・ ok creating directory /usr/local/pgsql/data//pg-clog ・ ok creating directory /usr/local/pgsql/data//base/l . ok creating templatel database in /usr/local/pgsql/data//base/l . creating confguration files . ok initializeing pg—shadow. ok enabling unlimited ro size for system tables . creating system views . ok loading pg—description. ok vacuuming database templatel . copying templatel t0 templateO . ok Success . You can now Start the database server using : /usr/local/pgsql/bin/postmaster —D /usr/local/pgsql/data/ /usr/local/pgsql/bin/pg-ctl —D /usr/local/pgsql/data/ ー 1 logfile start $ /usr/local/pgsql/bin/pg—ctl —D /usr/local/pgsql/data ー 1 /var/adm/log/postgres ・ 10g start ( データベース・サーバーを起動する ) postmaster successfully started. $ /usr/local/pgsql/bin/createdb foo ( データベースを作成する ) CREATE DATABSE $ /usr/local/pgsql/bin/psql f00 ( データベースにアクセスを試みる ) WeIcome tO psql , the PostgreSQL interactive terminal ・ Type : \copyright for distribution terms \h for help with SQL commands \ ? for help 0 Ⅱ internal slash commands \g or terminate with semicolon tO execute query \q t0 quit f00 = # ( データベースのスーパユーザーはプロンプトが、 # " 、一般ユーザーは、〉 " になる ) ok ok ok ok 166 UNIX MAGAZINE 2004.9

3. UNIX MAGAZINE 2004年9月号

連載 / 旧ルーティング 図 9 MED 図 10 LOCAL-PREF AS X AS X AS Z MED 500 MED 100 AS Y AS Y LOCAL_PREF 50 AS X の MED は取り払われる一 LOCAL_PREF は - 取り払われる ASY の MED が設定されるか、 MED なし 100 で経路を受信します。その結果、 Y から X へのトラ 接続にそれそれ適用されます。 Y では、 MED より上位の フィックは、 LOCAL-PREF の値がより大きい Z 経由 選択基準ではどちらも同じ優先度となったため、 MED の の経路を使って送信されます ( 図の太線矢印 ) 。 LOCAL- 値を比較し、値のより小さい右側の出口を最善経路として PREF は AS 内部で利用するものなので、 Y がさらにほ 選択します。 Y は、この経路をほかの AS にイ番する際、 かの AS に糸各を番するときは、この属性は糸登各から取 X の MED を削除してイ番します ( 図の下部 ) 。 り払われます ( 図の下部 ) 。 こで、 ASY は ASX への糸各として、遠回りの AS LOCAL-PREF 属性 Z 経由の経路を選択している点に注意してください。これ Local Preference の略で、、、自 AS 内部での優先度を は、 AS X と AS Z とのあいだにどれほどの AS が介在し 設定する " ための数値です。 EBGP で受信した経路には、 ていても ( つまり、どれほど遠回りであっても ) 実現できま すべて LOCAL-PREF の値が設定されます。この値の す。このことから、前述したように、、 LOCAL-PREF を 大小を比較し、自 AS 内での優先度を設定します。 LO- 利用すれば、トボロジーに左右されない経路選択が実現で CAL-PREF は 1 つの AS の内部に閉じたものであり、 きる " といえます。 経路をほかの AS に広告する (EBGP の出力 ( 送信 ) の ) 際には、すべて取り払われます。 今回は、パスペクタ型ルーティング・プロトコルである ほかの複数の AS から同じ終点への糸各を受信した場合 BGP の概要を紹介しました。次回は、 BGP に関連する は、ます LOCAL-PREF によって比較します。これは、 その他の技術と、 Zebra における BGP の設疋について説 AS パスリスト長による比較の前におこなわれます。 LO- 明する予定です。 CAL-PREF による比較で糸各が選択できれば、 AS パス ( おはら・やすひろ WIDE プロジェクト ) リスト長や MED による比較はおこなわれないため、強 い優先度だといえます。 LOCAL-PREF では、 (MED [ 赭文献 ] で小さい値が優先されるのとは逆に ) 高い値が優先されま [ 1 ] Y. Rekhter and T. Li Bo er 、 G 観 e 囮 0 リ Protocol イ (BGP-%), RFC1771 , March 1995 す。 AS パスリスト長よりさきに比較されるため、 LO- [ 2 ] R. Chandra, T. Bates, Y. Rekhter and D. Katz, CAL-PREF ではトボロジーに左右されない優先言が実 れ襯ゆ rotoco / Extensions ル 7 、 BGP-%, RFC2858 , June 現できます。 2000 LOCAL-PREF の例を図 10 に示します。 AS Y は、 [ 3 ] T. Bates and R. Chandra, BGP 月 0 れ te . Re ガ ec 0 れれ AS X への糸各を AS X と AS Z から受信します Y は 7 、れ加 e 和″ mesh IBGP, RFC1966 , June 1996 x ~ のトラフィ、 , クを z 経由で送信した 0 、と 0 、うリシー をもっているため、 X 側 BGP スピーカでは LOCAL- PREF 50 で、 Z 側 BGP スピーカでは LOCAL-PREF LOCAL_PREF 100 ☆ 52 UN 工 X MAGAZINE 2004.9

4. UNIX MAGAZINE 2004年9月号

図 3 OpenSSL の取得と導入の手順 $ wget ftp://ftp. interopsystems. com/src/openssl/openssl-().9.7d—interix.tar.gz $ cd /tmp/compile $ tar —zxf -/openss1-0.9.7d-interix. tar ・ gz $ cd openss1—O.9.7d $ ng Configure ( 図 4 の修正を加える ) $ LANG=C . /config shared zlib—dynamic $ make $ make test compiler : options : platform: built 0 Ⅱ : make[l] : gcc -DOPENSSL_THREADS -D—REENTRANT —DDSO_DLFCN —DHAVE_DLFCN_H —DOPENSSL_NO_KRB5 - bn ( 32 , 32 ) md2(int) rc4(ptr,int) des(ptr,risc1,16. long) idea(int) blowfish(idx) InterixMT—gcc Mon Ju1 5 20 : 22 : 18 JST 2004 Open SSL 0 . 9 . 7d 17 Mar 2004 Leaving directory C/tmp/compi1e/openss1—O . 9 .7d/test ' $ make install ( 上記のような出力があり、エラーがなければ問題はない ) OPENSSLDIR: "/usr/local/ssl" —D_ALL_SOURCE -DL_ENDIAN -DTERMIOS ー 02 -Wa11 図 4 552 : 図 5 "lnterix¯gcc" 'gcc : ¯l/usr/local/include —D—ALL—SOURCE —DL—END 工 AN —DTERMIOS ー 02 —WaII : : , 551 :#lnterix OpenSSL の Configure 窈修正箇所下線部おロ ) (unknown) : ー 1d1 : . so . *$(SHLIB_MAJOR) . *$(SHLIB_MINOR) " :dlfcn: interix—gcc—shared: gcc : ¯l/usr/local/include ¯D—ALL—SOURCE ¯DL—ENDIAN ¯DTERMIOS ー 02 —Wa11 : : , 553 : "InterixMT—gcc" -D_REENTRANT : : ー 1d1 : . so . *$(SHLIB_MAJOR) . *$(SHLIB_MINOR) " : dlfcn: interix-gcc—shared: ~ /. bashrc と ~/. cshrc の言例下線部分を追言 LD-LIBRARY-PATH の言のみを抜粋 ) . bashrc LD_LIBRARY_PATH=/usr/IocaI/ssI/Iib: /usr/lib: /usr/X11R6/1ib: /usr/local/lib: /usr/local/canna/lib - setenv LD—LIBRARY_PATH /usr/local/ssl/lib: /usr/lib: /usr/X11R6/1ib : /usr/local/lib : /usr/local/* ・ /. CShrc export LD—LIBRARY_PATH canna/lib ure を実行せす、生成済みの Makefile を使うように " と書 いてあるので、そのようにします 3 なお、現在の SFU の getpwnam() システムコール の実装にはバグがあり、ユーザーのホーム・ディレクトリ を正しく認識できない (lnterix の getpwnam() 関数は pw-dir に対してつねに、、 / " を返す ) ので、 OpenSSH が これを利用している部分を修正しておきます。そうしない と、リモートからのアクセス要求に対して、適切な autho- 3 ftp://ftp.interopsystems.com/src/openssh/ README. lnterix 0 UNIX MAGAZ 工 NE 2004.9 rized-keys を参照できないからです。修正するファイルは auth. c のみで、変更点を図 6 に示します。この変更はホー ム・ディレクトリが /dev/fs/C/Documents and Set- t ⅲ gs / くユーザー名〉であることを前提にしています。 図 6 のなかで、 strchr(pw- 〉 pw-name, ' 十 ' ) " のようにし ているのは、 SFU がローカルのアカウントに対して、、マシン名十 ューザー名 " ( あるいはドメイン名十 ) というかたちでユーザー名 を作成する場合があるためである。、マシン名十 " の部分を削除し ないとホーム・ディレクトリが得られないので、このような操作 をする。 ActiveDirectory で管理されているユーザーの場合は 157

5. UNIX MAGAZINE 2004年9月号

■ SFU の活用 [ 02 ] 自ーさせるサービス SFU はいちおう、、 UNIX もどき " なので、デーモンを動作さ せることができます。デーモンは、 init か起動されるタイミング で、 /etc/rc2. d の下をみて起動されます。 rc2. d だけがあるこ とから、 SFU はつねにランレベルが 2 扱いなのだということカ貘 然と想像できます。それはさておき、 rc2. d の下にあるファイル は、すべて /etc/init. d の下にあるスクリプトへのシンポリック・ リンクです。 init の走」時には S で始まる名前のファイルを、終 了時には K で始まる名前のファイルをそれぞれ start と stop という引数電乎び出し、デーモンの走力と終了をおこないます。 今回導入したもののうち、 sshd はⅲ etd 経由で明」させること にしたので、とくに何かをする必要はありませんが、 PostgreSQL と Apache は自動的に起動してくれないと不便です。 ・ PostgreSQL 走カ用スクリプト # ! /bin/sh if [ $ # —lt 1 ] ; then echO "usage : $ 0 start ー stop exit 0 /usr/local/pgsql/bin/pg—ctl 号ー -D /usr/local/pgsql/data ー 1 /var/adm/log/postgres .10g $ 1 & & echo "PostgreSQL $ 1 " exit 0 図 30 データベースのイ乍成 $ createuser bar そこで、簡単なスクリプトを作ってⅲ it. d に置き、 rc2. d から シンポリック・リンクを張って自動起動のイ中間に入れてしまいま しよう。どちらも起動用のコマンドが用意されているので、やる ことは単純です。 start/stop を受け取ったら、それをコマンド に渡すだけです。 PostgreSQL 用のスクリプトと、 Apache 用のスクリプトを 以下に示します。 あとは、それぞれ S40postgresql 、 K52postgresql 、 S42 httpd 、 K50httpd などという名前で /etc/rc2. d からシンポ リック・リンクを張れば完了です。もちろん、スクリプトの本体 は chmod a 十 x で実行ビットを立てておくことを忘れないでく ださい。 ・ Apache 走カ用スクリプト # ! /bin/sh if [ $ # -lt 1 ] ; then echO "usage : $ 0 start ー stop' exit 0 /usr/local/apache/bin/apachectl $ 1 - & & echo "httpd $ 1 " exit 0 S a11 the new user be allowed to create database? (y/n) y ShaII the new user be allowed to create more new users? (y/n) n CREATE USER $ /usr/local/pgsql/bin/createdb —U bar barmt CREATE DATABASE 図 31 /usr/local/apache/mt/. htaccess の内容 く FiIes mt . cfg> く Limit GET> Deny from a11 く /Limit> く /Fi1es> こまでの作業が完了したら、プラウザから http:// localhost/mt/mt-load. cgi にアクセスして、システムを 初期化します。 何も問題がなければ、図 33 のような画面になります。問 題があれば図 34 のようにエラーが表示されるので対処し てください。工ラーの原因は、 mt. cfg の記述ミスや、必 要な Perl モジュールの欠如、データベースカ在しない 170 などではないかと思います。 図 32 534 : 535 : 536 : /usr/local/apache/conf/httpd.conf の修下点 下線部おロ ) く IfModu1e mod_alias . c> A1ias /mt/ /usr/local/apache/mt く Location /mt> Options ExecCGI AIIowOverride None く /Location> 初期化がすんだら、 /usr/local/apache/mt/mt-load. cgi を削除して、今度は http://localhost/mt/mt.cgi に アクセスします。すると、図 35 のような画面が表示される はずです。 こで、ユーザー名に MeIody 、パスワードに Nelson UNIX MAGAZINE 2004.9

6. UNIX MAGAZINE 2004年9月号

ed によるバッチー 今回は、 Movable Type の *. cgi ファイルの修正に ed を 使いました。 ed はラインエデイタですが、ラインエデイタなんて いまどき使わないと考える人も多いと思います。しかし、既存の ファイルに対して機械的に修正を加えるときなどは、図 28 のよ うにかなり強力です。今回の作業は、 13 個ある *. cgi から 1 つ (mt-db-pass. cgi) を除き、 : 頁行の Perl のパスを変更すると 図 28 Movable Type の展開 ( 下線部が入力 ) 1 引 /usr/bin/perl l/usr/local/bin/perll cat > /tmp/perl . patch inflating: Iib/MT/118N. pm $ unzip &/118N. zip cd MT—3.0D—fu11—1ib-ja—b3 $ unzip -/MT-3.0D-fu11-1ib—ja—b3. ZIP cd /tmp/compile > ed ${cgi} く /tmp/perl ・ patch $ fo て cgi in ( ls * . cgi ( ; do AD ( Ctrl 十 D で終了 ) 742 > done 9 : Defau1tLanguage ja ( デフォルトでこうなっている ) 図 29 mt. cfg の最 ( 邸艮おこなうべき言下線部のように編集 ) いうものです。そのような作業も、正規表現による置換の指定で 簡単にできるのです。 ed を対話的に使う場面はたしかにほとんどありませんし、・麦 もそうあるとは思えませんが、このように何かを一括して処理する 場合には強力なツールだと思います。、 man ed" とすれば使える 編集コマンドの角が見られます。参考にしてください。 言 748 8287 8293 777 783 18 744 750 ( 上記の数字は滝 3 の場合。正式版と同じとはかぎらない ) ( csh / tcsh の場合は f 。 r の部分を以下のようにする ) % foreach cgi ('ls * . cgi') foreach> ed ${cgi} く /tmp/perl. patch foreach> end 18 : CGIPath http://localhost/mt/ ( mt にアクセスする URL を書く ) ObjectDriver DBI : :postgres Database barmt DBUser bar DBHost localhost などを使って展開します ( 図 28 ) 。 にのまま追記する ) ( データベース名を指定する ) ( ューザー名を指定する ) ( localhost でよければこのままでよい ) 展開したら、 mt. cfg という定義ファイルに修正を加えま す。最低限おこなうべき設定を図 29 に示します。設定が 完了したら、適当なインストールバスに移動します。 $ cd /tmp/compi1e/MT—3.0D—fu11¯1ib-ja—b3 $ mkdir /usr/local/apache/mt $ mv * /usr/local/apache/mt こでは、 /usr/local/apache/mt を使用することにし ます (http://localhost/mt/mt.cgi でアクセスできるよ うにします ) 。また、データベースにアクセスするユーザー は bar 、データベースの名前は barmt だと仮定します。名 前はなんでもかまいませんが、それを mt. cfg に記述して ください。データベースは図 30 のように作成します。 mt. cfg には Movable Type の設定力第生されているた UNIX MAGAZINE 2004.9 め、外部から参照されるとシステムの構成が漏れ、思わぬセ キュリティ・ホールになる可能性があります。そこで、外部 から取得されないように、図 31 のような内容の . htaccess を作成します。こうしておけば、 mt. cfg にアクセスしても 拒否されるようになります。ほかにも取得されるべきでは ないファイルがあれば追記しておきましよう。 usr/local/apache/mt が http://localhost/mt/に マッピングされるように、 httpd.conf に図 32 のように設 定を追加します。 httpd.conf を修正したら、 httpd に設疋を再読込みさ せます。コマンドラインから、 $ /usr/local/apache/bin/apachectl reload とします。 169

7. UNIX MAGAZINE 2004年9月号

SFU 上のユーザー名 SFU 上では、ユーザー名は、ユーザー名 " あるいは、十ユーザ ー名 " になるようです。両者の違いは、前者が NT ドメインある いは ActiveDirectory 上のユーザー、後者がローカルのユー ザーということのようです。 SSH を使って SFU にアクセスする場合は、このユーザー名を 意識しないとうまくいかない場合があります。たとえは私の場合 は、 Windows XP にローカルマシン上のアカウントの、、 araki でアクセスしているのですが、 SFU 上では、十 araki" になりま す。このため、外部から SSH で接続する場合は、 図 14 Apache の取得と導入の手川頁 % ssh + araki@sfu. localdomain あるいは、 % ssh ー 1 + araki sfu. localdomain のようにしないとうまくいきません。もしも、、、 ssh sfu. local- domain" と実行して、、 Connection closed by 192.168.0.1 " のようなエラーカ咄たら、原因はユーザー名にあるのかもしれま せん。 $ wget ftp://ftp. interopsystems.com/src/apache/l .3/apache-1.3.29—interix. tar ・ gz cd /tmp/compile tar —zxf -/apache—l . 3 .29—interix. tar ・ gz cd apache-l . 3.29 CFLAGS=—D_ALL_SOURCES LDFLAGS="—L/usr/10ca1/1ib —L/usr/10ca1/ss1/1ib" . /configure \ -with—perl=/usr/local/bin/perl \ —server—gid=' 十 administrators' —server—uid=' 十 administrator' $ make insta11 $ make —enab1e—ru1e=SHARED_CORE —enable—module=so もし動いていなければ、 /usr/bin/syslogd を起動してく ださい。引数などは不要です。この状態で ssh を実行す れば、メッセージが出力されるようになるはすです。それ でも不十分な場合は、 inetd の設疋をコメントアウトして、 inetd に kill -HUP を送ってから、 $ /usr/local/sbin/sshd -d として、 sshd をデバッグモードで起動してから接続してみ てください。詳しい情報が得られます ( うまくいかない理 由としては、コラム「つながらない ・・・」「 SFU 上のユー ザー名」で挙げたような原因も考えられます ) 。 0 Web サーバー Windows 上の Web サーバーとしては Microsoft の Ⅱ S がありますが、もっとも広範に利用されているのはやは り Apache5 でしよう。ひろく使われているため、モジュー ルやノウハウが充実しています。また、 IIS には脆弱性を 狙ったワームが多いのですが、これによる被害を受けない という副次的なメリットもあります (Apache の脆弱性に 5 http://www.apache.org/ UNIX MAGAZINE 2004.9 対する攻撃もあるので、それには別途注意する必要があり ます ) 。 現在、 Apache にはバージョン 1.3 系列と 2.0 系列があ ります。 2.0 は標準で WebDAV をサポートするなど隹 的な機能をもつ半面、モジュール API カ畯更されたため に 1.3 系列の豊富なモジュール資産がすべて移植されてい ないという問題があります。 こでは、ある程度枯れているバージョン 1.3 を使用す ることにします。 Apache のソースは、これも Tool Warehouse から入手 します。モジュールを mod-*. so のような独立したかたち にする場合は、やはりリビルドカ必要になります。図 14 の ようにビルドしてください。 導入できたら、最低限の設定をおこないます。設定ファ イルは、 /usr/local/apache/conf/httpd.conf にありま す。とくに何もいじらなくてもテストはできますが、本格 的に運用するには ServerName や ServerAdmin といっ たパラメータを適切に設定する必要があります。また、デ フォルトでは 8080 番のポートを利用するようになってい 161

8. UNIX MAGAZINE 2004年9月号

58 : 59 : 60 : 61 : 図 20 403 : 404 : 405 : 406 : 407 図 19 src/bin/psql/Makefile 窈修正点下線部を削除 ) psql : $ (OBJS) $(libpq_builddir)/libpq ・ a $(CC) -static $(CFLAGS) $(OBJS) $(libpq) $(LDFLAGS) $(LIBS) ー 0 $@ help . 0 : $(srcdir)/sql—help. h src/backend/libpq/pqcomm. c 窈修正点 ( 404 行目を下線部のように変更 ) #ifdef SCO_ACCEPT_BUG ↓ ( 変更 ) #if defined(SCO—ACCEPT_BUG) Ⅱ defined(--INTERIX) * UnixWare 7 十 and OpenServer 5 . 0.4 are known tO have this bug , but i t 404 行目の ifdef に、 --INTERIX の場合を j 助日します。直後のコメントにあるような SCO UnixWare のバグは lnterix 3. x にもあります。ソケット関 連のいくっカバグ ( というより仕様 ) は UnixWare と lnterix では似ています。ここを修正しないと pg-hba. conf カ症しく機能しません。 図 21 src/interfaces/libpq/fe-misc. c びメ修正点 ( 下線部 おロ ) 249 : } 250 : #ifdef _INTERIX # include く bind/arpa/inet . れ > #endif / * INTERIX * / 251 : / * 252 : * pgGetInt /usr/local/include/bind/arpa/inet. h にある ntohs/ntohl の定 義を取り込まないと pgGetInt() カ澗違ったデータサイズを返し、通信カ皸 綻します。 はそのままでビルドすらできません ( いったい誰が検証し ているのでしよう・ ) 。動かなくては話にならないので、 せっせとバグを探しました。 バグは 3 カ所にあります。 1 つはビルド時のもので、 psql をビルドできないというものです。 libdl を使うので すが、 SFU には libdl.a がありません。 psql を—static でビルドすることはできないのに、 Makefile は—static でビルドするようになっています。この問題を図 19 のよ うに修正して回避すればビルドできます。 ビルドはできても、このままではデータベースカ駛いも のになりません。図 20 ~ 21 のように、サーバー側とフロ ントエンド側でバグを修正しなければなりません。バック 工ンド側では、 UNIX ドメインソケットの使用時に、 ac- cept() が sockaddr 構造体の sa-family に AF-UNIX を正しく設定せずに 0 を返すので、これを本来あるべき AF-UNIX に置き換えるように修正します ( 同様の問題は UnixWare にもあるらしく、その対策コードがあるのでこ れを利用します ) 。 pg-hba. conf によるアクセス制御では、 AF ー UNIX が返らないとローカルからのアクセスとみなさ れません。そのためローカルに関するアクセス制御が働か UN 工 X MAGAZINE 2004.9 なくなり、結果としてアクセス不能になります。 また、フロントエンド側では、サーバーとデータ交換をす る部分で、メッセージの長さなどを取得する pgGetInt() が利用する ntohs() 関数のプロトタイプが正しく読み込 まれないことが分かりました。そのため、コンパイル時 に正しいキャストが挿入されず、結果として誤ったデー タ長を返し、くるはずのないデータを延々と待ち続ける という状態に陥ってしまいます。これは、図 21 のように /usr/local/include/bind/arpa/inet. h を読み込ませる ことで対処できます。 なお、 postmaster や psql などのコマンドを動作させる には、 LD-LIBRARY-PATH に /usr/local/pgsql/lib が含まれている必要があります。 . bashrc や . cshrc に修正 を加えておきましよう。修正したら、再読込みを忘れない でください ( 図 22 ) 。 以上の修正を加えることで、 PostgreSQL か動作するよ うになります。 PostgreSQL の設定 ■ SSH と同様に、 PostgreSQL はインストールしただ けでは利用できません。データベースを初期化して、実際 に使うデータベースを作成しなければならないからです。 とりあえず、データベースの置き場所として /usr/local/ pgsql/data を使用することにします 8 。ここにデータベ ースを置くように初期化し、次にサーバーを起動して、最 後にデータベースを作成します ( 図 23 ) 。 8 /var/lib/pgsql/data や /var/spool/pgsql/data などでもかま いません。 165

9. UNIX MAGAZINE 2004年9月号

■ SFU の活用 [ 02 ] 図 1 zlib の導入 $ cd /tmp/compile $ tar —zxf -/zlib—l . 1 .4b¯interix $ cd zlib ー 1 . 1 .4b $ ng configure ( 72 行目から図 2 のように -fPIC を削除 ) $ . /configure —shared $ make $ make test he110 wo て 1d large—inflate() : OK inflate() : 五 e110 , he110 ! gzgets() after gzseek: he110 ! gzread() : he110 , he110 ! uncompress() : he110 , れ e110 ! ・ tar ・ gz after inf1ateSync() : he110 , he110 ! $ make install * * * z1ib test Ok * * * inflate with dictionary: he110 , Ⅱ e110 ! after infIateSync() : he110 , he110 ! large—inflate() : OK inflate() : e110 , he110 ! gzgets ( ) after gzseek: he110 ! gzread() : e110 , he110 ! uncompress ( ) : he110 , he110 ! he110 orld $ make test $ make $ . /configure $ make clean $ make install * * * z1ib test Ok * * * inflate with dictionary: he110 , he110 ! zlib—l . 1 .4b—interix . tar . gz 156 ように、 con ⅱ gure スクリプトの 72 行目から—fPIC を削 test で使用される minigzip 力平リ外を起こします。図 2 の イナリが、例外で落ちることがあります。 zlib も、 make てビルドしたシェアード・オプジェクトにリンクされたバ プションには問題があるようです。このオプションを付け 説明したように、 SFU に添付されている gcc の—fPIC オ ド・ライプラリ化するには 1 カ所修正カ必要です。前回も に問題になるところはないと思いますが、 zlib をシェアー 次に、図 1 のように展開してビルドしていきます。とく 図 2 シェアード・ライブラリ化する場合の configure スクリプ ト窈修正箇所 ( 下線部を肖畭 ) SFLAGS=${CFLAGS—"-fPIC ー 03 " } 除し、、 . /configure -shared" として configure を実行し ます ( zlib は autoconf を利用して作成された configure スクリプトではなく、自前の configure を使っています ) 。 なお、 zlib を使用する一部のプログラムは、残念なこと にビルド時に静的リンクをおこなうため、非シェアード・オ プジェクト版のライプラリも必要です。二度手間になりま すが、シェアード・オプジェクト版をインストールしたら、 いったん make clean を実行したうえで再度 . / configure を実行し ( 今度は -shared を付けない ) 、ビルド、インス トールをおこないます。 また、図 1 のなかで /tmp/compile ディレクトリを使 用しているのは、ホーム・ディレクトリカ啌白を含むパス のため、作業に適さないからです ( 8 月号の 121 ページを 参具印。 OpenSSL の導入 OpenSSL も、 Tool Warehouse から取得して導入す るだけです。これも autoconf 由来の configure ではな く、独自の c 。浦 g スクリプトを使っています。図 3 のよ 、 c 。 n g " というコマンドを実行します。なお、シェ うに アード・ライプラリをビルドするには、 LANG=C . /config shared zlib—dynamic のようにします。ただし、このままではうまくビルドでき ないので、 . /config を実行する前に Configure というファ イルを修正します ( 図 4 ) 。これは、 zlib. h の位置をコンパ イラに才韵・くするためです。 なお、 zlib. h が /usr/local/include 以外にもインスト —l/usr/local/include" を適宜 ールされている場合は、 変更してください。 ビルドしたシェアード・ライプラリを利用するため、 LD-LIBRARY-PATH に /usr/local/ssl/lib が含まれ るように . bashrc や . cshrc などの設定を変更してください ( 図 5 ) 。 OpenSSH の導入 OpenSSH も同様に Tool Warehouse から取得しま す。ただし、 OpenSSH の付属ドキュメントに、、 config ー UNIX MAGAZINE 2004.9

10. UNIX MAGAZINE 2004年9月号

■ SFU の活用 [ 02 ] #ifdef snprintf (pw—dir , PW—DIR—MAXLEN , _INTERIX return (NULL) ; #endif record—failed—login(user, #ifdef CUSTOM_FAILED_LOGIN * Check if the user is a110wed to 10g in via ssh. _INTERIX * / #endif / * static char *pw—name ; static char pw—dir [PW—DIR—MAXLEN] ; #define PW_DIR_MAXLEN 256 #ifdef _INTERIX int auth—debug—init ; Buffer auth—debug ; / * Debugging messages * / 図 6 auth. c 窈修正箇所下線部おロ ) 89 : 90 : 91 : 92 : 93 : 94 : 519 : 520 : 521 : 522 : 523 : 524 : 525 : If user is listed "/dev/fs/C/Documents and Settings/%s" strchr (pw—>pw—name , (pw-name pw—name + 1 : pw->pw—name) ; pw—>pw—dir = pw—dir; #endif / * _INTERIX * / if ( ! allowed—user(pw) ) return (NULL) ; 526 : #ifdef HAVE_LOGIN_CAP 図 7 OpenSSH の取得と導入の手偵 $ wget ftp: //ftp. interopsystems . com/src/openssh/openssh-3.8.0.1.2—interix. tar ・ gz $ tar —zxf -/openssh—3.8.0.1.2—interix. tar ・ gz $ cd /tmp/compile $ cd openssh—3.8.0.1.2 $ ng auth. c ( 図 6 の修正をおこなう ) $ make $ make install この、、マシン名十 " の部分がないようなので、 扱えるようなコードにした。 以上の変更を終えたらビルドします。ビルドとインスト ールの手川頁は図 7 のとおりです。 OpenSSH の言又疋 どちらのケースでも 158 れているので盗用の危険は少ないのですが、 8 文字程度の ードでログインする場合でも、ネットワーク上は暗号化さ 待どおりのセキュアなシステムを構築できません。パスワ 定しなければ、パスワードでログインできてしまったり、期 OpenSSH は導入したあとの設定が重要です。適切に設 パスワードでログインできるということは、総当たり的な 攻撃に弱いことを意味します。十分に長いパスフレーズを 利用するのは、こうした攻撃に対する備えでもあります。 OpenSSH の設定は、 /usr/local/etc/ssh/sshd-con- fig でおこないます ( ファイルはインストールした時点であ りますが、修正しないとうまく動きません ) 。このファイル に、図 8 のような修正を加えます。 なお、以下ではサービスを提供するマシン (SFU がイ ンストールされている Windows マシン ) を sfu. local- domain 、リモート側で sfu. localdomain にログインす るマシンを client. localdomain という名前にします ( 皆 UNIX MAGAZ 工 NE 2004.9