目次 はじめに 1 章 BSD オペレーティングシステム 1 . 1 UNIX から Unix へ、そして BSD 1 .2 BSD オペレーティングシステムの特徴 1 . 3 BSD オペレーティングシステムの応用分野 2 章 BSD の構造 2 . 1 動作原理 2 . 1 . 1 UN Ⅸの処理単位 ( プロセス ) ・ 2 . 1 . 2 プログラムとプロセス・・ 2 . 1 . 3 プロセスと入出力・・ 2 .2 プロセス管理 2 . 2 . 1 処理の流れ・・ 2 . 2 . 2 プロセスの状態・・ 2 . 2 . 3 プロセスの優先度・・ 2 . 2 . 4 プロセスの終了・・ 2 . 2 . 5 プロセスの成仏・・ 2 .3 仮想記憶 2 .4 プートストラップ 2 . 4 . 1 ブート・・ 2 . 4 . 2 UN Ⅸ自身の main 関数・・ 2 . 4 . 3 プロセス 1 の働き・・ ( 0 ( 0 C) 2 2 1 1 つ」 2 2 4 ・ C) 一 0 LO LO 6 8 9 9 0 3 3 3 3 4 4 4 4 4 4 4 5 5 5 5 5
2.2 プロセス管理 2.2 プロセス管理・ オペレーティングシステムとしての UNIX の基本的な働きはプロセスと カーネルによって実現されている。プロセスではユーザーのプログラムやラ イプラリの関数が実行され、システムコールによりカーネルのサービスを 利用する。一方、カーネルではこのようなプロセスの実行環境を CPU を時 分割することによって提供し、またプロセスからのさまざまな要求に応じて サービスを提供する。 221 処理の流れ 1 つのプロセスの処理はシステムコールの発生によってカーネルに移行す る。そして、カーネル内部でのサービスの処理が終わると、再びューザーの プログラムに制御が移行する。このように UNIX では 2 つの空間それぞれ に実行モードがある。これがユーザーモードとカーネルモードである。つま り、システムコールはこのモードを切り替える 1 つのきっかけとなる。 * 3 このモードは UNIX の稼働しているハードウェアのプロセッサの状態モー ドに対応して管理され、空間の管理、特にユーザーモードで実行中のプログ ラムからカーネル空間のアクセスを禁止するために効果的に利用されている。 一般的にシステムコールの実体は CPU に用意されている trap 命令で、 の命令によって CPU の状態を切り替えることにより UNIX のカーネルモー ドへの移行を実現している。 2.22 プロセスの状態 UNIX の活性な * 4 プロセスは、 ■実行中 ある。 実行中、 実行可、待ちのいすれかの状態で システム中で唯一 CPU の割り当てが行われているプロセスである。この ときはユーサーモード、カーネルモードのいすれかで、このプロセスのため 45 * 4 活性でないプロセスにも複数の状態がある。 * 3 このはかにも時分割用のクロック割り込みやハードウェアからの割り込みがある。
3.4 インターネット・プロトコルスーツの概要 ネットワークに関する経路制御情報を持っており、適当に処理してくれるだ ろう、という考え方である。 では、経路制御表はどのようにして管理されるのであろうか ? IP のプロトコルスペックでは経路制御表の管理について定義されていな い。 IP は正しい経路制御表がすでに用意されていると仮定して動作してい る。よって外からなんらかの方法によってカーネルの中にある経路制御表を 管理する必要がある。もちろん手で入力して経路制御表を構築 / 管理するこ とも可能であるが、現在のように、世界中の計算がつながった環境で、すべ てのネットワークに対するエントリを手で入力するのは不可能である。たと えデフォルトルートを使っても Router-A ではどうするかという問題が残る。 そこで、通常はルーティングプロトコルと呼ばれる、経路情報を交換するプロ トコルを実装しているデーモン ( ルーティングデーモン ) を動かしておくことで 管理する。ルーティングプロトコルについては「 3.4.8 ルーティングプロト コル」で詳しく述べる。 ■ lnternet ControI Message ProtocoI( ℃ MP) IP は基本的に自分自身を管理するような機能は持ち合わせていない純粋 な通信プロトコルである。そのため、たとえ途中でエラーが発生したことが 分かっていても送信者にそれを伝える手段がない。そこで、エラーを報告し たりする目的で、 lnternet Control Message Protocol ( ℃ (P) が使われている。 ICMP は RFC792 * 9 で定義されている。 ICMP では次のようなさまざまなデータタイプが用意されているが、 では重要なものをいくっか紹介するに留める。 ・ Echo Rep ly ・ Destination Unreachable ー Network Unreachable ー Host Unreachable * 9 RequestForComment : 事実上の、、標準を記述したドキュメント〃。ネットワーク技術者の集ま りである lnternet Engineering Task Force (IETF) で議論された後 lnternet Activity Board (IAB) の承認を得て出版される。 97
4 章システム環境の設定と管理 4.1.4 ファイル管理 UNIX のファイルシステムは、完全な木構造になっている。複数のディス クが存在しても、マウントという各論理ディスク上にある木を接合する操作 により、 1 つのシステム上では単一の木構造を保っており、物理的なファイ ルの存在位置に無関係にファイルを参照できる。 ・ノヾーティぐノョン UNIX では 1 つの物理ディスクを複数の論理ディスクに分割して取り扱え る。この論理ディスクをバーティションと呼ぶ。論理デバイスは物理ディスク 名に a—h のアルファベットが付いた名前になる。、、 Western Digital generic 200 MB IDE" というディスクがあったとき、たとえば表 4 ー 5 のようにパー 表 4 ー 5 バーティションの切り方の例 ティションを分割する。 論理デバイス名 wd0a wd0b wd0c wd0d wd0e wd0f wd()g wd0h 始点 ( プロック ) 0 16800 0 50400 サイズ ( プロック ) 16800 33600 414540 363965 このとき、各論理ディスクは重なっても構わないが、同時に使用している ファイルシステムが重なることは許されない。 これらの情報は /etc/disktab に記述されており、 disklabel コマンドによっ てディスクラベルを書き込み、 newfs コマンドにより実際にファイルシステ ムが作られる。 BSD/386 に付属する /etc/disktab の一部を図 4 ー 10 に示す。 144
4.2 は十分気を付けなければならない。 4.2.6 ロギング システムの保護 システムの安全性を確保するためにはいろいろな部分に気を付けなければ ならないことは述べた。しかし、それでもシステムが十分安全であるとは言 い難い。侵入者は常に管理者の予測を超えた方法でシステムに侵入してく る。これをいち早く見つけるために管理者はロギングを行うことができる。 UNIX ではロギングを統一的に行うために sysl 。 gd というデーモンがログ管 理をしている。 ■ syslogd syslogd は UNIX におけるログ管理デーモンである。起動すると /dev/klog 、 syslog/udp 、そして一 p オプションが付いていれば一 p で指定されたファイル を、付いていなければ / dev / 1 。 g に UNIX ドメインのソケットをオープンし、 ここに書き込まれたメッセージに対して、 /etc/syslog. conf に書かれた処理 を行う。 /etc/syslog ・ conf は 1 工ントリに対して記録するメッセージの種類 を指定するフィールドとメッセージの取り扱いを示すフィールドの 2 つの フィールドを持つ。前者はファシリティとレベルをックで繋げたものを、、・クで 区切って並べる。ファシリティとレベルの例を表 4 ー 6 、表 4 ー 7 に示す。これ らのファシリティとレベルを指定する代わりにワイルドカードゞ * クを使うこ 表 4 ー 6 syslog のファシリティ ともできる。 ファシリティ auth authpriv cron daemon kern lpr mail 意味 logi 広 su などの認証システム auth と基本的に同し クロックデーモン 185 sendmail などのメールシステム lpd 、 lpr などのプリンタシステム カーネルメッセージ 他のファシリティに属さないデーモン
42 システムの保護 いことには UNIX はもともとソースコードと共に配布されていたオペレー ティングシステムであり、この暗号化のためのアルゴリズムも公開されてい るし、暗号化の機構は、ライプラリ関数としても提供されている。つまり、 ューサーは多くの文字列を暗号化して比較を行うことにより、他人のパス ワードを知ることができるわけである。現在の計算機の処理能力は 10 年前 とは比べものにならないくらい高くなり、このような行為が短時間で可能に なった。このような状況下で管理者は自分で自分が管理しているシステム の /etc/passwd ファイルを使ってパスワード破りを試みることによって破ら れやすいパスワードを事前に知ることができ、不正なユーザーが他人のアカ ウントでログインするといったことを未然に防げる。このためのプログラム として AIec 、 David 、 Edward 、 Muffett らが作成した crack が有名である。 crack は辞書とパスワード生成規則を与えることにより、辞書からさまざ まなパスワードを生成し、暗号化を行い、 /etc/passwd に書かれているユー サーの暗号化されたパスワードとの比較を行う。これにより、破られやすい パスワードをユーサーが使用していないかを調べることができる。辞書とし ては crack に付属されている辞書だけではなく、日本語の辞書なども付け加 部のユーサーはアイドルの名前などを好 えておくことをお薦めする。特に んで付けるようである。辞書は高橋裕信氏が作成した k ashi などを使って、 WNN や SKK の辞書を基に作ればよい。 また、パスワードを付ける側も 辞書にないこと 英字だけでなく数字、記号などを積極的に入れること すばやく打てるパスワードであること 忘れにくいこと を念頭においてパスワードを生成するようにしてはしい。また、付けたパス ワードをメモしておくなどの行為をしてはならない。 また、管理者は passwd コマンドを CIyde Hoover が作った npasswd などに 入れ替えることにより、破られやすいパスワードをユーサーが付けることを 未然に防ぐこともできる。 パスワードのはかに気を付けなければならないこととしてユーサー名があ 177
2 章 BSD の構造 て説明する。 BSD のカーネルに含まれているネットワーク機能は ISO/OSI(International ()rganization for Standardization 0 Ⅱ Open Systems lnterconnection) の 7 階層参照モデルのセッションレイヤからトランスポートとネットワークレイ ヤのすべての部分である。構造としての特徴は、ネットワークプロトコルと ネットワークインターフェイスを自由に選べ、新しいものを自由に組み込め るように作られていることである。 たとえば、現在の BSD/386 ではカーネルのソース木の中に netccitt 、 netimp 、 netinet 、 netiso 、 netns 、 netrmp というテ。イレクトリを朱早っている。 これらの一部はまだ、完全に実装されていないが、複数のネットワークプロ トコルを同時に実装できることを示している。 このような特徴は、ネットワークソフトウェアの階層的構造によって実現 されている。 27.5 BSD のプロセス間通信ソフトウェアの構造 BSD のプロセス間通信ソフトウェアの構造は図 2 ー 1 1 のような階層構造に なっている。 こで、ユーザープログラムは、ソケットを利用した通信を行う際に、も しその通信がネットワークを介したものであれは、これらの階層のプログラ ムを介してネットワーク・ハードウェアインターフェイスへの通信となるの である。この階層構造を具体的に形成しているのは、各層のプログラムとそ の関数のリストを管理する表 ( プロトコルスイッチ ) 、それに、通信用のデー タを取り扱うためのメモリ管理機能である。 カーネルがプロトコルスイッチを管理し、そのプログラムに対する要求に 応じてそのリストを参照しながら各関数を呼び出すという方式は、通常のデ バイスドライバと同じ方式であるが、リストに登録できる関数の種類が、そ れぞれの機能、すなわち、ソケット、プロトコル、インターフェイスの目的 に適合したものとなっている。登録されている関数などの項目の数は、デバ イスドライバよりはるかに多い。 いすれにせよ、デバイススイッチと同様な方式でプロトコルを組み込むこ とにより、各プロトコルの処理プログラムを部品として取り扱うことができ、 72
7 .2 7 .3 7 . 4 7 . 5 7 . 6 7 . 7 7 . 8 7 . 9 8 章 8 ・ 1 10 目 インタープリタ 次 7 . 1 . 5 7 . 1 . 6 7 . 1 . 7 make 7 . 2 . 1 7 . 2 . 2 7 . 2 . 3 共有ライプラリ・ アーカイプファイル・・ st 「 ip コマンド・ make コマンド・ touch コマンド・ make の応用・ 履歴管理 7 . 3 . 1 RCS ・ 7 . 3 . 2 CVS ・ テパッガ patch プロファイラ 7 . 7 . 1 7 . 7 . 2 7 . 7 . 3 7 . 7 . 4 7 . 7 . 5 シェルスクリプト・ sed/awk ・・ perl ・ Emacs Lisp ・ その他のツール・・ カーネルの再構築 7 . 8 . 1 ソース木・・ 文書処理 7 . 9 . 2 移植に関する留意点・・ 7 . 9 . 1 NET / 2 以降と以前の違い・・ 移植について TEX 8 . 1 . 1 8 . 1 . 2 8 . 1 . 3 WEB システム・・ 他のシステムへの移植と日本語化・・ 旧 ltex 、Ⅵ rtex ・ ・・ 342 ・・ 343 ・・ 343 ・・ 344 ・・ 344 ・・ 347 ・・ 348 ・・ 349 ・・ 349 ・・ 353 ・・ 3 5 7 ・・ 360 ・・ 363 ・・ 3 6 5 ・・ 365 ・・ 370 ・・ 3 7 1 ・・ 3 7 2 ・・ 3 7 4 ・・ 379 ・・ 379 ・・ 381 ・・ 3 8 1 ・・ 383 ・・ 387 ・・ 387 ・・ 389 ・・ 390
目 次 6 章 6 . 1 6 .2 6 . 3 6 .4 7 章 7 . 1 生活環境の整備 日本語入力 サーバの起動と終了・・ Mu 厄での利用・・ kinput2 辞書管理・・ 他のユーサーとのコミュ ユーザー情報の取得 リアルタイムコミュ 電子メール・・ 6 . 1 . 1 6 . 1 . 2 6 . 1 . 3 6 . 1 . 4 6 . 2 . 1 6 . 2 . 2 6 . 2 . 3 6 . 2 . 4 6 . 2 . 5 6 . 2 . 6 ニケーション ニケーション・ 自己防衛・・ ネットニュース・ メールに関連した情報・ 便利なツール 6 . 3 . 1 6 . 3 . 2 6 . 3 . 3 6 . 3 . 4 6 . 3 . 5 6 . 3 . 6 6 . 3 . 7 6 . 3 . 8 辞書・ アーカイプ・・ 文字コード変換・ 表計算・ MS-DOS との共存・・ 画像の表示と処理・・ お知らせサービス・・ 工ンターテイメント・ より快適な環境を求めて C コンバイラ ソフトウェア開発環境 7 . 1 . 1 7 . 1 . 2 7 . 1 . 3 7 . 1 . 4 cc コマンド・ G N U CC ・・ ライブラリ・ ライプラリの作り方・・ ・・ 284 ・・ 284 ・・ 286 ・・ 29 2 ・・ 29 6 ・・ 299 ・・ 29 9 ・・ 302 ・・ 304 ・・ 3 1 0 ・・ 3 1 3 ・・ 3 1 8 ・・ 320 ・・ 320 ・・ 3 2 1 ・・ 322 ・・ 323 ・・ 324 ・・ 327 ・・ 328 ・・ 331 ・・ 333 ・・ 336 ・・ 3 3 6 ・・ 339 ・・ 339 ・・ 340 9
4 章システム環境の設定と管理 設定したファイルはおろか、あらかしめ設定されていたファイルさえも失っ てしまうことがある。そうでなくともまた、 1 台のシステムを複数の管理者 で管理している場合には、 1 つの設定ファイルを同時に複数の管理者が編集 してしまい、取り返しのつかない状態になることがまれにある。このような 状況を避けるために、重要な設定ファイルはリビジョンコントロール・シス テムによって管理しておくことが望ましい。 リビジョンコントロール・システムを使って設定ファイルを管理すること によって次のような利点がある。 以前の設定に容易に戻せる 複数の管理者がいる場合にも排他的にファイルの変更ができる 実際に RCS を使って BIND システムの管理をする例をあげる。 BIND シ ステムを管理する場合、通常、Ⅱ amed. b 。。 t ファイルのみが / etc ディレクトリ にあり、他のファイルは /etc/ns などのディレクトリ下に置かれる。このよ うな場合、 /etc/named. boot は /etc/ns/named. boot へのシンポリックリンク にしておくと BIND システムに関するリビジョンコントロールを同じ場所で 行え、 RCS ディレクトリを 1 つにすることができる。各ファイルに対するア クセスは管理者のみ許しておく。管理者は co ー 1 コマンドで編集するファイ ルをチェックアウトすることによって排他的にファイルを変更できる。チェッ クイン後は ci ーⅡコマンドでファイルをチェックインしてそのときのログを 残しておくことにより、だれが何のためにファイルを編集したか他の管理者 が見ても分かるようにしておく。変更したあとはスーパーユーサーになり、 named に設定ファイルをリロードさせる。 BIND を RCS と組み合わせて使い、 make や sed 、 awk などと組み合わせる ことにより、 Serial を自動的にインクリメントするように設定することもで きる。このときの Makefi1e と管理ファイルの例を図 4 ー 29 ~ 図 4 ー 31 に示す。 この例ではファイルを編集する前に make co 、編集した後に make ci を実行 する必要がある。 188