Info: Version 1.4.x is available.

# TOMOYO Linuxによるアクセス解析手順

Last modified: $Date: 2011-11-20 09:56:56 +0900 (Sun, 20 Nov 2011) $

TOMOYO Linux のポリシーはパス名で表現されるため、ファイルのアクセスを追跡するためにも利用できます。
特定のプログラムがどのようなファイルにアクセスしているかを知りたい場合や、特定のディレクトリにファイルを作成しているプログラムを知りたい場合に利用できます。

# 準備

## TOMOYO Linux カーネルのインストール

カーネルをコンパイルする方法については、TOMOYO Linuxカーネルの作成手順を参照してください。

SELinux をサポートするディストリビューションでは、 SELinux が無効になっていないとインストール時にエラーが発生する場合があります。インストール時に以下のようなエラーメッセージが表示される場合は、 SELinux を無効にしてからインストールしてください。 /etc/selinux/config の SELINUX= の行を SELINUX=disabled に書き換えてからシステムを再起動するか、あるいは、カーネル起動時のコマンドラインに selinux=0 というオプションを渡すことで SELinux を無効にできます。

[root@localhost ~]# rpm -ihv kernel-2.6.9-55.0.2.EL_tomoyo_1.4.1.i586.rpm Preparing... ########################################### [100%] Error: %pre(kernel-2.6.9-55.0.2.EL_tomoyo_1.4.1.i586) scriptlet failed, exit status 255 Error: install: %pre scriptlet failed (2), skipping kernel-2.6.9-55.0.2.EL_tomoyo_1.4.1

なお、 TOMOYO Linux 自身は SELinux と同時に使用することができます。以下の操作では SELinux を有効にした状態でも構いません。

rpm の場合、インストールに成功すると /boot/grub/grub.conf に以下のような記述が追加されているはずです。

title CentOS (2.6.9-55.0.2.EL_tomoyo_1.4.1) root (hd0,0) kernel /vmlinuz-2.6.9-55.0.2.EL_tomoyo_1.4.1 ro root=/dev/VolGroup00/LogVol00 initrd /initrd-2.6.9-55.0.2.EL_tomoyo_1.4.1.img

ここで、 kernel の行の末尾に init=/.init を追加します。

title CentOS (2.6.9-55.0.2.EL_tomoyo_1.4.1) root (hd0,0) kernel /vmlinuz-2.6.9-55.0.2.EL_tomoyo_1.4.1 ro root=/dev/VolGroup00/LogVol00 init=/.init initrd /initrd-2.6.9-55.0.2.EL_tomoyo_1.4.1.img

deb の場合、インストールに成功すると /boot/grub/menu.lst に以下のような記述が追加されているはずです。

title Debian GNU/Linux, kernel 2.6.8-16sarge7-ccs root (hd0,0) kernel /boot/vmlinuz-2.6.8-16sarge7-ccs root=/dev/sda1 ro initrd /boot/initrd.img-2.6.8-16sarge7-ccs savedefault boot

ここで、 kernel の行の末尾に init=/.init を追加します。

title Debian GNU/Linux, kernel 2.6.8-16sarge7-ccs root (hd0,0) kernel /boot/vmlinuz-2.6.8-16sarge7-ccs root=/dev/sda1 ro init=/.init initrd /boot/initrd.img-2.6.8-16sarge7-ccs savedefault boot

/.init は TOMOYO Linux のポリシーをカーネルに読み込むためのスクリプトで、 /sbin/init の開始前に実行されます。
/.init は次の手順でインストールするツールの中に含まれています。

## TOMOYO Linux ツールのインストール

ツールをコンパイルするには、以下のコマンドを実行してください。

cd /root/ # TOMOYO Linux ツールのソースをダウンロードする。 wget -O ccs-tools-1.4.1-20070605.tar.gz 'http://sourceforge.jp/frs/redir.php?m=jaist&f=/tomoyo/25543/ccs-tools-1.4.1-20070605.tar.gz' # 展開する。 tar -zxf ccs-tools-1.4.1-20070605.tar.gz # コンパイルする。 make -sC ccstools/ # ポリシーローダーを / へ移動する。 mv ccstools/.init /

## ポリシーの作成

/etc/ccs/manager.txt を作成し、以下の内容を指定します。

/root/ccstools/editpolicy

/etc/ccs/status.txt を作成し、以下の内容を指定します。

MAC_FOR_FILE=1 MAX_ACCEPT_ENTRY=1048576 MAX_GRANT_LOG=0 MAX_REJECT_LOG=0 TOMOYO_VERBOSE=0

以下のコマンドを実行した結果を /etc/ccs/exception_policy.txt として保存してください。

/root/ccstools/make_exception.sh | grep ^file_pattern | sort | uniq

# 解析

TOMOYO Linuxカーネルで起動します。

/.init の実行に成功すると、以下のようなメッセージが表示されますので、そのまま Enter を押してください。

Press 'Enter' or wait for 10 seconds to use default status. You may input 'disabled' and press 'Enter' to disable MAC in case of emergency. >

プロファイルの読み込みが成功すると、 /sbin/init が開始されてシステムが起動します。
失敗した場合は、以下のようにメッセージが表示されて停止します。

No profiles loaded. Run policy loader using 'init=' option.

失敗した場合は以下の点を確認してください。

- /boot/grub/grub.conf （または /boot/grub/menu.lst ）の TOMOYO カーネルに init=/.init が指定されているか？
- /.init に実行許可が与えられているか？

解析したいアプリケーションを動作させます。

/root/ccstools/editpolicy を実行すると、現在に至るまでに実行されたプログラムの一覧を表示できます。プログラムを選択して Enter を押すと、そのプログラムがアクセスしたファイルの一覧が表示されます。ポリシーエディタの使い方については、ポリシーエディタの使い方を参照してください。

/root/ccstools/savepolicy を実行すると、現在に至るまでにアクセスされたファイルの一覧を /etc/ccs/domain_policy.txt に保存することができます。