Info: Version 1.8.x is available.
Last modified: $Date: 2024-03-31 15:45:12 +0000 (Sun, 31 Mar 2024) $
TOMOYO Linux は NTT データが開発し, 2005 年 11 月に GPL ライセンスで公開したセキュアOSです.一部の機能は 2009 年 6 月にリリースされた Linux カーネル 2.6.30 にも含まれています.技術的な情報については,『ネットワークセキュリティ Expert 5 』(技術評論社/ ISBN4-7741-2973-9 )や SourceForge のプロジェクトページにて紹介していますが,本連載では読者の方々に実際に TOMOYO Linux を体験し,使いこなしていただくことを目的として解説したいと思います.どうぞ最後までおつきあいください.
セキュアOSの概要と TOMOYO Linux の導入手順について説明します.手順については, VMware 上に構築した CentOS 5 に TOMOYO Linux カーネルバージョン 1.7.4 を導入します.導入しただけではつまらないので,実際に TOMOYO Linux カーネルで起動し, TOMOYO Linux のポリシー自動学習を「体験」していただくまでが今回の内容です.
セキュアOSは一般には,強制アクセス制御と最少権限を備えたOSとして説明されることが多いでしょう.いずれの機能も,OSが提供する機能の利用を制限するためのしくみです.筆者は「セキュアOSは負の技術」だと思っています.その意味は,セキュアOSを導入しても機能やできることが増えるわけではなく,その逆に「できることを減らす」のがセキュアOSだからです.さらに「できることを減らすための作業や負荷が伴う」という嬉しくないおまけまで付きます.なぜ,わざわざ手間暇かけてできることを制限しなければならないのでしょうか?その理由は,セキュリティの強化につきます.標準のOSは,不正アクセスなどによりコントロールを奪われてしまうと,その汎用性が仇になりかねません.たとえば,インターネットに公開しているWebサーバでは,「Webサービスだけ提供できれば良い」のであって,他の機能は使えないほうが良いわけです.もともと汎用の機能を目指して作られたものを制限する,それがセキュアOSです(図1,図2).
■図1 標準のOSではアクセスは自由 |
■図2 セキュアOSはポリシーに従いアクセスを制限する |
「制限」は,おもにアクセス制御の強化という形で実装されます.それがいわゆる「強制アクセス制御」, MAC ( Mandatory Access Control )です.コンピュータには,どれが必要であり,どれが必要でないかはわかりません.したがって,強制アクセス制御という仕組みに対して,実行して良い機能と悪い機能を告げる必要があります.その定義が「ポリシー」です.つまりセキュアOSを導入するということはポリシーを管理するという作業が義務付けられるということになります.セキュリティに関する重要度は日増しに高まる一方です.それなのになぜセキュアOSはなかなか普及しないのでしょうか?それにはいくつかの要因が存在しますが,その最大のポイントは「セキュアOSの概念が難しく,ポリシーの管理運用が非常に複雑」な点にあるのではないかと思います.ここでは深く説明しませんが,長年 Linux の管理をしてきた人であってもポリシーを書くという作業は容易には行えないのです.
このセキュアOSの本質的な課題であるポリシーについて,「OS自体がポリシーを自分で生成する」というアプローチにより実用レベルの「使いこなせるセキュアOS」を実現したのが TOMOYO Linux です. TOMOYO Linux であれば, Linux をインストール,管理した経験があれば,誰でもその日から使うことができます.連載の第1回では, TOMOYO Linux の導入から,最初のポリシーを自動学習するまでを解説します.とくに難しい部分はないので,ぜひ実際に手を動かし, TOMOYO Linux が拓く新しい世界を体験してみてください.
TOMOYO Linux はカーネル 2.4.37 および 2.6.27 ~ 2.6.37 と、幾つかのディストリビューションの最新カーネルに対応しています.
本連載では, CentOS 5 を例に挙げて説明しますが,どのディストリビューションでもほぼ同じ手順で利用いただけます.
TOMOYO Linux 対応カーネルとツールのインストールに従ってカーネルをインストールします.
ユーティリティは /usr/sbin/ ディレクトリにインストールされます.各プログラムの役割は図7のとおりです.それぞれの使い方については,本連載の中で登場したところで説明していきます.
■図7 TOMOYO Linux の管理を行うためのプログラム
|
TOMOYO Linux のユーティリティを保存してある場所を環境変数 PATH に追加しておきます. /bin/bash を使っている場合は ~/.bashrc に図8の行を追加します.
■図8 環境変数 PATH の設定
export PATH=$PATH:/usr/sbin |
TOMOYO Linuxではポリシーに書かれていないアクセスは拒否されます.必要なアクセスはすべて洗い出して記述しなければなりませんが,ポリシーをコンパクトにするために「例外ポリシー」という概念を持っています.
例外ポリシーの内容は,ポリシーを策定しながら随時見直しを行いますが,図9のコマンドを実行することにより初期値を登録します.
■図9 ポリシーの初期化
# /usr/lib/ccs/init_policy Creating policy directory... OK Creating exception policy... OK Creating domain policy... OK Creating manager policy... OK Creating default profile... OK Creating memory quota policy... OK Creating module loader... OK |
TOMOYO Linuxではアクセス制御の方法をプロファイルという概念により管理します.プロファイルの詳細と制御の方法(手順)については,次回以降紹介します.
先ほど実行した init_policy により /etc/ccs/profile.conf というファイルが作成されていますが,今回はこのファイルの内容を図10の内容で上書きしてください.1行目はプロファイルのバージョン,2行目は「ファイルのアクセス制御を学習モードにする」という意味です.
■図10 /etc/ccs/profile.confに指定する内容
PROFILE_VERSION=20090903 0-CONFIG::file={ mode=learning } |
ここまでで準備は完了です(お疲れさまでした).
reboot コマンドによりシステムを再起動します(図11).
■図11 再起動
# reboot |
再起動後表示される GRUB メニューでは TOMOYO Linux カーネルを選択してください(図12).
■図12 TOMOYO Linuxカーネルを選択 |
ここまでの手順が正しく行われると,「学習モード」で TOMOYO Linux が起動します(図13).
■図13 TOMOYO Linux カーネルが起動 |
もし, TOMOYO Linux が原因でシステムが起動できなくなった場合には,カーネル起動時のコマンドラインに ccsecurity=off というパラメータを追加することにより, TOMOYO Linux を無効化して起動することができます.
TOMOYO Linux は Linux 標準のライブラリやユーザランドのツール類を書き換えないのでアンインストールは簡単です.都合により TOMOYO Linux をアンインストールしたくなった場合には,起動時にポリシーを読み込むためのプログラムである /sbin/ccs-init を削除すると元の状態に戻ります.また,カーネルも削除したい場合には TOMOYO Linux でないカーネルで再起動してから rpm コマンドでパッケージの削除を実行してください.
TOMOYO Linux ではドメインという単位でアクセス制御を行います.すべてのプロセスはいずれか1個のドメインに属しており,原則としてプログラムを実行するたびに異なるドメインへ遷移します(図14).
■図14 ドメイン遷移 |
TOMOYO Linux におけるドメインは, <kernel> を基点としたプロセスの起動履歴を文字列として結合したものになります.たとえば,「カーネルプロセス」のドメインが「 <kernel> 」,「カーネルプロセスから起動される /sbin/init 」のドメインは「 <kernel> /sbin/init 」,「 /sbin/init から起動された /etc/rc.d/rc 」のドメインは「 <kernel> /sbin/init /etc/rc.d/rc 」のようになります.
それでは,実際に TOMOYO Linux が学習した内容を確認してみましょう. TOMOYO Linux には,CUIのポリシーエディタが付属しています. root でログインして, ccs-editpolicy コマンドを実行してください(図15.図12で TOMOYO Linux カーネルを選択しなかった場合はエラーメッセージが表示されます).
■図15 ポリシーエディタを実行する
# /usr/sbin/ccs-editpolicy |
ポリシーエディタには複数の機能がありますが,起動直後は「 <<< Domain Transition Editor >>> 」(ドメイン遷移エディタ)となっています(図16).画面の1行目はタイトルを表示する領域,2行目はメッセージを表示する領域,3行目は現在カーソルのある行のドメイン名を表示する領域です.4行目以降について,先頭の数字が行番号,2番目の数字がプロファイル番号です(プロファイル番号については次回説明します).図16では全部で 342 のドメイン遷移が学習されていることがわかります(プロファイル番号やドメイン遷移の数は操作内容や設定により変化します).
■図16 ポリシーエディタ起動直後の画面 |
矢印キーを用いてスクロールしながら TOMOYO Linux が「学習」したドメインの遷移内容を一覧してみましょう.図17は /sbin/init からのドメイン遷移です. /sbin/init から /etc/rc.d/rc が実行され, /etc/rc.d/rc から /etc/rc.d/init.d/ ディレクトリにあるプログラムを実行していることがわかります.
■図17 /sbin/initのドメイン |
ここでは具体例として,実行しているポリシーエディタ自体のドメインのアクセス制御の内容について調べてみましょう.「 F 」を入力すると,カーソルが最下行に移り入力待ちとなるので, ccs-editpolicy と入力して「 Enter 」を押すと,現在操作を行っているポリシーエディタのドメインにカーソルが移動します(図18).
■図18 /usr/sbin/ccs-editpolicyのドメイン |
図18では, TOMOYO Linux はポリシーエディタのドメインを「 <kernel> /sbin/mingetty /bin/login /bin/bash /usr/sbin/ccs-editpolicy 」( /sbin/mingetty から起動された /bin/login から起動された /bin/bash から起動された /usr/sbin/ccs-editpolicy )として認識していることがわかります( /usr/sbin/sshd から起動された /bin/bash から起動された /usr/sbin/ccs-editpolicy の場合には「 <kernel> /usr/sbin/sshd /bin/bash /usr/sbin/ccs-editpolicy 」として認識します).
このドメインに対して,学習されているアクセス制御の内容を見るためには「 Enter 」を入力します.すると図19のような画面になるはずです.画面の最上部の行が「 <<< Domain Transition Editor >>> 」から「 <<< Domain Policy Editor >>> 」になりました.この画面は,「 <kernel> /sbin/mingetty /bin/login /bin/bash /usr/sbin/ccs-editpolicy 」ドメインのアクセス制御内容で,画面では現在7つの内容が登録されています.4行目以降について,各行の先頭の数字は行番号です. allow_read/write は「読み書きモードでのオープンを許可」, allow_read は「読み込みモードでのオープンを許可」, allow_ioctl は「指定された番号での ioctl 要求を許可」を意味します.
■図19 /usr/sbin/ccs-editpolicyのドメインに対するアクセス許可 |
この状態から再びドメイン遷移エディタに戻るためには「 Enter 」を入力します.ポリシーエディタ自身の終了は「 Q 」により行います. ccs-editpolicy は(ディスク上のポリシーファイルではなく)現在カーネルに存在しているポリシーを直接編集するためのエディタです.そのため, ccs-editpolicy で行ったポリシーの登録,削除の操作は即時に反映されますし,学習モードであれば時々刻々追加されたポリシーの内容をモニターすることができます.
さまざまなコマンドを実行し,それがどのようにドメインとして登録され,アクセス制御内容が記録されているかを確認してみてください.何度か操作を行うことにより, TOMOYO Linux のドメイン管理,学習機能,ポリシーについて自然にご理解いただけると思います.このわかりやすさこそが TOMOYO Linux の特徴です.
現在実行中のプロセスが属しているドメインとそのドメインに割り当てられているプロファイルを確認するには ccs-pstree コマンドを実行してください.プロファイル番号,プロセス名,プロセスID,ドメイン名の順番で pstree のように出力されます(図20).
■図20 実行中のプロセスに割り当てられているドメインを表示 |
カーネル内部に保持されているポリシーをディスクに保存するには, ccs-savepolicy コマンドを実行してください(図21). ccs-savepolicy を実行することで, /etc/ccs/ ディレクトリに exception_policy.conf と domain_policy.conf という2つのファイルが作成されます.
■図21 カーネル内のポリシーをディスク上のファイルに保存する
# /usr/sbin/ccs-savepolicy |
TOMOYO Linux のポリシーはファイル名,ディレクトリ名をそのまま用いたテキストファイルとなっています.ディスク上に保存されているポリシーをカーネル内部に読み込むには, ccs-loadpolicy コマンドを実行してください(図22).
■図22 ディスク上のポリシーファイルをカーネルに読み込ませる
# /usr/sbin/ccs-loadpolicy af |
オプションの a は前述の exception_policy.conf と domain_policy.conf の両方を, f は上書き,を意味しています. f を指定しなかった場合,現在のカーネル内のポリシーにディスク上のポリシーが追加されます.
今回は TOMOYO Linux の導入から,ファイルに対するアクセスの自動学習の手順と学習結果の保存までをご紹介しました.次回は定義されたポリシーに基づきアクセスを制御するまでを紹介します.どうぞお楽しみに.