TOMOYO LinuxはNTTデータが独自に開発した,Linuxのセキュリティを向上させる技術です。2005年11月11日にGPLライセンスのオープンソース・ソフトウエアとして公開されました。SELinuxなどと同様,アクセス権限を細分化し,きめ細かいアクセス制限を行うセキュアOSと呼ばれる仕組みです。

 セキュアOSの課題は,設定が困難なことです。この問題を解決するため,TOMOYO Linuxでは,学習に基づく自動設定というアプローチを採用しました。既にNTTデータ社内のWebサーバーとして一年半以上安定稼働しており,社外にも導入済みシステムが存在します。NTTデータでは,今後オープンソースによるシステム構築において,セキュリティ強化のためTOMOYO Linuxの積極的な採用を検討しています。

 TOMOYO Linux は,Linux の標準カーネルへのパッチとして提供されています。そのため,実際に利用するためにはディストリビューションや環境に応じて適切な設定を用意する必要があり,カーネルコンパイルの経験がない方にはやや難しいかもしれません。そこで本稿では,RedHat Linux 9 について,TOMOYO Linuxを導入し,実際にポリシーを学習し,学習されたポリシー以外は実行できないことを確認するまでの手順を紹介します。読者の方の環境の違いの影響を受けないようにするために,Red Hat Linux 9 を VMware 上で動作させる場合について記述します。

 本記事の手順を実行すれば必ず TOMOYO Linux を構築,利用できます。カーネルをコンパイルした経験のない方も是非勇気を出してチャレンジしてTOMOYO Linuxと強制アクセス制御の世界を体験してみてください。

TOMOYO Linux を開発した理由

 システムのセキュリティを高めるには,OS レベルでのセキュリティ強化が不可欠です。従来のセキュリティ管理はアプリケーションレベルのものが中心であり,アプリケーションにぜい弱性が発見されたらパッチを適用するという作業を繰り返してきました。しかし,パッチを適用するたびに動作確認を行う必要があるなど,管理者の負担が大きいものでした。

 OSレベルでのセキュリティ強化では,「強制アクセス制御」という手法がよく利用されています。強制アクセス制御を導入すると,アプリケーションの振る舞いをOSが責任を持って制限することができるようになります。そのため,アプリケーションにぜい弱性が発見されたとしても,OSがアプリケーションの振る舞いを制限してくれるため被害を最小限に留めることができるようになります。例えば,FTP サービスにぜい弱性が含まれていて,FTP サービスを乗っ取られた場合,標準の Linuxではシステムは無防備状態となってしまいますが,強制アクセス制御が有効になっていれば被害はFTPサービスに対してアクセスが許可されている範囲に限定されます。

 このように強制アクセス制御は大変有効ですが,OS がアプリケーションの振る舞いを制限できるようにするためには,「どのような振る舞いを許可し,どのような振る舞いを禁止するか」というルールを OS に教えてあげる必要があります。このルールのことを「ポリシー」と呼びます。Linux カーネル 2.6 では SELinux という「ポリシーに基づく強制アクセス制御」を行う機能が組み込まれています。

 しかし,SELinux のポリシーは大変複雑であり,適切なポリシーを策定できるようになるには高度なスキルが必要です。そこで,NTT データでは,標準的な Linux サーバーの管理スキルでも使いこなせるよう,ポリシーを策定する労力を大幅に削減できる TOMOYO Linux を開発しました。TOMOYO Linuxは「Task Oriented Management Obviates Your Onus on Linux」の略で,「タスク指向の管理はLinuxに対するあなたの重荷を予防します」を意味します。

TOMOYO Linux の構造

 TOMOYO Linux の最大の特徴は,「学習モード」と呼ばれる機能を備えていることです。これは,システム管理者が許可したい操作を一通り行うだけで,その操作のみを許可し,それ以外の操作を禁止できるポリシーを自動生成してくれます。SELinux には真似のできない機能です。

 「ポリシーの自動生成なんて信用できない」とお考えの方もいますが,TOMOYO Linux では2つの理由により自動生成しても問題が発生しにくい構造になっています。

 1つ目は,TOMOYO Linux では,「ファイル名」に基づくアクセス制御を行っている点です。SELinuxのように,1つ以上のファイルに対して1個の「ラベル」を割り当てて,その「ラベル」を使用してポリシーを記述する場合と比べて,ファイル1個を単位にアクセス許可を与えることができるので,必要以上に多くのファイルに対してアクセス許可を与えることはありません。また,「ファイル名」を使用しているので,ポリシーを策定する人が一目で理解できるという利点もあります。

 2つめは,TOMOYO Linux では,プログラムを実行するたびに「ドメイン遷移」と呼ばれる状態遷移を行っている点です。SELinux ではドメイン遷移を行うか否かはポリシーを策定する人が決定しますが,TOMOYO Linuxでは自動的にドメイン遷移を行うので,ドメインの分割方法で悩むことはありません。プログラムの実行履歴に基づいてドメインが自動的に生成されるため,状況に応じた必要最低限のアクセス許可を与えることができます。また,ドメイン遷移がツリー構造なので,把握が容易です。

 これらにより,SELinuxでは難しい「ポリシーの自動生成」を実用に足るものにすることができます。

 それでは,実際にTOMOYO Linuxを導入してみましょう。