次のページ 前のページ 目次へ

6. カーネルのセキュリティ

ここではセキュリティに関連するカーネル設定オプションの説明と,それらの 動作や使い方に関する説明を行います.

カーネルはコンピュータのネットワークを制御するので,カーネルをこの上な く安全にしておくことと,カーネルそのものが破られないようにすることは重 要です.最近出現したネットワーク攻撃のいくつかを防ぐために,カーネルの バージョンは最新に保つようにすべきです.新しいカーネルは ftp://ftp.kernel.org またはお使いのディストリビューション のベンダから入手できます.

本家の Linux カーネル用に 1 つに統合された暗号化パッチを提供している国 際的なグループもあります.このパッチは,各種暗号サブシステムや輸出制限 のために本家のカーネルに含まれていない機能を提供します.詳しい情報につ いてはグループの WWW ページ http://www.kerneli.org をご覧ください.

6.1 バージョン 2.0 のカーネルのコンパイルオプション

2.0.x カーネルでは以下のオプションが該当します.カーネルを設定する際に これらのオプションを確認することになるでしょう.ここに挙げたコメントの 多くは ./linux/Documentation/Configure.help から取っています. このコメントは,カーネルのコンパイル時にmake config の Help 機能で参照できるドキュメントと同じものです.

6.2 バージョン 2.2 のカーネルのコンパイルオプション

2.2.x カーネルでも多くのオプションは同じですが,新しいオプションもいく つか開発されています.ここに挙げたコメントの多くは ./linux/Documentation/Configure.help から取っています.このコ メントは,カーネルのコンパイル時に make config の Help 機能で 参照できるドキュメントと同じものです.以下では新しく追加されたオプショ ンだけを示します.必要な他のオプションについては,2.0 用の説明を参照し てください.2.2 カーネルにおける最大の変更点は,IP firewalling のコー ドです.2.2 カーネルからは,IP firewalling を行うには, ipchains を使うようになりました.2.0 カーネルで使われていた ipfwadm は使いません.

6.3 カーネルデバイス

Linux には,セキュリティの向上にも使えるブロックデバイスやキャラクタデ バイスがいくつかあります.

/dev/random/dev/urandom という,いつでもランダム なデータを取り出せる 2 つのデバイスがカーネルに用意されています.

/dev/random/dev/urandom はどちらも安全であり, PGP の鍵や ssh のチャレンジ文字列の生成や,ランダムな数字を必 要とする他のアプリケーションで利用できるはずです.これらを入力として数 の初期シーケンスを与えても,攻撃者が次の数を予測することは不可能なはず です.これらの入力から得た数字があらゆる意味において言葉通りランダムで あることを保証するため,大変な努力が行われてきました.

2 つのデバイスの唯一の違いは,/dev/random はランダムなバイト 列を全て使う点と,計算を行うためのユーザの待ち時間がより長い点です.一 部のシステムでは,ユーザが生成した新しいエントリをシステムに入るのを待 つ長い間,ブロックされてしまうことに注意してください.したがって, /dev/random を使う前には気を付ける必要があります.(これを使う 最も良い場面は多分,機密キー入力情報を生成する時で,ユーザに「はい,も う十分です」と表示するまでキーボードを繰り返し叩いてもらう場合です.)

/dev/random は非常に高品質のエントロピーを持ち,割り込み間の 時間等の測定値から生成しています.このデバイスは十分なビット数のランダ ムデータが利用可能になるまでブロックします.

/dev/urandom も同様ですが,エントロピーの保持量が少なくなると, 現在保持している値の暗号学的に強いハッシュ値を返します. これは /dev/random ほど安全ではありませんが,ほとんどの目的に 対してはこれで十分です.

このデバイスは以下のようにして読み出すことができます:

        root#  head -c 6 /dev/urandom | mmencode
これはコンソールに 6 つのランダムな文字を出力します.これはパスワード 生成などによいでしょう.mmencodemetamail パッケー ジに入っています.

アルゴリズムの説明については, /usr/src/linux/drivers/char/random.c を参照してください.

これについて筆者(Dave)に教えてくださった,Theodore Y. Ts'o さん, Jon Lewis さん他の Linux-kernel ML の皆さんに感謝します.


次のページ 前のページ 目次へ