連載
» 2003年03月18日 00時00分 公開

全貌を現したLinuxカーネル2.6(第4章):IPv6、UML、セキュリティ機能の統合 (2/2)

[加藤丈治,富士通]
前のページへ 1|2       

可能性を広げる新機能の取り込み

Linux Security Moduleの取り込み

 Linux Security Module(LSM)とは、カーネル内のセキュリティチェック機構へのフック関数群を定義するフレームワークを提供する機能(運用環境固有のセキュリティカーネルを実装するための機能)です。本機能を用いることで、カーネルのセキュリティチェック機能をユーザーが独自に拡張することが可能です。これにより、ユーザー固有のセキュリティ方針に基づいたシステムの運用を実現できます。

 LSMを有効にすると、I/Oポートアクセスの許可などのセキュリティ・チェックポイントで、ユーザーが登録したLSMのコールバック関数が呼び出され、操作の正統性チェックが行われます(図7)。

図7 LSMの構造 図7 LSMの構造

 LSMで定義可能なセキュリティ・チェックポイントは、150項目以上にも上ります。主な項目として、以下のような操作に対するセキュリティ機構を実装可能です。

  • I/Oポートへのアクセスの可否
  • ホスト/ドメイン名の設定の可否
  • システムのシャットダウンの可否
  • プロセス生成/終了の可否
  • 各種シグナル操作の可否
  • 各種ファイルシステム操作の可否
  • 各種ソケット操作の可否

 また、LSMの標準カーネルへの統合に伴い、Linuxケイパビリティ関連のコードがLSM内に統合されました。

User Mode Linuxの統合

 カーネル2.6で注目を集めている機能の1つが、User Mode Linux(UML)の統合です(編注)。

編注:UMLの利用方法については、仮想OS「User Mode Linux」活用法を参照。


 UMLとは、Linux上のユーザープロセスの1つとして実行するLinuxカーネルです。これを用いると、1つの装置上で複数のLinuxカーネルを動作させることができます(図8)。UMLは、実機上で直接動作しているLinuxカーネル(これをホストと呼ぶ)上のアプリケーションとして動作します。

図8 UMLの仕組み 図8 UMLの仕組み

 UMLでは、ptraceシステムコールを巧みに使用することで、システムコールなどカーネルの各機能をユーザー空間上で実現します。具体的には、次のようなことを行っています。

  • システムコール
    UML上のアプリケーションは、通常のLinuxと同様にトラップコール(int80)でシステムコールを発行します。UMLのカーネルは、UML上のプロセスをptraceシステムコールによって監視することで、発行されたシステムコールを横取りして処理します。

  • プロセス生成/破棄
    UML上でプロセスが生成されると、UMLはホストになっているLinuxカーネル上にプロセスを生成し、当該プロセスに対してptraceシステムコールを発行することで、そのプロセスの監視を開始します。

  • シグナル配送/メモリフォールト
    UMLでは、カーネル空間から抜けるたびにUML上のプロセスにシグナルが送信されているかをチェックします。シグナルの送信を検出したら、SIGUSR2を実行中のプロセスに送信し、SIGUSR2ハンドラが実行中プロセスのシグナルハンドラをコールするようになっています。また、メモリフォールトは、SIGSEGVの配送を検出してUMLが処理します。

 ファイルや各種デバイスへのアクセスは、UML上の仮想化機構を通して行います。UMLには、主に以下のような仮想化機構が搭載されています。

  • ホストファイルシステム
    ホスト上のファイルシステムに格納されているファイルをアクセスするための機構です。

  • 仮想シリアル回線
    UML上のプロセスがシリアル回線に入出力した内容を、ホスト上の端末に回送する機構です。

  • 仮想ブロックデバイス
    ホスト上の任意のファイルをUMLからブロック型デバイスとしてアクセスするための機構です。

  • 仮想ネットワークデバイス
    UML上のプロセスからホスト上のネットワークデバイスにアクセスするための機構です。

Kconfigの導入

 カーネル2.6では、カーネルのコンフィグレーション言語が従来のCML1(Configuration Menu Language 1)から、Kconfigに変更されます。Kconfigは、CML1とは別に新たに書き起こされたコンフィグレーション言語です。

 Kconfigの主な特徴は、次のとおりです。

  • 新規GUIコンフィグレータ
    Kconfigには、Qtを用いたGUIベースのコンフィグレータが付属しており、設定項目がツリー形式で表示されるなど、見た目に分かりやすくなっています(画面1)。
画面1 Kconfigによる新GUI 画面1 Kconfigによる新GUI(画像をクリックすると拡大表示します)
  • ヘルプ項目の統合
    以前のコンフィグレータでは、ヘルプ項目がConfigure.helpという独立したファイルに格納されていましたが、Kconfigではコンフィグレーション定義ファイルに統合されました。

  • 記述力の強化
    Kconfigでは、CML1とは異なった文法で設定項目を記述します。これに伴い、各項目間の依存関係を直接記述できるようになるなど、設定記述言語としての記述力の向上が図られています。

  • CML1互換の操作体系
    Kconfigは、従来と同様の手順でカーネルのコンフィグレーションおよび構築を行うことができるようになっています。以下のようなコマンドを発行することで、CUI/GUIのコンフィグレータが起動します。
make config
対話形式によるテキストベースのコンフィグレーション
make menuconfig
メニュー形式によるテキストベースのUIでコンフィグレーション
make xconfig
QtベースのGUIでコンフィグレーション

 カーネル2.6では、大規模ファイルシステムサポートやカーネルレベルプリエンプションなど、商用UNIXが持つべき機能が多く含まれるようになります。また、NUMAアーキテクチャへの対応も強化されつつあり、これまで商用OSの独壇場であったハイエンドサーバでの活用も期待されます。これらの強化により、Linuxは名実共に本格的な商用運用が可能なOSの1つとなっていくことは間違いないことでしょう。

 また、商用利用時に重要となる障害追跡系機能についても、IBMやSGIなどによって活発に開発が進められています。

  • LKCD(Linux Kernel Crash Dump)
    カーネル障害発生時のメモリ状態をハードディスク(swapパーティション)上に保存し、後から障害要因を解析する機能です。SVR4に搭載されているcrashコマンド関連機能のLinux版です。

  • LTT(Linux Trace Toolkit)
    アプリケーションやカーネルイベント(システムコールやCPU例外の発生など)のログをディスク上に保存し、障害発生時の動作状況を後から解析するためのツールです。

  • kprobes(Kernel Probes)
    ユーザーがあらかじめ指定したアドレス(プローブポイント)をカーネルが実行した際に、登録されているコールバック関数を呼び出す機能を提供する機構です。特定区間の実行速度の計測や障害発生時の動作解析などに有効です。

注:LKCD/LTT/kprobesの詳細については、以下のURLを参照ください。

LKCD:http://lkcd.sourceforge.net/
LTT:http://www.opersys.com/LTT/
kprobes:http://www-124.ibm.com/linux/projects/kprobes/


 これらの機能は残念ながらカーネル2.6には取り込まれませんでしたが、パッチを適用することで利用可能です。

 一方、uCLinuxの統合やPOSIX高精度タイマAPI()など、組み込み分野での利用において有用な機能が数多く取り入れられていることもカーネル2.6の特徴の1つです。

注:本稿では触れませんでしたが、POSIX高精度タイマAPIがカーネル2.5.63から取り入れられました。


 従来、NUMA対応や障害追跡機構など、ハイエンドサーバ向け機能の不備はLinuxカーネルの弱点とされてきました。しかし、Linuxの開発に対する企業パワーの投入によって、これも少しずつ改善される方向にあります。今後、エンタープライズ/組み込みの両分野において、Linuxの活躍の場がより一層広がっていくと期待されます。

著者紹介

加藤丈治
富士通 ファームウェア開発推進統括部開発部


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。