以下では、Ubuntu 6.10にTOMOYO Linux 1.3.2を導入する手順を解説します。この手順書に従って操作すれば、 TOMOYO Linuxの基本的な機能を体験し、簡単な設定と運用が行えるようになります。
導入の流れは以下の通りです。
TOMOYO LinuxはLinuxカーネルへのパッチとして提供されており、 本来はLinuxカーネルのソースコードにパッチを適用する作業が必要になります。 しかしUbuntu 6.10の場合は、TOMOYO Linuxのパッチを当てたコンパイル済みカーネルパッケージが 提供されているので、今回はそれを利用します。
まずはパッケージをダウンロードします。
# wget http://osdn.dl.sourceforge.jp/tomoyo/23851/linux-image-2.6.17.14-ubuntu1-ccs-i586_1.3.2_i386.deb
次に、ダウンロードしてきたパッケージをインストールします。
# dpkg --install linux-image-2.6.17.14-ubuntu1-ccs-i586_1.3.2_i386.deb
インストールに成功すれば/boot/grub/menu.lstに以下の記述が追加されているはずです。
title Ubuntu, kernel 2.6.17.14-ubuntu1-ccs root (hd0,0) kernel /boot/vmlinuz-2.6.17.14-ubuntu1-ccs root=/dev/sda1 ro quiet splash locale=ja_JP initrd /boot/initrd.img-2.6.17.14-ubuntu1-ccs quiet savedefault boot title Ubuntu, kernel 2.6.17.14-ubuntu1-ccs (recovery mode) root (hd0,0) kernel /boot/vmlinuz-2.6.17.14-ubuntu1-ccs root=/dev/sda1 ro single initrd /boot/initrd.img-2.6.17.14-ubuntu1-ccs boot
今後カーネルの選択を行いやすくするために、 /boot/grub/menu.lstの"timeout"の行を コメントアウトしておきます。
#timeout 3
カーネルの次は、TOMOYO Linuxのツールをインストールします。 ツールには、ポリシーの管理を行うプログラムが収録されています。
カーネルと同様、sargeにはコンパイル済みのtarballが用意されていますので、 それをダウンロードして解凍します。 ツールは/root/ccstoolsディレクトリに置くことにします。
# cd /root # wget http://osdn.dl.sourceforge.jp/tomoyo/23851/ccs-tools-1.3.2-i386-Ubuntu6.10.tar.gz # tar zxf ccs-tools-1.3.2-i386-Ubuntu6.10.tar.gz
ツールのうち、ポリシーを読み込むスクリプトである.initは、ルートディレクトリに移動しておきます。
# mv /root/ccstools/.init /
カーネルの起動時にポリシーを読み込むため、/.initをカーネルのコマンドラインに追加します。 /boot/grub/menu.lstのTOMOYOカーネルのエントリのkernel行に以下のようにinit=/.initを追加してください。
重要: /.init のプロンプトやコンソールログイン画面を表示できるようにするために、 splash オプションは削除してください。
title Ubuntu, kernel 2.6.17.14-ubuntu1-ccs root (hd0,0) kernel /boot/vmlinuz-2.6.17.14-ubuntu1-ccs root=/dev/sda1 ro quiet locale=ja_JP init=/.init initrd /boot/initrd.img-2.6.17.14-ubuntu1-ccs quiet savedefault boot title Ubuntu, kernel 2.6.17.14-ubuntu1-ccs (recovery mode) root (hd0,0) kernel /boot/vmlinuz-2.6.17.14-ubuntu1-ccs root=/dev/sda1 ro single init=/.init initrd /boot/initrd.img-2.6.17.14-ubuntu1-ccs boot
以上でTOMOYO Linuxのインストールは終了です。続いて設定に移ります。
TOMOYO Linuxの設定を保存するディレクトリは/etc/ccsです。このディレクトリをあらかじめ作っておきます。
# mkdir -m 700 /etc/ccs
TOMOYO Linuxには多くの機能があり、どの機能をON/OFFにするのかの設定をプロファイルとよびます。 プロファイルは複数作成して切り替えて使うことができます。 すべてのプロファイルは/etc/ccs/status.txtという単一のファイルに保存します。
今回はファイルに対するアクセス制御の機能のみを利用するため、 以下のようにして/etc/ccs/status.txtを作成します。
# cat > /etc/ccs/status.txt << EOF 0-COMMENT=-----DISABLED_MODE----- 0-MAC_FOR_FILE=0 0-TOMOYO_VERBOSE=0 1-COMMENT=-----ACCEPT_MODE----- 1-MAC_FOR_FILE=1 1-TOMOYO_VERBOSE=0 2-COMMENT=-----PERMISSIVE_MODE----- 2-MAC_FOF_FILE=2 2-TOMOYO_VERBOSE=1 3-COMMENT=-----ENFORCE_MODE----- 3-MAC_FOR_FILE=3 3-TOMOYO_VERBOSE=1 EOF
status.txtの1行は以下のような構文になっています。
(プロファイル番号)-(設定項目)=(制御モード)
すなわち、行頭の番号がプロファイルを切り替えるためのプロファイル番号で、 '=' の左が設定項目、'=' の右が制御モードです。
設定項目COMMENTは、プロファイルを区別しやすくするためのコメントで、TOMOYO Linuxの機能には影響を与えません。
設定項目MAC_FOR_FILEは「ファイルに対するアクセス制御」を表しており、 制御モードが0なら無効、1なら学習、2なら確認(アクセス拒否ログを出力するが実際には拒否しない)、3なら強制、 という設定が行えます。
設定項目TOMOYO_VERBOSEは「アクセス拒否の情報をコンソールに出力するかどうか」を表しており、 制御モードが0なら出力なし、1なら出力ありになります。
上記設定では、プロファイル番号が0〜3の4つのプロファイルを作成しており、それぞれの意味は以下のようになります。
プロファイル0 | ファイルに対するアクセス制御を無効にする、コンソールにアクセス拒否を出力しない |
---|---|
プロファイル1 | ファイルに対するアクセス制御を学習モードにする、コンソールにアクセス拒否を出力しない |
プロファイル2 | ファイルに対するアクセス制御を確認モードにする、コンソールにアクセス拒否を出力する |
プロファイル3 | ファイルに対するアクセス制御を強制モードにする、コンソールにアクセス拒否を出力する |
プロファイル1の学習モードで行ったアクセスを元にポリシーを作成し、 プロファイル2の確認モードで仮運用して必要なポリシーが作成できているかを確かめ、 プロファイル3の強制モードで本運用としてアクセス制御を行う、 というのが基本的な運用の流れです。
TOMOYO Linuxのポリシーは先ほどの学習用のプロファイル(プロファイル1)を用いて作成できますが、 その前にいくつか準備が必要です。ポリシーの作成準備は以下の流れで行います。
ポリシーを変更することができるプログラムを、/etc/ccs/manager.txtというファイルで指定します。 ccs-toolsの中の6つのプログラムを以下のように指定してください。
# cat > /etc/ccs/manager.txt << EOF /root/ccstools/loadpolicy /root/ccstools/editpolicy /root/ccstools/setlevel /root/ccstools/setprofile /root/ccstools/ld-watch /root/ccstools/ccs-queryd EOF
TOMOYO Linuxのログは、アクセスが許可された要求のログと、アクセスが拒否された要求のログの2種類に分けることができます。 今回は、アクセス拒否ログのみを保存する設定を行います。
ログを保存するには、ccs-toolsのccs-auditdというデーモンプログラムを使用します。 アクセス拒否ログのみを保存する設定でccs-auditdをLinuxの起動時に実行するには、 まず、以下のコマンドで/etc/init.dにシェルスクリプトを作成し、実行権限を与えます。
# cat > /etc/init.d/ccs-auditd << EOF #!/bin/sh /root/ccstools/ccs-auditd /dev/null /var/log/tomoyo/reject_log.txt EOF # chmod +x /etc/init.d/ccs-auditd
そして、以下のコマンドでLinuxの起動時に呼び出すシンボリックリンクを作成します。
# update-rc.d ccs-auditd start 99 2 3 4 5 .
Adding system startup for /etc/init.d/ccs-auditd ...
/etc/rc2.d/S99ccs-auditd -> ../init.d/ccs-auditd
/etc/rc3.d/S99ccs-auditd -> ../init.d/ccs-auditd
/etc/rc4.d/S99ccs-auditd -> ../init.d/ccs-auditd
/etc/rc5.d/S99ccs-auditd -> ../init.d/ccs-auditd
この設定では、/var/log/tomoyo/reject_log.txtにアクセス拒否ログが保存されます。 ログを保存するディレクトリをあらかじめ作っておきます。
# mkdir -p /var/log/tomoyo
ポリシー生成の前には、以下の7種類の例外を設定しておく必要があります。
7種類のうち上から6種類の例外ポリシーを自動的に生成するスクリプトmake_exception.shと、 7種類目のシンボリックリンクに関する例外ポリシーを自動的に生成するスクリプトmake_alias.shが、 ccs-toolsに用意されています。
これらを使って例外ポリシーを生成して保存するには以下のようにします。
# /root/ccstools/make_exception.sh > /etc/ccs/exception_policy.txt # /root/ccstools/make_alias.sh >> /etc/ccs/exception_policy.txt
make_alias.shは10分以上時間を要する場合がありますので気長にお待ちください。
以上でTOMOYO Linuxを使うための基本的な設定は終わりです。
それでは、いよいよTOMOYO Linuxカーネルで起動してみましょう。
まずはLinuxを再起動します。
# reboot
カーネルの選択画面でTOMOYO Linuxのカーネルを選択してEnterを押します。
起動途中で以下の画面が表示されます。
この状態でEnterキーを押すか10秒間待つと、先ほど作成した例外ポリシーが読み込まれ、 Linuxが起動します。 起動プロセスが終了するとログインプロンプトが表示されるので、rootでログインしてください。
グラフィカル画面からコンソール画面へ切り替えるには、 Ctrl-Alt-F1 を押してください。 VMware の場合は Alt-F1-CtrlまたはCtrl-F1-Altの順に押してください。
今回は、以下の操作をTOMOYO Linuxに学習させ、強制モードでは学習させた操作以外が拒否されることを確かめます。
まずは学習モードの設定を行います。
プロファイルの作成時に作成したとおり、プロファイル1が学習モードです。 このプロファイルを以下のコマンドで/sbin/gettyから起動されるプログラムに割り当てます。
# /root/ccstools/setprofile -r 1 '<kernel> /sbin/getty'
このコマンドは、
/sbin/gettyから起動されるプログラムすべてにプロファイル1を割り当てる
という意味です。/sbin/gettyはログインシェルを起動するプログラムで、 /sbin/getty以下にプロファイル1を割り当てることで、ログイン後の操作を学習する設定になります。 設定は即時に有効になるので、上記setprofileコマンドを実行したあとは既に学習モードになっています。
<kernel> /sbin/gettyを引用符で囲まないと、シェルのリダイレクト機能が働いて /sbin/gettyの内容が書き換えられてしまいますのでくれぐれもご注意ください。
それでは、前述の4つの操作を学習させましょう。学習は通常のLinuxのように操作することで行えます。
一見普通のLinuxと変わりなく操作できますが、 裏ではTOMOYO Linuxがアクセス許可を監視し、 操作ごとにポリシーとしてメモリ上に記憶しています。
生成されたポリシーの参照・編集には、ccs-toolsのeditpolicyを用います。
# /root/ccstools/editpolicy
editpolicyを起動すると、TOMOYO Linux起動後に、プロセスがどのように呼び出されたかが表示されます。 この「プロセスの呼び出し」を、TOMOYO Linuxでは「ドメイン遷移」とよびます。
ドメイン遷移の中から、gettyを探してみてください。ドメイン遷移からgettyを検索するには、 'f'キーを押して、下に出たプロンプトで"getty"と入力してEnterキーを押します。
行番号の右側に表示されている数字は、そのドメインに割り当てられているプロファイル番号です。 /sbin/getty 以下のドメインが 1 になっているのは、先ほど setprofile コマンドを用いて 1 を割り当てたためです。
/sbin/getty下の/bin/login以下では、ログインしてからのプロセス実行履歴が分かります。 その中からさらに、/usr/bin/headコマンドを探してみてください。 headコマンドの行でEnterキーを押すと、以下の画面が表示されます。
これは先ほどの操作で学習したポリシーで、
<kernel> /sbin/getty /bin/login /bin/bash /usr/bin/headというドメイン(赤下線)は、
- /etc/passwdへの読み込みアクセスを許可する(青下線)
ということを意味しています。
TOMOYO Linuxでは、 「プログラムの絶対パスで表現したプロセスの実行履歴」をドメインとよびます。 すべてのプロセスはいずれか1つのドメインに所属しており、 アクセス制御はドメインごとにポリシーとして設定します。
ドメインにおけるファイルに対するアクセス許可は、 通常のLinuxにおけるファイルに対するパーミッションと 同様の3種類(読み込み・書き込み・実行)の他にも、 ファイルの新規作成・削除・名前変更なども設定できます。
ポリシーはメモリ上に置かれており、このままLinuxをシャットダウンしてしまうと、 学習したポリシーも失われてしまいます。ポリシーをハードディスクの/etc/ccs以下に 保存するには以下のようにします。
# /root/ccstools/savepolicy
それでは、先ほど自動学習したポリシーを使って、強制アクセス制御を体験してみましょう。
'q'キーでeditpolicyを終了してから、以下のコマンドを実行します。
# /root/ccstools/setprofile -r 3 '<kernel> /sbin/getty'
この操作により、/sbin/getty以下のドメインに強制アクセス制御が適用されるようになります。
この状態で以下の操作を行ってみます。
図中の赤下線のコマンドは先ほど学習モードで行った操作ですので、問題なく実行できます。 逆に青下線のコマンドはエラーになります。
エラーになった操作のログは、ccs-auditdによって/var/log/tomoyo/reject_log.txtに保存されています。
#2007-02-14 00:38:49# pid=4854 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 <kernel> /sbin/getty /bin/login /bin/bash 1 /usr/bin/tail #2007-02-14 00:38:49# pid=4854 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 <kernel> /sbin/getty /bin/login /bin/bash 4 /usr/bin/tail #2007-02-14 00:38:57# pid=4855 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 <kernel> /sbin/getty /bin/login /bin/bash /usr/bin/head 4 /etc/shadow #2007-02-14 00:39:03# pid=4857 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 <kernel> /sbin/getty /bin/login /bin/bash /bin/sh 1 /bin/date
このようにTOMOYO Linuxのファイルに対するアクセス制御を用いれば、
行ったかを監視することもできます。