連載 / コアダンプするんですけどー① 図 2 簡易 16 進電卓俿成 , イ 2A 引 可回幻 ればいけないわけです。カスタマイズするためにリソース ファイルを用意するような場合以外は、せめてデフォルト 刎直くらいはロードモジュールのなかに埋め込んでおきた いものです。 X-Designer では出力内容を細かく調整することがで き、リソースの値を直接コードとして出力することも可能 です。しかしこの場合には、できあがったロードモジュー ルに対して、あとからリソースの変更をすることができな くなってしまいます。 もちろん、 /usr/1ib/X11/app-defau1ts を使うな どさまざまなテクニックが考えられますが、隣のマシンに コピーしたら動かないというのは困りものです。そこで、 出力されたプログラムを書き換えて、 fallback リソース を設定することにします。 fallback リソースというのは、 X のプログラムがリソースの本鑠に失敗した場合に使うデ フォルト刎直として指定するものです。この fallback リ ソースの代わりに自分の設定した値を使用したければ、リ ソースファイルを $XAPPLRESDIR などで設定するディレ クトリに置けばよいのです。ただし fallback リソースは、 app-defaults などのリソースがまったくない場合にの み有効となるので、かならすしも完璧な手段だとはいえま せん。注意してください。 リスト 1 Makefile CC = gcc -g —I/opt/SUNWmotif/inc1ude \ CFLAGS —l/usr/openwin/include LDLIBS —1Xm —1Xt ー 1X11 —lm —lgen TARGET = hcalc OBJS = manual . 0 SRCS = manual . c a11 : $ (TARGET) clean: $ ( ) -f * . 0 * ~ core $ (TARGET) hcalc: manual . 0 $ (cc) ー。 $@ $ (LDFLAGS) manual . 0 $ (LDLIBS) manual . 0 : manual . C hcalc . XC C のコード、リスト 3 カ祠しくリソース、リスト 4 が手 で書いた部分のコードです。リスト 1 には Makefile を示 します。これらのリストから分かるように、手でコーディ ングする部分は callback ルーチンと計算部分だけですみ ます。 さて、このプログラムをさきはど述べたように fa Ⅱ back リソースを言するように変更してみましよう。まず、リ ソースファイルの内容を酉改に展開します。手て編集する のは面倒なので、ごく簡単なプログラムを書きました ( リ スト 5 ) 。 sed や awk でも同様のことができるので、この 辺は好みでやってみてください。 こで出力されるリソースを使用するために、リスト 2 の main() と create-toplevel() をリスト 6 のように変 更します。出力されるリソースの酉改」は、 fallback. h と いう名前で保存してください。 リスト 6 の形式に変更すると fallback リソースか有効 になります。このようにカスタマイズすることによって、 リソースの再設疋が可能なかたちでデフォルト値を設定す ることカきました。 以 E のように若干の礰が必要だったとはいえ、このよ うなアプリケーションがわすか数時間でできました。 X- Designer はなかなか ( 甦リなツールなのではないかと思い ます。 ( にし・ゆういちろうウェザーニューズ ) 実際のコードの例 例として、 Motif を利用した簡易 16 進電卓を作ってみ ました ( 図 2 ) 。末尾のリスト 2 が X-Designer が出力した 123 UNIX MAGAZINE 1994.6
LittIePerI Pa 0 「 Perl には、文字列や数値データのリストをソートするた めに sort というオペレータが用意されている。したがっ て、自分でソートのアルゴリズムを考えてプログラムを組 む必要はない。 sort オペレータの基本的な使い方は単純 で、引数にソートしたいリストを渡すと、ソートした結果 のリストを返すというものだ。 ( 1 ) は、 "unix" "BSD" "xinu" "System V" という 4 つの文字列要素を含む配列を昇順にソートして出力してい る例である。このように sort オペレータはリストを引数と して受け取り、それをソートした結果のリストを返す。配 列の内容を並べ替えたい場合には、次のようにソートした 結果をもとの配列に代入すればよい。 sort @string—list ; @string—list ( 2 ) は、 ( 1 ) と違って要素に数値データをもつ配列である。 これを ( 1 ) と同しようにソートして出力してみると、ご覧の ような結果になってしまう。理由は、 sort オペレータが与 えられたリストを文字列の大小関係でソートするためであ る。 PerI では、文字列データと数値データはコンテキスト によって適した型に変換されるので、配列の要素が数値だ としても自重加勺に文字列に変換されてしまう。 数値の大小関係でソートするには、その大小を上び交する ための関数を指定しなければならない。 ( 3 ) では、 by-num- ber という関数を定義して、それを sort の最初の引数とし こで、関数の指定とソートするリスト て指定している。 ( カンマ ) を置いてはならない。 のあいたに 比較関数のなかでは、上交する 2 つのデータを $a と $b という変数でアクセスすることができる。 を数値として上交したければ、 $a く = > $b こで、 $a と $b という式を評価すればよい。この式は $ a 〉 $ b ならは 1 、 = $ b ならば 0 、 $ a く $ b ならば一 1 の値をもつ。デ フォルトでは文字列として比較されるので、 $a cmp $b という式を評価していることになる。 cmp は文字列を比 較し、、、く = 〉〃と同しように -1 、 0 、 1 の値をとる。 昇順ではなく降順でソートしたい場合には、数値データ と文字列データそれぞれについて、 $b く = > $a $b cmp $ a という式を使えばよい。 こで ! ()a く = 〉 (b) としてはい けない。否定オペレータの、、にを使うと一 1 も 1 も 0 にな ってしまうからである。 -()a く = 〉 $ b ) ならは大丈夫であ る。 多くの場合、上交関数は 1 カ所でしか使用されない。そ のために、いちいち関数を宣言するのも面倒なので、 sort の引数として ( 4 ) のように、比較関数のプロックを記述する こともできる。このとき、プロックのなかの最後の、、 ( セミコロン ) は省略できる。そのほうが式はすっきりする が、旧いバージョンだとシンタックス・エラーになること があるので注意してほしい。 連想配列と sort sort は、連想配列の内容を表示するためによく使用され る。配列の要素は順序をもっていてその並び方はプログラ マーの意図を反映していることが多いのに対し、連想配列 の要素は保存したときの順序を保ったまま取り出すことが できないからである。 連想配列の要素をキーのアルファベット順で表示する のは簡単である。 ( 1 ) のように、 keys %ENV として、連想配列のキーのリストを取り出し、それをソー トすればよい。このプログラムは printenv コマンドと同 UNIX MAGAZINE 1994.6 し結果を出力する。 値でソートして出力するには、上交関数を定義する必要 がある。 ( 2 ) の例のように、 $a と $ b をキーとする要素どう しを上交する関数を定義すればよい。 環境変数を値でソートして出力してもおもしろくない ので、 /usr/dict/words のなかにある単語の先頭文字の出 現頻度を調べ、その多い順から表示するプログラムの例を ( 3 ) に挙げる。降順にソートするため、 $a と $b の順序が逆 になっていることに注意してはしい。 141
図 4 UUCP マップファイルの構成 UUCP ホストは、それぞれ下記のフォーマットのエントリを イ尉寺している。 #N て始まる行のエントリは、 pathalias デー タの直後の空行で終る。このとき、エントリ内に余言 t な空行を 連載 /NET WORTH—O 入れてはならない。 FREQUENCY は、リンクを通してメールを転送する際のコ ストをおおよその所要時間て表す数 ( このコストを分類する ために、いくっかのキーワード ( マクロ ) カリ用されている。 LOCAL 25 #N #S #O #C #E #T #P #L #R #U #W sitename sitename サイトの UUCP 名 マシンの機不重・ OS とノヾージョン 系目織名 担当者の名前 担当者のメールアドレス 担当者の電話番号 組織のイ扨斤 経度と緯隻 コメント 近くのネットニュースサイト このエントリを最後に修正した人、修正日時 ドメイン リモート 1 (FREQUENCY) 、 リモート 2 (FREQUENCY) 、 リモート 3(FREQUENCY) DEDICATED 95 DIRECT DEMAND HOURLY EVENING DAILY POLLED WEEKLY DEAD 200 300 500 1800 5000 5000 30000 LAN ( LocaI Area Network) 専用高速回線 市内電話回線 通常の電話回線 ( 長距離電話、随時 ) 1 時に 1 回のポーリング 電話回線 ( 時の制約あり ) 1 日 1 回のポーリング 深夜のポーリング 不定期のポーリング 相当大きな値ーー利用不可能な経路を示す である。五 e 記には、ある大文字カ甘旨定される ( 図 4 ) 。 マップファイルは名前、アドレス、担当者情報などを保 持するが、このほか pathalias 用に、よくやりとりする サイトとのあいだの接続コストを見積もる特別な情報も もっている。ここでいう、コスト " は系屯にいえば所要時 間で、一ヨ殳に島巨離のほうが遠距離より低コストである。 pathalias は、マップファイルから必要な部分一一つま り、サイト名と各サイトへの孑をコストがいくらかという 情報を抽出して利用する。その後、 pathalias はこの巨大 なリストから目的のサイトまでの望ましいアドレス (bang path) を構成する。 UUCP で使われているメールプログ ラムは、一イ殳に経剳青報の取得とメール送信用のアドレス の構成について、 pathalias か利用できるように作られて いる。マップファイルのエントリ刎列を図 5 に示す UUCP からインターネットへ 現在では、ほとんどの UUCP メールプログラムがイ ンターネットのメールアドレス形式に対応している。ネッ トワークが急漣に普及していけば、専用回線てつながれた ネットワークの目と鼻の先に、多数の UUCP サイトが 作られていくであろう。また、多くの UUCP サイトに対 UNIX MAGAZINE 1994.6 このほか、モデムのポーレートや回線の品質に応して値を増減 するために、 HIGH ( ー 5 ) と LOW ( 十 5 ) が用意されている (DAILY 十 HIGH のように利用する ) 。これらを用いてコス トを言当するとき、四則演算カリ用できる ( たとえは、 DAILY * 4 は 4 日おきを、 DAILY / 4 は 1 日に 4 回を表す ) 。 して DNS の MX レコードか温殳定されている。この MX レコードには、その UUCP サイトがモデムによって通 信できる謝妾サイトで、かつインターネットに直接接続さ れているサイトを指定している。これによって、遠隔地 の UUCP サイトを出発したメールがインターネットに 直接接続しているシステムに UUCP で渡され、そこか ら SMTP を使って目的地に送り届けられる。この場合、 UUCP のメールプログラムはよけいな手出しはせず、近 くにいる ( インターネット・サイトの ) ホストにメールを 渡し、経路制御なども SMTP に任ぜてしまうのだ。 もう 1 つ、現実によくある ( しかし、どうみても許せ ない ) 話なのだが、目的地カ坏明な UUCP メールの配 送を任されると、とにかく UUNET に送りつけてしま う不届きなインターネット・サイトが存在する。これら のサイトは、マップファイルを管理したり pathalias を 使ったりする代わりに、 ( 自分では分からない ) 遠距離の メールをなんでも UUNET に押しつけてしまう。バー ジニア州 Falls Church にある UUNET Technologies (UUNET) はネットワークへの接続を提供している会社 で、 TCP/IP を使った直結、もしくは UUCP を使った安 価なダイヤルアッフ鮟続カリ用できる。 TCP/IP サーピ スをおこなっている会社はこれ以外にもたくさんあるが、 167
連 / コアダンプするんですけどー① O 0 0 : 0 ) 0 cd d O VO aCC = xreg * xreg; aCC = cmd = n; リスト 5 リソースプログラム (resconv ・ c) #include く stdio . h> #include く fcntl . 五 > int main(int argc , char *argv ロ ) FILE *fp ; char buffer [ 1024 ] ; if (argc ! = 2 ) { fprintf (stderr, "%s resfile\n" , argv[O] ) ; return 1 ; if ( ()p = fopen(argv[l] , perror (argv [ 0 ] ) ; return 1 ; printf ( "static String fallback—resources ロ while (fgets(buffer, sizeof (buffer) if (buffer [ 0 ] Ⅱ buffer [ 0 ] = = '\n' ) continue ; buffer [strlen(buffer) ー 1 ] printf ( " printf(" NULL,\n};\n") ; fclose(fp) ; リスト 6 リスト 2 の部分 #include "fallback . 五 " XtAppContext app—context ; / * Disp1ay Disp1ay *display , void create—toplevel (display, app—name , app—argc , app—argv) Disp1ay *display ; char *app—name ; int app—argc ; char **app—argv ; toplevel = XtVaAppInitia1ize (&app—context , "XHca1c" NULL , 0 , NULL , NULL ) ; &app—argc , app—argv, fallback—resources , int main (argc , argv) int argc ; char **argv create—toplevel ( display, argv [ 0 ] , argc , argv ) ; XtRea1izeWidget (toplevel) ; XtAppMainLoop (app—context) ; exit ( 0 ) ; 126 UNIX MAGAZINE 1994.6
亜いー 連載 / / 凵社 Language—O 図 3 サプジェクトとチェックリストを諚して作ったメモ 四月の出張 作成者 : srekcah % mem02 —subj ect % mem02 —checks 最終変更者 : ■交通手段の確保 ■宿泊の確保 口先方への再確認 0 経 0 の電 = 444 ー 333 ー 222 保存 終了 プジェクト " と呼びます。また複数のチェックボタンを 定義して、その内容を保存することもできます。これら のチェックボタンで表されるものを、、チェックリスト " と呼びます。 memo をコピーして mem02 という新し いエージェントを作りました。以下は、サプジェクト ( 四月の出彌とチェックリストの両方を指定してメモの 記述をおこなう例です ( 誌面の都合上、で行を折り 返しています ) 。実際の画面は図 3 に示します。 % mem02 四月の出張交通手段の確保宿泊の確保 先方への再確認 属生へのアクセス サプジェクトやチェックリスト、メモのテキストは、工 ージェントにメソッドを指定することで取出しが可能 です。 % mem02 % memo 2 % mem02 # サプジェクトの取出し # チェックリストの一覧 -checks 交通手段の確保 # 各チェック項目の状態 —creator —modifier # メモの作成者 # メモの最終更新者 こうすれば、はかのスクリプト言語を用いてメモを管理 することカきます。アクセス・プロトコルをきちんと 守るなら、メモの内部の実装か変化しても扱う側には大 きな変化はないことになります。極端な話、 memol 、 mem02 、 mem03 は Tcl/Tk だが、 mem04 は Perl 、 mem05 は SheII であっても問題はないはすです。 118 ・エージェントの交換 ェージェントは普通のテキストファイルですから、メー ルやネットワーク・ニュースのテキストとしてはかの 人に送ることができます。受取り側に wish がインス トールされていれば、セープしたエージェントを開くこ とができます。コメントを書き込んで送り返してもらっ たり、チェックボタンに印を付けてもらって簡単なアン ケートをおこなうなどの応用ガ去カ考えられます。 プロクラムについて 今回は、 Tcl のオプジェクト指直物刻長である [incr tcl] を使いませんでした。その理由は、大部分のサイトでは配 布されたままの wish を使っている可能性か高いので、そ の環竟でエージェント交換かできるようにしたかったから です。しかし、プログラムを見れば分かるように、 Tcl 本 来のモジュール管理の弱さからかなり苦しいイ七 E りになっ てしまいました。 本格的なエージェント構築には、もっとちゃんとした オプジェクト指旬言語の本咎肋ゞ必要です。たとえ Tcl/Tk の世界で実験するにしても、こオ功、らさきに進むためには incr tcl] の存在は不可欠でしよう。 おわりに 今回のエージェントはかなりシンプルなものでしたが、 より複雑なものにしていくためのヒントは示せたのではな いかと思います。データベースに問・ぜをしたり、・聳義の 予約をしたり、あるいは回覧に用いたりとさまざまな応用 が考えられます。 プログラムをデータのなかに閉し込めてしまうというや り方は、記慮領域がダイヤモンドのように貴重だった日赫に には許されない贅沢でした。しかし現在では、 CPU パワ ーや記億領域の少々の浪費など、計算機か仕する対象ー 人間一が享受する至便生にくらべれば微々たる問題とい えるでしよう。 オプジェクト指向が進むべき道の 1 つは、いかに効率 よく、またイ生も高く自律した並列工ージェントを支援 可能なを用意できるかということです。そして、これ か実見される日にはもうすぐそこまできているのです。 UNIX MAGAZINE 1994.6
連載 / 転ばぬ先のセキュリティー② リスト 7 crontab -l の結果 UNIX MAGAZINE 1994.6 SunOS では、 /var/log/syslog や /var/adm/mes- いうちにディスクが溢れてしまわないともかぎりません。 ファイルを削除する必要があります。さもないと、知らな 自分で新規に記録ファイルを指定した場合、定期的に newsyslog いぶんと日がかかったものです。 検索していないのが原因でした。こオ功ゞ分かるまでにはす イプラリがネームサーバーだけを参照し、 /etc/hosts を ちゃんと設定していたのですが、 IP アドレスを求めるラ しているのがわかりました。 /etc/hosts で loghost を ト loghost という計算機の IP アドレスを求めるのに失敗 調べた結果、 syslogd が syslog ・ conf てオ旨定したホス てますし、 syslog. conf も間違っていません。いろいろ のです。設定ファイルを石忍するし求を残すようになっ ルしたのですが、 /var/log/syslog に記録が残らない ましよう。 sendmail version 8 を言算機にインストー さて、 ここで syslog に関する私の失敗談を話しておき アルを参照してください。 す。正確なシンタックスを理解するためにも、ぜひマニュ に残ることになります。これは、表 1 の I.I ~ 8 に対応しま でレベルが debug 以上の言剥ま、 /var/adm/lpd-errs トリに対する言当となっています。また、ファシリティ lpr 4 、 d. 1 ~ 4 、 a. 1 ~ 4 、 1.1 ~ 4 、 n. 1 ~ 4 、 c. 1 ~ 4 というエン れます。つまり、表 1 において、 u. 1 ~ 4 、 k. 1 ~ 4 、 m. 1 ~ /dev/console 、および /var/adm/messages に求さ レベル err 以 - ヒのすべてのファシリティに属する求は、 のか ) を書くことができます。たとえばリスト 5 の場合、 ます。右には言求ファイル ( 実際にはどういう重川乍をする します。複数の言当があった時はすべての場合が ; 面され チします。また、レベルは指定したレベル以 - ヒにマッチ に、 * " を当してあると、すべてのファシリティにマッ ファシリティ . レベル " のように言己し、ファシリティ syslog. co Ⅱ f の一には、リスト 5 のようになっています。 具体的な例を挙げて説明します。 SunOS の出荷時の syslog. conf の正確なシンタックスの説明は避けて、 れたエントリをどのファイルに残すかを記述します。 簡単にいうと syslog ・ conf には、この表で示さ 5 4 * * 6 /usr/lib/newsyslog >/dev/null 2 > & 1 sages は自動的に削除されます。このイ督はみを理解しま しよう。定期的に cron カサ凸理をしているはすです。ルー トで crontab ー 1 と入力すると、リスト 7 に示す結果が 得られます。 土曜日の午前 4 時 5 分に /usr/lib/newsyslog か起動 されていることが分かります。 /usr/lib/newsyslog の 内容はリスト 6 のとおりです。 /var/adm/messages は、 0 、 1 、 2 、 3 という拡張子のファイノレ、変わり、けっきょ くは消えてなくなります。 /var/log/syslog について も同オ兼です。 newsyslog の最彳変で、 syslog に SIGHUP シグナルを送っているのは、 open しているファイルを閉 して syslog ・ conf を読み込み、新たにファイルを開く ためです。つまり、ファイル messages を messages. 0 に移動したあとは、いったん messages を閉し大きさ が 0 となったファイル messages を新たに開いているの です。 皆さんカ隶ファイルとして messages や syslog 以 外のファイルを選んだ場合、 newsyslog のようなイみ を考えて設定する必があるでしよう。 今回は、ネットワーク・セキュリティの問題点や、対 策を講しる際の基本事項について紹介しました。やはり慣 れないで原稿を書くのは辛いことがしみしみ分かりま した。ほんの数日前まで ( I (IbX はおろか ) パッチコマン ドもないありさまで、本当に原稿か書けるのか気が気では ありませんでした。そんな事情もあり、今回は記事力く なってしまって申しわけありません。来月も引続き具イ勺 なセキュリティ・ホールに対する対策を説明していきます。 あくまで基本は、、アクセス制限をおこない、不正なアク セスは言求に残す " であることを忘れないでください。 ( やまもと・かすひこ奈良先蠏斗学技彳大完大学 ) [ 1 ] 山口英、「ネットワークセキュリティ」、『電イ情報通信学会 誌ム 1992 年 7 月、 VoI. 75 、 No. 7 、 PP755 ー 758 ☆ [ 赭文献 ] 97
連載 / 転ばぬ先のセキュリティー② 図 1 xtftpd の # ps aux ー grep inetd ー grep -v grep 0 : 03 /usr/etc/xinetd 104 0 . 0 0 . 0 108 0 ? IW Jan 12 root # k 土 11 —HUP 104 リスト 3 xtftpd のための inetd. conf #tftp wait dgram udp tftp dgram udp walt リスト 4 不正なアクセスの言彖 Apr 15 01 : 51 : 26 mitsuze xtftpd[21481] : illegal access from 127.0.0.2 リスト 5 SunOS の syslog ・ conf /dev/console *. err;kern. debug;auth. notice;user. none * . ; kern. debug;daemon , auth. notice ;mail. crit ;user. none /var/adm/messages /var/adm/lpd—errs lpr. debug 表 1 ファシリティとレベルの表 alert emerg u. 3 u. 4 u. 1 user kern k. 3 k. 4 mail m. 1 m. 3 m. 4 daemon d. 1 d. 3 d. 4 aut h a. 1 a. 3 a. 4 lpr l. 1 1.3 1.4 n. 1 n. 3 n. 4 c. 1 c. 3 c. 4 cron と入力すれは、 次に SunOS などではただ make xtftpd がコンパイルできます 2 % make % ls —CF xtftpd xtftpd* 次に適当なディレクトリ ( たとえば /usr/etc) に xtftpd をルートの権限でコピーし、 /etc/xinetd を言己主 します。 % su # cp xtftpd /usr/etc # chmod 755 /usr/etc/xtftpd こで /etc/xtftp.conf を記述する # cat /etc/xtftp. conf XterminaIl . aist—nara. ac ・ JP Xtermina12. aist—nara. ac ・ jp この例では、 Xtermina11 と Xtermina12 のみに アクセス権を与えています。さて、 xtftpd も tftpd と同様、 inetd から起動されます。したがって、 / etc / inetd. conf をリスト 3 のように書き換え、 inetd に 2 ULTRIX のように 4.2BSD のロク饑能を使っている OS では、コ ンパイルできません。 4.3BSD 以↓ ) ロク皀に対芯している必要があり ます。 /usr/etc/in. tftpd in. tftpd —s /tftpboot /usr/etc/xtftpd xtftpd —s /tftpboot root root info warmng notice debug none u. 7 u. 8 u. 5 u. 6 u. 9 k. 6 k. 7 k. 8 k. 9 m. 7 m. 5 m. 6 m. 8 m. 9 d. 5 d. 6 d. 7 d. 8 d. 9 a. 7 a. 5 a. 6 a. 8 a. 9 1.7 1.5 1.6 1.8 n. 7 Ⅱ .5 n. 6 n. 8 n. 9 c. 7 c. 6 c. 9 SIGHUP シグナルを送ることでこの設定を反映させる必 要があります ( 図 1 ) 。 これで、設定は終りです。 もし、 Xtermina11 および Xtermina12 以外の計算機から TFTP によるアクセスが あった場合は、 ( 通常は ) /var/log/messages にリスト 4 のような言勅ゞ残ります。 っ 4 っ 1 っ 1 っ 4 ワ 1 っ 1 っっ 1 なぜ自由にアクセスできるのか こまで、 tftpd の欠点を並べたててきましたが、 tftpd を責めているわけではありません。歴史的に UNIX のア プリケーションは、自由にアクセスを許すものが多いので す。たとえば、 SunOS の /etc/host ・ equiv は、呂川 には、、十 " となっており、非常に危険です。これは、すべ ての言 t 算機を信用していることになり、ユーザー名さえ同 しであれは、どの言 t 算機からもパスワードなしでログイン できるからです。 思うにネットワークの普及時においては、自由にアクセ スを許す設定のほうカ ; 合がよかったのでしよう。ワーク ステーションを買ってきても、セキュリティ対策か講し 95 UNIX MAGAZINE 1994.6
連載 /UNIX Communcation Notes 表 1 pcnfsd の入手先 システム SunOS 4. x 、 Solaris Solbourne NEXTSTEP ULTRIX 4. [ 23 ] IRIX/ SYSV MIPS OpenVMS 5.5 SCO UNIX 3.2 HP-UX 9. x IBM MVS IBM AIX リスト 1 make の実行 % make Usage : make {sunos ー ultrix. 4x ー mips45x コン / ヾイ丿レ 入手先 ftp ・ york ・ ac. uk : /pub/pc—nfs/RPC. pcnfsd/pcnfsd. tar ftp ・ york ・ ac ・ uk : /pub/pc—nfs/RPC. pcnfsd/pcnfsd. tar bcm.tmc.edu//pcnfs/pcnfsd.93.02.16.tar.Z ftp ・ york. ac . uk : /pub/pc—nfs/RPC. pcnfsd/pcnfsd. tar src . doc. ic. ac . uk:/sun/pcnfs/pcnfsd. 93.02.16. tar. Z bcm.tmc.edu//pcnfs/pcnfsd.93.02.16. tar. Z DEC TCP/IP V3.0 に含まれる HP-UX NFS に含まれる SCO NFS に含まれる IBM に . 照会のこと IBM に . 照会のこと sunos .403C ー svr4 ー irix ー next} リスト 2 SunOS 4.1.3 での /etc/rc. local への変更 bsd # pcnfsd v. 2 if [ —f /usr/etc/rpc . pcnfsd ] ; /usr/etc/rpc ・ pcnfsd echO 'pcnfsd' # cp rpc ・ pcnfsd /usr/etc fi then こでは、 ftp ・ york ・ ac. uk から入手した tar を例に説明を進める。もちろん、ほかのアーカイプか pcnfsd. たとえば、 SunOS 4.1.3 へのインストールであれば、 か表示される。これを参考にターゲットお尺する。 2. make だけを実行すると、リスト 1 のようなメッセージ イルが展開される。 1. tar ファイルを展開する。カレントディレクトリにファ ら手に入れた場合も同様窈巣作でコンパイルできる。 % make SUIIOS 3. コンパイルか終了すると、 make の引数で才定した名前 とすればよい。これでコンパイルか物始される。 と同しサプディレクトリに、 る。たとえは、 % make sunos とすると、サプディレクトリ 作られているはすである。 インストール rpc. pcnfsd が生成され sunos 0 インストールの手順はごく簡単である。 ます、コンパイルによって得られた rpc. pcnfsd が rpc. pcnfsd を /usr/etc にコピーする ( この作業は、 root の権限でお こなう ) 。 48 次に、 /etc/rc. local などを変更する。 rpc. pcnfsd は、システム起重加芋にほかのデーモンと同様に起動するよ うに設定しなければならない。 Sun OS 4.1.3 の場合なら ば、 /etc/rc. local にリスト 2 のような言殳定を加えれば よい。 ほかのプラットホームでも同様に設定し、システム起動 時に rpc. pcnfsd か起動されるようにする。 /etc/pcnfsd. conf の記述 最後に、 rpc. pcnfsd の動作を決める /etc/pcnfsd ・ conf をする。このファイルはテキストファイルであ り、設定する項目もごくわすかである。設定項目は、 / etc /pcnfsd. conf の各行に 1 つずつ言己する。 ノート 2 rpc ・ pcnfsd のデフォルトの設定のままで問題がなけれは、 /etc/pcnfsd. conf を用意する必はない。 設定項目として、以下のものが用意されている。 wtmp へ C)* 込みの設定 PC から NFS を使ってファイルシステムをマウント する場合、 PC 側からはユーザー名とパスワードをサー UNIX MAGAZINE 1994.6
連載 /Windows NT—O 1. リスト 4 にもあるが、標準の makefile でコンパイルす ると、 try 、 leave 、 finally が予系鮖吾に define される。 2. NT の標準ライプラリは ANSI 互換なので、 UNIX の 標準とは異なる点がある。竹業量としては、ここが最大 である。 3. システムとしては同じ機能が用意されていても、同し API ( システムコール ) があるとはかぎらない。必要に 応してライプラリ関数を再定義するか、あるいは作成し なければならない場合もある。 bcopy がないので仕方 なしに memcpy を使うといった、つまらない作業が 多い。 4. ファイルのリンクのように、機能自体が Win32 竟で は提供されていないものもある。これは、使用しないよ うに修正する必喫がある。 5. DOS と同様、行末には CR (Ctrl-M) 十 LF のシーケ ンスが入る。 \ Ⅱがマッチする範囲などには注意が必喫 である。 6. NT の標準のシェルは DOS と同様、引数中のワイルド カードを含むファイル名の展開をおこなわないので、実 行ファイルが自力で展開する。 DOS の標準に従った展 開をおこなうには、 -findfirst 、 -findnext 、 _findclose などのランタイム関数を使う。 7. ファイノレヾスの表記が異なり、 : と \ カイ吏用される。 gawk について、上記の各イにともなう問題を検討し ていこつ。 SIGQUIT などがないため、あるものを適当に定義しな 4 は、シグナルの不頁が少なく、 SIGHUP 、 SIGBUS 、 カイ吏用される (config ・印。 数を定義すれば、 stdio. で定義される BUFSIZE 定数 メータがない。これも BLKSIZE-MISSING という定 る。また、 stat システムコールにプロックサイズのパラ う。 config. h の定数 RANDOM-MISSING を定義す 3 は、 random がないため rand 、 srand のペアを使 代わりに io. h をインクルードする (awk. 五)。 がインクルードされるが、これは WIN32 にはないので、 インクルードされる。さらに、 unistd. というファイル ている。これを定義すると、 stdlib. h や string ・ h が のコンパイラを使うための定数が config. h に用意され 2 については、 STDC-HEADERS という ANSITAA UNIX MAGAZINE 1994.6 おしてやる (awk. 五)。 fork と exec でパイプを実現し ているが、 fork はないので (beginthread や system 、 CreateProcess はある ) PIPES-SIMULATED を定義 する。ただし、 VMS と同様の popen が用意されている ので、これを使うようにする (io. c)o 5 については、とりあえず CR の入っていないファイ ルでテストすることにする。 gawk の場合、 6 については、プログラムのファイル 名と入力データのファイル名を展開するのか望ましい。 argc 、 argv を入れ替えることになるが、これはどちらか というと機育旦加であり、最初のバージョンではしないほ うがデバッグか容易である。 じつは、 makefile で MSDOS という定数を定義すれ ば 4 と 7 の問題か解決できるが、 ここでは定義しないで おく。 さきほど触れた copydir については、次のような問題 がある。 1 に関連する問題として、 try カ畯数として使われてい る。これは、リスト 2 にあるように undef すればよい。 4 については、シンポリック・リンクの機能力イ吏われて いる。これは定数の設定で角夬できる。 Win32 ではアク セスタイムがセットできない。この場合、重要なのは変更 時間のほうだけなので、 utimes は utime で置き換えても よいが、たんに削除するだけにした。 101 ・スタックやヒーフ。の使用量の上限を多めに設定する 実行ファイルに . exe という拡張子を付ける 変える ・オプジェクト・ファイルの拡張子を . 。から . obj に を加えていけはよい。このほかの変 : 点としては、 である。リスト 2 を参考に、オリジナルの makefile に手 ntwin32. mak というファイルをインクルードすると簡単 しくコンパイル、リンクできないので一見大変そうだが、 る。リスト 4 にあるような大量のコマンドを入れないと正 う、、 make もどき " であり、 makefile の修正が必要にな ソフトウェア開発キットに入っているのは nmake とい こまでの設定をすませたら、コンパイルしてみる。 コン / イノレ
連載転ばぬ先のセキュリティー② リスト 1 SunOS の /etc/tftpd.conf #tftp dgram udp リスト 2 xtftpd の入手先 root /usr/etc/in. tftpd in. tftpd —s /tftpboot ftp: //ftp.csce . kyushu-u ・ ac ・ jp/pub/Security/t001s/xtftpd/xtftpd—1.00.taて・ gz ( 3 ) 外部との通イ磊求 この 3 つの項目はとても重要ですから、 に入れておいてください。 それでは、例を挙げてみていきます。 tftpd UNIX の有名なセキュリティ・ホールに、 TFTP に関す しつかりと頭 全なはすですが、なせか、 -s オプションをわざわざ外して 末のためのファイルだけを置くことになります。これて安 /tftpdboot の下に ( 盗まれても一向にかまわない ) X 端 るディレクトリを /tftpdboot 以下に制限しています。 -s オプションを指定することにより、アクセスでき す (SunOS の場合はⅲが頭に付くことに注意 ) 。ま 出荷時にはコメントアウトしてあり、ひとます安心で の項目を捜すとリスト 1 のようになっています。 ファイル /etc/inetd. conf を調べてみましよう。 tftpd いう特殊なデーモンから起動されますから、 inetd の設疋 リの制限かできるようになっています。 tftpd は inetd と SunOS 4.1. x に付属の tftpd では、公開するディレクト それでは、・匠はどうなっているかというと、たとえば コマンドまて提供されています。 をサポートするプログラムを書くまでもなく、 tftp という ていくことが可能です。悪いことに TFTP のプロトコル る tftpd の動いている計算機からファイルを自由に取っ トに接続した世界中の言 t 算機が、 TFTP のサーバーであ 施していない日罸にがありました。この場合、インターネッ とにした多くの OS で、上に掲げた 3 項目に対する対策を は BSD Networking Software) というノヾージョンをも できるのです。 Berkeley がリリースした tahoe ( あるい 略しています。つまり、パスワードなしでファイルが入手 どこか簡ヒされているかというと、認証の部分まて省 くる際によく利用されます。 X 端末が UNIX の載っている計算機からデータをとって 田翻ヒされたファイル転送プロトコルのことです。これは、 るものがあります。 TFTP の最初の T は trivial で、簡 94 設定する SE がいることをよく耳にします。こうなると、 せつかくの -s オプションも台無しです。 SunOS のⅲ . tftpd は、 ( 2 ) の「外部に提供するサー ビスの制限」をおこなう機能は有しているものの、 ( 1 ) と ( 3 ) の項目を満たしていないために、本質的に強いとはい えません。アクセスできる計算機を制約し、不正なアクセ スがあった場合は言求を残す機能を付け加えて、はしめて 本質的に強いアプリケーションになります。 xtftpd 手前ロ昶曾になりますが、私は 3 つの項目を満たす tftpd を作って公開しています。名前は xtftpd といい、 BSD Networking Software の tftpd をもとに拡張を施して あります。入手先をリスト 2 に示します。 具イ勺な特徴を以下に掲げておきます。 ・ /etc/xtftpd. conf にアクセスできる言 t 算機、または ドメイン名を言己できる。 ・ -s オフションで指定したディレクトリ以下のみを公開 する。 オリのない言 t 算機からアクセスがあった場合、ファシリ ティ daemon 、レベル notice で言求を残す。 3 番目に挙げたファシリティとかレベルという言葉は あとで説明します。デフォルトでは、たんに / v 矼 / a 面 / messages に日求カ戦ると理解しておいてください。 xtftpd のインストール xtftpd のインストールガ去を説明します。管理者でな い方は、この部分は飛はしてけっこうです。 ますアーカイプを入手します。これを展開すると xtftpd というディレクトリができるので、そこに移動し ます。 % gunzip xtftpd—l.00.tar ・ gz % tar xvf xtftpd-l .00. tar % cd xtftpd UNIX MAGAZINE 1994.6