ファイル - みる会図書館


検索対象: UNIX MAGAZINE 1998年1月号
89件見つかりました。

1. UNIX MAGAZINE 1998年1月号

ファイアウォールの作り方 白崎博生 IRQ と格闘しなければならないかもしれません。 ・カーネルの叫冓築 ファイアウォール用のカーネルを明冓築します。カー ネルの再構築といっても難しいものではなく、コンパ 前回までで、 FWTK 2.0 のインストールカ鮗りました。 イル・オプションを設定しなおすだけです。 しかし、 FWTK はインストールしただけではまったく動 ・セキュリティ・ポリシーの作成 きません。 FWTK をファイアウォールとして動かすた セキュリティ・ポリシーとは、以下の項目を明確化ある めには、しなければならない作業がまだたくさん残ってい いは明文化したものです。 ます。 ファイアウォール構築に要するイ↑業量をフルマラソンの 矍対象 ( 何を ) いまようやく 2km くらい走っ 42.195km にたとえると、 ーイ矍理由 ( なせ ) たところでしようか。 ゴールははるか彼方の遠いところに ー脅威対象 ( 何から ) あります。 ー担当者 ( 誰か ) 「 2 回で 2km やろ。 はなら、あと 40 回は続けんとゴー ーコスト ( どれだけの手間をかけて ) ルでけへんで」 ー去 ( どのように ) 「ぜえぜえ・ ファイアウォールで守るネットワークを安全な状態に 早くも息切れしてしまいそうですが、気をとりなおして 保つには、適切なセキュリティ・ポリシーを作成し、そ 1 歩でも前に進みましよう。とはいえ、道標のない長距離 れに従ってファイアウォールを運用しなけれは・なりま これからの作業手 走は精ネ 4 衛生的にも好ましくないので、 せん。この作業は次回におこなう予定です。 順の概要を簡単に紹介しておきます。 ・ FWTK の成疋 ・ディレクトリ /etc 内のファイルの変更 作成したセキュリティ・ポリシーに従って、 FWTK の 、、汎用 " にデサインされた OS を、ファイアウォール 成疋ファイルをします。 設定する ( できる ) 内容はプロキシー・サー ごとに として運用できるようにカスタマイズします。具イ勺に 異なるので、 1 っすっ順番に設定ファイルの書き方を説 は、 rc ファイルや conf ファイルを変更します。今回 はこの竹喋をおこないます。 明し、サーバーを立ち上げていきます。 ・ 2 枚目のネットワーク・カードのインストール ネームサーバ (named) の運用 ファイアウォール上でネームサーバーを運用する場合に この連載でオ冓築するファイアウォールは dual-homed 留意する点と設定ガ去を説明し、ネームサーバーを起動 host です。したがって、 2 つのネットワーク・イン ターフェイスが必要になります。そこで、 2 枚目のネッ します。 トワーク・カードを追加インストールします。ふたたび ・テスト運用 - これからの作業予定 86 UNIX MAGAZINE 1998 ユ

2. UNIX MAGAZINE 1998年1月号

構築したファイアウォールを自分用のファイアウォー ルとしてテスト運用し、言どおりに乍するかを石信忍 します。ここでは、チェックすべき項目とチェック方 法を説明します。 ・ FWTK のカスタマイズ FWTK のユーサー認証を S/KEY に対応させたり、 透過機能を FWTK に組み込むといった改造を施しま す。 ・不正アクセス検知樹冓の構築 、、ファイアウォールさえ導入しといたら、もう怖いもん なしや " などと安じ、していてはいけません。不正アクセ スを受けたときにそれを検知し、セキュリティ担当者 に通知すん欟冓がなけれは、ファイアウォールを運用し ていないときよりも大きな被害を受けるおそオ功ゞありま す。ここでは、不正アクセスを本剱日する機構の言 t と、 それを構築するガ去を説明します。 目のまわりそうなイ乍業量ですね。これだけのことを書く のかと思うと、私も目がまわりそうです。 - バッチ情報 BSD/OS 3.1 へのパージョンアップ 次の作業にとりかかる前に、すこしだけ追加情報を紹介 します。 BSD/OS 3.1 がリリースされました。 BSD/OS 3.0 にパッチを当てるだけで、あっという間に 3.1 にバージョ ンアップされます。 前回の記事を書いたあと、 M300 ー 036 から M300 ー 043 までのパッチか新たにリリースされました。これらのパッ チファイルを入手し、次のように順番に当ててください。 # /usr/bin/per15 /usr/src/patches/M300—036 apply # /usr/bin/per15 /usr/src/patches/M300—037 apply # /usr/bin/per15 /usr/src/patches/M300—043 apply すべてのパッチを当て終ったら、カーネルを明冓築し、 リプートすると BSD/OS 3.1 カ位ち上がります。 ファイアウォール・マシンの CPU が Pentium か MMX Pentium の場合は、 M310-001 のパッチも当 UNIX MAGAZINE 1998 ユ てたはうがよいでしよう。これは、いろいろなところで pentium の内部バグ " と騒がれていた不具合に対応する ためのパッチです。その他の CPU を使っている場合は、 当てなくてもかまいません。 BSD/OS 2.1 の′ッチ ついでに、 BSD/OS 2.1 の新しいパッチも紹介してお きましよう。その後 K210 ー 028 から K210 ー 030 までの カーネル用パッチと、 U210 ー 039 から U210 ー 043 までの ユーティリティ用パッチカ噺たに公開されました。これら のパッチファイルを入手し、次のように順番に当てていき ます。ただし、 U210 ー 042 を当てる必喫はありません。 # /bin/sh # /bin/sh # /bin/sh # /bin/sh # /bin/sh /usr/src/patches/K210 # /bin/sh /usr/src/patches/K210— # /bin/sh /usr/src/patches/K210— /usr/src/patches/U210 /usr/src/patches/U210 /usr/src/patches/U210 /usr/src/patches/U210 ー 028 029 030 ー 039 ー 040 ー 041 ー 043 - OS のカスタマイズ ファイアウォールのべースとなる OS としてインストー 87 時刻を同期させるべきです。不正侵入などの事件カ起きた ネットワーク内のすべてのホストは、なんらかの去で NTP の設定 は、順番にみていきましよう。 したり、あるいは追加したりといった作業です。それで その大半は、ディレクトリ / etc の下のファイルを変更 す。また、入れ替えるべきものは入れ替えます。 削除すべきものは削除し、運用すべきものは運用しま おけは・いいというわけです。 それなら、いっそのこと最初から動かないように設疋して ・プログラム 0 ンヾッチを当てるのはもっと面倒です。 チを当てるだけでも手間がかかるのに、使っていないサー は動かないように設定しておきます。セキュリティ・パッ の運用に不要なものは、できるかぎり削除するか、あるい らの機能の多くはたしかにイリですが、ファイアウォール えるように、いろいろな機能が盛り込まれています。これ ルした FreeBSD や BSD/OS は、さまざまな用途に使

3. UNIX MAGAZINE 1998年1月号

TCP wrapper ■ 図 5 /etc/inetd. conf の変更 ( 3 ) telnet stream tcp shell stream tcp 図 6 ホストテーカレの言 nowai t nowait root /usr/sbin/in. telnetd /usr/sbin/in. rshd in . telnetd in . rshd LOCATION : /usr/include/incl . h SERVER: disguised. server HOST—ALLOW (ALIAS incl . h) in. rshd: serverl : spawn (sleep 1 ; in. rshd: server2:spavn (sleep 1 ; /the/web/directory/doservl) & /the/web/directory/dogerv2) & HO ST -DENY in. rshd : ALL : deny ロ (ALIAS excl . h) TCP wrapper の動作 先日、毎日の定例務を簡略化するスクリプトを作った のだが、 TCP wrapper の助けを借りることになった。そ の手順のなかには、ファイルを tar でまとめ、ゲートウェ イ・サーバーから Web サーバーに移動する作業がある。 コツは、これらのファイルをファイアウォールの稼重加 間外 (off-hour) に通過させる点にあった。この旁を自 動化するには、 rcp と rsh プロセスを実行する必要があっ た。 rsh プロセスは utmp や utmp システム監査ファイ ルロ魁亦を残さす、 finger や who コマンドでみえなくな る可能性があるため、きわめて危険なものとなりうる。侵 入者は、 # rsh system csh ーエ とするだけでいい ( s い m は侵入目標となるシステム ) 。 お分かりのように、これらのプロセスを j 面逼させるために 不用意にファイアウォールをオープンにすることがジレン マとなった。こうした理由により、サーバーにはセキュリ ティ層をさらに追加する必要があった。その彳齬リを果たす のが TCP wrapper である。さらにわれわれは、外部か らサーバーにアクセスする誰にも、 TCP wrapper を使っ ていることを知られたくなかった。 こまでに紹介した方針にもとづき、図 5 に示す /etc/ inetd. conf のエントリを変更した。 tcpd などは、スクリ プトの実行によってトランザクションが発生するのとは別 の安全なシステム上に作った。 96 /usr/sbin/in. telnetd と /usr/sbin/in. rshd が tcpd 実体である点に注意してほしい。 ホスト許可 / 拒否ファイルは、はかのすべての TCP wrapper プログラムと同しサーバー上に置かれている。 新たに /usr/include ディレクトリを作成し、ホスト許可 ファイルはⅲ cl. h 、ホスト拒否ファイルは excl. h という 名前にした。正規のものとは異なるファイル名にして侵入 者に TCP wrapper の存在を知られないようにするため である。名前の付け方はどのようなものでもかまわない。 ただし、これらのファイルのパス名は Makefile てオ旨定し なければならない。図 6 は、ホストテープルと、そこで 実行を許可されるものを指定している。ホスト許可ファイ ルには、サーバー名の後ろに、、 a Ⅱ。 w " がなく、代わりに ⅲ . rsh サーバープロセスを使って実行されるスクリプト カ甘旨定してある。 ホスト許可ファイルは、 servl と serv2 の両方で実行 されるサーバープロセスⅲ . rshd を許可するだけである。 次に、 /the/web/directory にあるスクリプトを実行する にのスクリプトのみ実行を許可されている ) 。ホスト拒否 ファイルに言当されたサーバープロセスⅲ . rshd を実行し ようとした場合、リクエストは拒否される。そして、この プロセスを実行しようとした人物のエントリがログファイ ルに加えられる。 次に実行されるプログラムが、ゲートウェイ・サーバ gatel と gate2 の両方に置かれた /opt/transfer/ transfer スクリプトである ( 図 7 ) 。このプログラムはディ レクトリの内容を tar でファイルにまとめる。このファイ UNIX MAGAZINE 1998.1

4. UNIX MAGAZINE 1998年1月号

TCP wrapper を用いたセキュリティ by Petra Hahnke ・ f 「 om LJNIX REVIEW 概要 UNIX MAGAZINE 1998.1 ェストすると、インターネット・デーモン (inetd) カ腰 ライアントが TCP wrapper のホストにサービスをリク れたネットワーク・サーピスのセキュリティ層となる。ク 論理第勺には、 TCP wrapper は /etc/service で定義さ わる。 と、たとえは図 1 のようにサーピスプロセスの流れか変 を置くだけである。 TCP wrapper をインストールする ビスを別の場所に移動し、そこに TCP デーモン (tcpd) どの UNIX システムでも利用できる。ネットワーク・サー しては、システムファイルや設定を変更する必要はなく、 や監視がおこなえるパッケージである。インストールに際 こなうサービスのリクエストに対して、安全な手段の提供 rlogin 、 Telnet 、 exec 、 rcp といった 1 対 1 の通信をお TCP wrapper は無料て、入手でき、 FTP 、 RPC 、 rsh 、 ど紹介する。 の使用など、テープルのさまざまな設定についてはのちほ 山い することができる。サー ー証や、、自家製の " プロセス どのホストにどのようなプロセスの実行を認めるかを指定 ウォールと併用すれは、ホスト許可 / 拒否テープルにより、 トを監視し、それを言求する機能も備えている。ファイア リクエス のユーザー ID やノードだけに与える。さらに、 セスを制限し、重要なサーバープロセスの実行許可は特定 のパッケージはファイアウォールに似た機能をもち、アク しているのなら、 TCP wrapper はうってつけである。 ストをすべて言当求できるようなセキュリティ製品を必要と サーピスの許可と拒否か設定でき、許可 / 拒否したリクエ 会社の予算に余裕はないが、アクセステープルを使って 図 1 サービスプロセスの充れ ・ TCP wrapper のインストール前 クライアント FTP ( ューザー ) クライアント ファイル転送 ・ TCP wrappe 「のインストール後 クライアント FTP ( ューザー ) クライアント ファイル転送 i netd tcpd ftpd 求されたサーピスの代わりに tcpd を呼び出す。そして、 TCP wrapper はすべてのクライアント情報 ( ホスト名や IP アドレス、リクエストの種別、リクエスト時間など ) を 監視し、 syslog で記録する。必要に応して、この情報を ポケットベルやプリンタに送ったり、ほかのファイルに 出力することもできる。これらのデバイスにどのような情 報を送るかし尺できる。 tcpd はホストの権限ファイル をチェックし、どのホストか許可さそれカ舸を実行で きるかを決める。クライアントがホストサーバー上て権限 をもっていれば、 tcpd はそのサーピスを呼び出していな くなる。これらのチェックは、クライアント側からはまっ たくみえない。 93

5. UNIX MAGAZINE 1998年1月号

TCP wrapper ■ 図 7 /opt/transfer/transfer スクリプト cd /opt/progi/data/reports /usr/bin/tar cvf /opt/transfer/files prog?/early* rcp /opt/transfer/files servl : /the/web/directory/servl/ /usr/bin/rm /opt/progi/data/ reports/prog?/earlystats* 図 8 doservl cd /the/web/directory/prodl tar xvf files mv /the/web/directory/servl/progm/early* /web/progm/docs/stats/reports/ mv /the/web/directory/servl/progp/early* /web/progp/docs/stats/reports/ mv /the/web/directory/servl/progr/early* /web/progr/docs/stats/reports/ /usr/bin/chmod 644 /web/prog?/docs/stats/reports/early* /usr/bin/chown root . other /web/prog?/docs/stats/reports/early* 図 9 安全な finger を実行するためのホスト拒否ファイル (/on/disguised/server/safe-finger ー 1 @%h ー /usr/sbin/mail —s %u —%d —%h root) & in . rshd: . servl : ルは servl に上書きコピーされる。ファイアウォールは ゲートウェイから Web サーバーへの rsh のみを許可し、 さらに TCP wrapper プログラムかま行される。このプ ロセスがホスト許可 / 拒否ファイルを十正する。 中幻カ鮗了すると、ファイルは tar ファイルから取り出 されて正しい場所に移される。そして、これらのファイル に対して chmod 、 chown か夫行される。図 8 は doservl サ→ヾーの概観である。 doserv2 もまったく同じだが、 れは doservl の代わりとなるものである。 ログファイルは別の安全なサーバー上に置かれる。この ファイルには、成功 / 失敗か第当求される。許可されないリ モートシェルの使用もすべて言求される。 特殊な機能 UNIX MAGAZINE 1998 ユ トパターンの両方がマッチしてはしめて可能である。 情報を得られる。しかしこれは、デーモンリストとホス ザー名を調べると、接続をおこなった当人に関する追加 TCP wrapper プログラム経由でクライアント・ユー Makefile で言殳する。 ければアクセスは拒否される。この機能を使いたければ、 れによりホスト名とアドレスを照合し、マッチしていな には、 -DPARANOID を有効にしてコンパイルする。 アクセスしているのか、さらに詳しい情報を知りたい場合 はかにもいくつかある。誰が自分のサーバーやファイルに TCP wrapper を最大限活用するための重要な機能は、 の機能は、正確なユーザー名を石忍しようとする場合にと くに有用である。システムへの侵入やサーバー誤用のはと んどは糸内て起きているので、この機能を使えは容易に 人物の特定かできる。侵入者を本剱日し、損害を被る前にア クセスをプロックするもう 1 つのセキュリティ機能があ る。これはユーサーの ID を調べることでアドレス詐畋 撃 (address-spoofing attack) を検知する。結果が un- known@host として返ってきたら言乍称がおこなわれてい ることになる。 侵入か試みられた場合に対処できるような TCP wrap- per の成疋法がいくつかある。 侵入者がアクセスを試みたときに、そのユーザー名やホ ストを管理者にメールで連絡するようにできる。これは、 ホスト拒否ファイルに数行追加す川まよい。 その場でのアクセス拒否、安全な finger コマンドの実 行、管理者への情幸当言ができる。安全な finger コマン ドは、リモートホストから送信されたデータをふるいにか ける。通常の finger コマンドよりもはるかに安全なもの である。これは、図 9 のようにホスト拒否ファイルに記 述する。 たとえば、誰かが servl 上でⅲ . rsh を実行しようとす ると、 TCP wrapper は safe-finger を起動する。クラ イアントのユーザー名、ホスト名もしくはアドレス、呼び 出されたデーモンプロセスが root ューサーに送られる。 もっと速く簡潔なのは、侵入者に関する情報だけを取得し て管理者に送るガ去である。あるプロセスに限定された内 97

6. UNIX MAGAZINE 1998年1月号

リスト 1 ntp. C0Ⅱf8」 server driftfile AA . BB . CC . DD /var/run/ntp ・ drift リスト 2 resolv. confØf51, 」 doma in nameserver mycompany ・ co ・ JP AA . BB . CC . DD 場合、どのような被害をどういう順番で受けたのかを把屋 するために日骸ー牘報は必頭です。 日駭リをい期させるガ去はいくつかありますが、 こでは NTP (Network Time Protocol) を使います。 たとえば、 IP アドレスが AA. BB ℃ C. DD のホストを NTP のサーバーとして参照する場合は、リスト 1 のよう な内容の /etc/ntp. conf というファイルを作成します。 ℃ eBSD の場合 FreeBSD を使っているのなら、 /etc/sysconfig を次 のように変更します。 xntpdf1ags="NO" # xntpdf1ags="NO " リゾルバの設定 最糸勺にはファイアウォール上でネームサーバーを立ち 上げますが、構築イ 1 業の段階では、とりあえすほかのホス ト上で漣用しているネームサーバーを参照します。 たとえば、ファイアウォールのドメインが、 mycom- pany ・ co ・ jp 、ネームサーノヾーの lP アドレスが AA. BB. CC. DD の場合、リスト 2 のような /etc/resolv. conf を 作成します。 /etc/inetd. conf の変更 /etc/inetd. conf から、すべてのエントリを削除しま す。ばっさりときれいさつばり削除してください。 ネットワーク経由でログインして作業をしている場合 は、 telnet のエントリだけを残し、その他はすべて削除 します。 そして、 inetd にシグナル SIGHUP を送ります。 /etc/rc の変更 多くの OS では、いろいろなデーモンか動いています。 しかし、たとえ tirwhod や nfsiod はファイアウォール 88 にとっては不要です。そこで、これらのデーモンか起動さ れないように /etc/rc を編集します。 FreeBSD を使っている場合は末尾のリスト 3 に示した 行を、 BSD/OS 2.1 ではリスト 4 に示した行を、そして BSD/OS 3.1 ではリスト 5 に示した行をそれぞれ削除し ます。 sendmail の起動オプションの変更 標準の設定では、 sendmail はデーモンモードで起動さ れます。しかし、 FWTK のパッケージには SMTP コネ クションを受け付ける専用のデーモンカ哈まれています。 そこで、 sendmail の起動時 = のオプションを以下のように 変更します。 FreeBSD の場合 /etc/sysconfig を次のように変更します。 sendmail—flags="-bd ー q30m ” sendmai1—f1ags="—q30m' BSD/OS の場合 /etc/rc を次のように変更します。 /usr/sbin/sendmail —bd —q30m /usr/sbin/sendmail —q30m /etc/hosts. equiv の設定 次のコマンドを実行し、 /etc/hosts. equiv の設定をお こないます。 # rm —f /etc/hosts. equiv # touch /etc/hosts. equiv # chown root . wheel /etc/hosts . equiv # chmod 400 /etc/hosts . equiv その他の設定 BSD/OS の場合は、 BSD/OS 2.1 の場合 こオ山外に次のような設定が必要 ファイル /etc/netstart を次のように変更します。 rstatd=NO rwhod=NO rst at d=YES rwhod=YES UNIX MAGAZINE 1998.1

7. UNIX MAGAZINE 1998年1月号

連載 /FreeBSD ノートー⑩ mous ユーサーからはアクセスできない。 ayanami# 1 Ⅱ -s /cdrom /home/ftp/cdrom これは、リンク先のファイル名が chr 。。 t のあとのフ ァイルシステムで解釈されるためである。このような場 合は、 NULL ファイルシステムを経由して / cdrom を /home/ftp/cdrom にマウントするとよい。 ayanami# mount —t Ⅱ u11 /cdrom /home/ftp/cdrom こうすれば、 /home/ftp カ噺たなルートとなる anon- ymous FTP でも、 CD-ROM の内容をアクセスできる ようになる。 NULL ファイルシステムと同様の機能をもつものとし て、 SunOS などの loopback ファイルシステムがある。 ューサーからみれははは 1 司しだが、カーネル内での実現方 法に若干の違いがあるようだ。 UNION ファイルシステム UNION ファイルシステムを利用すると、あるファイ ルシステムの上に別のファイルシステムを重ねることかで きる。コンフィギュレーション・ファイルのオプション は、、 UNION " である。 FreeBSD のライプ・ファイルシステム CD-ROM の ソースコード部分をハードディスクに重ねてマウントする と、ファイルの修正部分のみをハードディスク上に置いて おくだけでソースコードを自由に変更することができる。 これはディスク容量の大幅な節約になる。 また、おおもとのソースコードは変史しないようにして おき、ユーザーごとに修正用のマウントボイントを用意し てこれに重ねてマウントすれば、ユーザーカ材固別にソース コードに変更を加えて利用することができる。 これまでは、 X ウインドウ・システムに付属している コマンド lndir を使い、ソースツリーをたどりながら対応 するシンポリック・リンクを張っていく、というガ去をと ることが多かった。しかし、変更を加えにくい反面、スー パーユーザーで作業しているとうつかりおおもとのファイ ルを変更してしまうことか在々にしてあった。 UNION ファイルシステムは便利であり、具体例を示 そうといろいろ試してみた。しかし、 FreeBSD の現在の バージョンでは不具合があり、場合によってはシステムが パニックしてしまう。工点での利用はあきらめざるをえ ないが、ぜひ利用できるようにしたいものである。 UNIX MAGAZINE 1998.1 UNION ファイルシステムと同様の機能をもつものと しては、 SunOS などの TFS (Translucent File Sys- tem) がある。 UMAP ファイルシステム UMAP ファイルシステムを利用すると、指定したリス トに従ってユーサー ID およびグループ ID を変換した ファイルシステムかオ冓築できる。コンフィギュレーショ ン・ファイルのオプションは、、 UMAPFS" である。利用 例としては、 NFS やリムーバブル・テンヾイスでユーザー ID やグループ ID が異なる場合などカ考えられる。 ソースコードをみてみると、ファイルシステムの機能の うち、ユーザー ID とグループ ID を処理する部分だけ をトラップして変換し、あとは素通しするというイ督はみに なっている。 stackable file system layer の典型的な利 用例といえるだろう。 そのほかのファイルシステム このはか、 FreeBSD で利用できるファイルシステムと しては、テンヾイス・ファイルシステムやファイルディスク リプタ・ファイルシステムがある。前者は / dev 以下のデ バイスファイルを、後者は / dev / fd 以下のファイル・ディ スクリプタに対応するデバイスファイルを、独立のファイ ルシステムにまとめて提供するものである。 従来のデバイスファイルは、通常のファイルシステム のなかに mknod コマンドで作成される ( 実際には / dev /MAKEDEV や /dev/MAKEDEV. local を利用する ことが多いが、どちらも最終的に mknod コマンドを呼 び出す ) 。しかし、この方法ではカーネルの構成を自重加勺 に央することかて、きない。すなわち、新しいデバイスを カーネルに加えたら、それに対応するデバイスファイルを 作成しなけれはならない。 デバイス・ファイルシステムなどを利用すると、っ いったテンヾイスファイルが自第勺に現れるので、新たに作 成する煩わしさがない。現在はまだ実験中だが、将来は全 面的に採用されることになるかもしれない。 ☆ 次回からは、 FreeBSD におけるテンヾイスドライバにつ いて、実際に開発を進めながら紹介する予定である。 151 ( はまだ・なおき )

8. UNIX MAGAZINE 1998年1月号

連載 / IJN Ⅸ知恵袋ー 表 1 Update 命令が出力する印 U 保管庫のファイルが更新されていたので、作業ディレクトリのファイルを去肄 i のものに置き換えた A 作業ディレクトリに add 命令で追加されたファイル R 作業ディレクトリから rem 。 ve 命令で削除されたファイル M 1. 作業ディレクトリのファイルが更新された 2. 保印車のファイルが更新さかっ作業ディレクトリの対応するファイルも更所された。互い の変更を競合なく央させた C 保管庫のファイルか史新さかっ作業ディレクトリの対応するファイルも更新された。互いの変 更に競合が発生している。手競合を回避する必要あり CVS の管理タ P ) ファイル。たとえは、作業ディレクトリに新しく作成したが、まだ add 命令で j 田川していないファイルなど 図 4 競合が発生したファイル #include く stdio . h> くくくくくくく sample . c #define HELLOSTR " He110 Hanako\n" #define HELLOSTR " He110 Taro\n" main() { printf (HELLOSTR) ; 管庫に登録されているファイルに反映されます。図 5 に 暗黙の統合がおこなわれた場合の画面出力を示します。 sample. c に対して競合なく統合できたことを意味するメ ッセージが出力され、統合の印である、 M " が sample. c に付いているのカ巧 ) かります。 ただし、すでに述べたように、競合しているか否かは字 面だけで判断されます。未的に競合している部分はどち らにせよ人手て陬り除く必要があります。 update 命令を 実行したときに統合メッセージか表示されたら、どの部分 か統合されたのかを調べましよう。変史点を調べるには CVS の diff 命令を使います。 diff 命令は次節で解説し ます。 rcsmerge : warning : conflicts during merge cvs update : conflicts found in sample. c C sample. c その結果、競合を示す、、 C " の印が sample. c に付けら B さんに競合処理を促してきます。 update 命令のと 変更点の調査 きに表示される印とその未を表 1 に示します。 A 、 R 、 ? は前回の例で登場しました。 競合の調停や、暗黙の統合がおこなわれたあとは、意味 B さんは競合を調停しなければなりません。競合が発生 的な間違いがないかをチェックすべきです。旧い改可番 している sample. c は、図 4 のようになっています。 号をもつファイルと現在のファイルの差分を調べる 0 は、 CVS の diff 命令を使います。 競合が発生した部分が、くくくくくくくと > > > > > > > で囲まれ ています。 rcs をよく知っている人なら、このファイルが たとえば、さき刎列では sample. c て暗黙の統合が発生 していました。図 5 に示した update 命令の出力から、変 rcsmerge コマンドの結果を出力したものだということが 更点を調査するために必要な情報を読み取っていきましょ 分かると思います。 B さんは、競合部分を探し出し、 ( た ぶん A さんと話し合い、どちらの修正を反映するかを決 う。図 5 では、改訂番号 1.2 と 1.3 の差分を取っていま めたあとに ) 再修正したソースを保管庫にイ隶します。 す。つまり、現在の作業ディレクトリにファイルを取得 したとき、改訂番号は 1.2 だったにもかかわらず、いざ 暗黙の統合 update 命令を実行しようとしたら保管庫のファイルの改 訂番号が 1.3 になっていたということです。 CVS は改訂 競合が発生した場合の対処去は分かりました。次に 番号 1.2 のファイルと改訂番号 1.3 のファイルの差分を、 2 人か編集したにもかかわらす、競合が発生しなかったと 現在の竹業ディレクトリのファイルに統合してしまいまし きのことをみてみましよう。 た。ですから、変更点を詩べるには、最初 0 コ ( 得した改訂 この場合、暗黙のうちに 2 人の変更点か統合され、保 番号 1.2 のファイルと、現在の作業ディレクトリのファ 二ⅱ一」 101 UNIX MAGAZINE 1998.1

9. UNIX MAGAZINE 1998年1月号

連載 /FreeBSD ノート一- 図 4 プロセスの軈の読出し 0 .3 0 .0 0 . 1 1 . 2 0 .0 PID %CPU cat 15127 15100 15127 297 5 , 5 ctty 880359023 , 550040 0 , 0 0 , 2724 nochan 0 0 0 , 0 , 0 ayanami# cat /proc/curproc/status 図 5 ps の出力い ayanami # USER root root neWS root ayanami# ayanami# USER て 00t root neWS root PS auXWW PID %CPU %MEM 195 207 210 233 258 umount p S 258 233 210 207 195 0 . 0 0 . 0 0 . 0 0 . 0 0 . 0 /proc 0 . 0 0 . 0 0 .0 0 . 0 0 . 0 %MEM 0 . 3 0 . 0 0 . 1 1 . 2 0 . 0 VSZ 204 216 260 3924 164 164 3924 260 216 204 VS Z RS S 168 12 44 736 12 12 736 44 12 168 RS S TT v2 TT v2 図 6 カーネル・ファイルシステムのマウント ayanami# mkdir /kern ayanami# mount ¯t kernfs kernfs /kern ayanami# 1s /kern bootfile boottime copyright hostname 10 adavg STAT STARTED 220Ct97 220Ct97 220Ct97 220Ct97 220Ct97 ls 十 ls S I S STAT STARTED ls + ls physmem pageslze TIME COMMAND /usr/local/atalk/etc/atalkd /usr/local/atalk/etc/papd /usr/local/atalk/etc/afpd /usr/local/etc/innd -p4 —iO /usr/libexec/getty Pc ttyv2 0 : 00.01 6 : 21.57 0 : 03.93 0 : 00.33 0 : 15 . 51 (getty) (innd) (afpd) (papd) (atalkd) T IME COMMAND 0 : 00 .00 0 : 00.00 0 : 00.00 0 : 00.00 0 : 00.00 verSIOn time ネル・ファイルシステムを利用すると、通常のファイル操 作だけでこのような幸肋られるようになる。 stackable file system layer 4.4BSD は、前回紹介した VFS や vnode を採用した ことにより、ファイルシステムの実装か容易になった。そ のファイルシステムの及をさらに柔軟にするのが stack ー able file system layer である。これは、モジュール化し た個々のファイルシステムの層を、重ね合わせて利用でき るようにするものである。 たとえば、物理第勺なファイルシステムの前処理として圧 縮をおこなうイ瓦想的なファイルシステムを用意し、 2 つを 重ね合わせて利用することなどが考えられる。 stackable でないファイルシステムの場合は、このような前処理は ファイルシステムごとに用意しなけ川まならない。しかし 4.4BSD の場合は、前処理をおこなうイ瓦想的なファイルシ ステムを 1 っ用意すれば、どの物理ファイルシステムでも 利用することができる。同様に、暙号化をおこなうイ瓦想的 なファイルシステムを用意しておいて、日孫宿の層の上にさ 150 らに重ねるといった組合をも可能である。 4.4BSD では stackable file system layer の実例とし て、以下に挙げるファイルシステムを実装している。 このファイルシステムではおもしろい機能が比較的簡単 に実現できるので、ぜ兆戦してみてほしい。 NULL ファイルシステム NULL ファイルシステムは、既存のファイルシステ ムの任意のディレクトリを任意の場所にマウントでき る。コンフィギュレーション・ファイルのオプション は、、 NULLFS" である。シンポリック・リンクと似ている が、機能を実現しているレベルが違うので生質は異なる。 たとえは、ルート・ディレクトリの変更される anony- mous FTP などのユーザーでも利用することができる。 この例について説明しよう。 ディレクトリ /cdrom にマウントしている CD-ROM の内容を anonymous FTP でアクセスしたいとしよう。 ftp ユーザーのディレクトリが /home/ftp だとすると、 以下のようにシンポリック・リンクを張っても anony- UNIX MAGAZINE 1998.1

10. UNIX MAGAZINE 1998年1月号

連載 / UN Ⅸ知恵袋ー RELEASE-I-I を作業ディレクトリに取得し、さらに RELEASE-I-I-FIX という名前でう圸支を作っています。 tag 命令の、、一 b " スイッチが分皮を作るためのスイッチで す。分岐ができたら、バージョン 1.1 とは別の作業ディ レクトリを用意し、そこで RELEASE-I-I-FIX のタグ 名をもつファイルを checkout 命令て取得します。 このように、 tag 命令でう岐を作るためには、 checkout 命令で旧いソースファイルを取得しておかなければなりま せん。これでは面倒なので、旧いソースファイルを取得し なくても研咬を作ることができる rtag という命令があり ます。これは、保管庫に入っているファイルに対してタグ 名を付ける命令です。保管庫にある RELEASE-I-I を分 岐させるには、 rtag 命令を次のように使います。 $ cvs rtag —b —r RELEASE-I-I RELEASE-I-I-FIX 分岐ができたら、タグ名として RELEASE-I-I-FIX を指定して check 。 ut 命令を実行します。取得したソース を修正し、保管庫への登録を繰り返すことで、別トラック での開発を進めていくことができます。 統合 別トラックのファイルをいま自う朸鯛発しているトラッ クのファイルに統合したいときがあります。たとえば、バ グ修正のために作った別トラックの修正を主トラックのフ ァイルに反央させるときなどです。 CVS は分岐したソー スの統合機能を提供しています。 異なるトラックのファイルを統合させるためには、 checkout 命令か update 命令のどちらかを使います。い ま、主トラックとは別に、 RELEASE-I-I-FIX という タグ名で分岐されたプロジェクトがあるとします。これを 主トラックに統合する手順を具イ勺に示します。 最初は checkout 命令を使う場合です。 $ cvs checkout —j RELEASE-I-I-FIX softlab/sample ー j " オプション・スイッチは、統合を孑ぐするスイツ チです。、、一 j " に続けて指定したタグ名をもつファイルを 現在の乍業ディレクトリのファイルに統合します。統合の 104 1. 分皮点を探す。 手順は次のとおりです。 2. 分岐点のファイルと分岐したトラックの最新ファイル の差分を取る。 3. 上で取った差分を、現在作業ディレクトリに存在する ファイルに適用する。 分岐してから修正した部分すべてを、斤のファイルに 適用するわけです。当然ながら、すべての差分が間題なく 適用されるかどうかは保証されません。競合か起きたら、 「競合の処理」の節で解説したような手順で手動による修 正が必要です。 次に update 命令を使った統合の例を示します。 up- date 命令ですから、すでにイ業ディレクトリにファイル か存在するけなわち、いったん checkout 命令を実行し ている ) ことかⅶ苻是です。 $ cvs update -j RELEASE-I-I-FIX もし、存在するファイルすべてを統合するのではなく、 特定のファイルのみ統合したい場合は、引数でファイル名 を指定します。たとえば、 sample. c の差分のみを統合し たいのならば、次のようにします。 $ cvs update —j RELEASE-I-I-FIX sa-rnple . c ☆ 競合の処理と分充合のガ去が分かれば、 CVS を制し 、までの角見で以下のこと たといってもよいでしよう。こ かできるようになりました。 1. CVS の準備 2. プロジェクトの登録 3. ファイルの取得 4. ファイルの追加、更新、削除 5. スナップショット 6. 多人数でのファイル更新 7. プロジェクトのう第充合 ソフトウェアの開発に必要となる、基本的なプロジェク ト管巣作カ辭忙されていることが分かります。 次回は cvs コマンドの各命令についてみていきましょ う。また齠介していない命令やオプション・スイッチな ど、知っておくと便利な機能を角見します。 ( しま・けいいちシャーフ ) UNIX MAGAZINE 1998.1