TOMOYO Linux 導入手順書 (Debian sarge版)

概要

以下では、Debian GNU/Linux 3.1 (sarge)にTOMOYO Linux 1.2を導入する手順を解説します。この手順書に従って操作すれば、TOMOYO Linuxの基本的な機能を理解し、簡単な設定と運用が行えるようになります。

導入の流れは以下の通りです。

  1. TOMOYO Linuxのカーネルとツールのインストール
  2. 基本的な設定
  3. ポリシーの自動学習と試験運用

インストール

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

TOMOYO LinuxはLinuxカーネルへのパッチとして提供されており、本来はLinuxカーネルのソースコードにパッチを適用する作業が必要になります。しかしsargeの場合は、TOMOYO Linuxのパッチを当てたコンパイル済みカーネルパッケージが提供されているので、今回はそれを利用します。

まずはパッケージをダウンロードします。

      # wget http://osdn.dl.sourceforge.jp/tomoyo/21518/kernel-image-2.6.8-16sarge5-ccs_1.2_i586.deb
    

次に、ダウンロードしてきたパッケージをインストールします。

      # dpkg --install kernel-image-2.6.8-16sarge5-ccs_1.2_i586.deb
      Selecting previously deselected package kernel-image-2.6.8-16sarge5-ccs-i586.
      (Reading database ... 11049 files and directories currently installed.)
      Unpacking kernel-image-2.6.8-16sarge5-ccs-i586 (from kernel-image-2.6.8-16sarge5-ccs_1.2_i586.deb) ...
      Setting up kernel-image-2.6.8-16sarge5-ccs-i586 (1.2) ...
      Searching for GRUB installation directory ... found: /boot/grub .
      Testing for an existing GRUB menu.list file... found: /boot/grub/menu.lst .
      Searching for splash image... none found, skipping...
      Found kernel: /boot/vmlinuz-2.6.8-16sarge5-ccs
      Found kernel: /boot/vmlinuz-2.6.8-2-386
      Updating /boot/grub/menu.lst ... done
    

インストールに成功すれば/boot/grub/menu.lstに以下の記述が追加されているはずです。

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

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

今後カーネルの選択を行いやすくするために、/boot/grub/menu.lstの"timeout"の行をコメントアウトしておきます。

      #timeout 5
    

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

カーネルの次は、TOMOYO Linuxのツールをインストールします。ツールには、ポリシーの管理を行うプログラムが収録されています。

カーネルと同様、sargeにはコンパイル済みのtarballが用意されていますので、それをダウンロードします。 ツールは/root/ccstoolsディレクトリに置くことにします。

      # cd /root
      # wget http://osdn.dl.sourceforge.jp/tomoyo/21518/ccs-tools-1.2-i386-Sarge.tar.gz
    

ダウンロードしてきたファイルを解凍すればツールのインストールは終了です。

      # tar zxf ccs-tools-1.2-i386-Sarge.tar.gz
    

設定

プロファイルの作成

TOMOYO Linuxには多くの機能があり、どの機能をON/OFFにするのかの設定をプロファイルとよびます。プロファイルは/root/security/profile$INDEX.txt($INDEXは整数)というファイルに保存し、TOMOYO Linuxのカーネルの引数でどのプロファイルを用いるかを指定することができます。

今回はファイルに対するアクセス制御の機能のみを利用するため、そのためのプロファイルを2つ(1つは自動学習モード、もう1つは強制アクセス制御モード)用意します。

まず、プロファイルやその他の設定ファイルを保存するためのディレクトリをつくります。

      # mkdir /root/security
      # cd /root/security
    

そして、/root/securityに、profile0.txtとprofile1.txtというファイルを作成します。

      # cat > profile0.txt << EOF
      MAC_FOR_FILE=1
      EOF
      # cat > profile1.txt << EOF
      MAC_FOR_FILE=3
      EOF
    

MAC_FOR_FILE=1が「ファイルに対するアクセスの自動学習モード」であり、MAC_FOR_FILE=3が「ファイルに対する強制アクセス制御モード」です。自動学習モードでおこなったアクセスを元に、強制アクセス制御モードでアクセス制御をおこなう、というのが基本的な運用の流れです。

読み込むプロファイルの設定

カーネルの読み込み時にどのプロファイルを使用するかは、カーネルの引数で指定します。カーネルにCCS=$INDEXという引数を与えて起動すると、/root/security/profile$INDEX.txtというプロファイルを読み込みます。

それでは、TOMOYO Linuxの起動モードの設定をおこないましょう。

カーネルのインストール時にも一部確認しましたが、/boot/grub/menu.lstの末尾は以下のようになっているはずです。

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

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

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

      title           Debian GNU/Linux, kernel 2.6.8-2-386 (recovery mode)
      root            (hd0,0)
      kernel          /boot/vmlinuz-2.6.8-2-386 root=/dev/sda1 ro single
      initrd          /boot/initrd.img-2.6.8-2-386
      savedefault
      boot
    

今回はprofile0.txtを読み込むモードとprofile1.txtを読み込むモード2つを選択したいので、TOMOYO Linuxカーネルの項目を2つにして、それぞれのタイトルと引数を変えます。引数のCCSは大文字でなければいけないことに注意してください。

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

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

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

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

      title           Debian GNU/Linux, kernel 2.6.8-2-386 (recovery mode)
      root            (hd0,0)
      kernel          /boot/vmlinuz-2.6.8-2-386 root=/dev/sda1 ro single
      initrd          /boot/initrd.img-2.6.8-2-386
      savedefault
      boot
    

"ACCEPT MODE"がprofile0.txtを読み込む自動学習モード、"ENFORCE MODE"がprofile1.txtを読み込む強制アクセス制御モードです。

ポリシーの作成準備

TOMOYO Linuxのポリシーの作成は、先ほどカーネルの起動オプションで設定した自動学習モードでおこなえますが、その前にいくつか準備が必要です。この準備作業はTOMOYO Linuxのカーネルではなく、必ず通常のカーネルで行ってください。TOMOYO Linuxのカーネルで準備作業を行っても、シャットダウン時に設定が上書きされてしまいます。

現在動作中のカーネルの情報を出力するには、unameコマンドを使います。

      # uname --kernel-release
      2.6.8-2-386
    

上記のように、kernel-releaseに"ccs"が含まれていなければOKです。

ポリシーの作成準備は以下の流れでおこないます。

  1. ポリシーの変更を許可するプログラムの指定
  2. シャットダウン処理の修正
  3. 監査ログの取得準備
  4. 例外ポリシーの作成

ポリシーの設定ファイルは、プロファイルと同様にすべて/root/securityディレクトリに置きます。

ポリシーの変更を許可するプログラムの指定

ポリシーを変更することができるプログラムを、/root/security/manager.txtというファイルで指定します。ccs-toolsの中の3つのプログラムを以下のように指定してください。

      # cat > /root/security/manager.txt << EOF
      /root/ccstools/loadpolicy
      /root/ccstools/editpolicy
      /root/ccstools/setlevel
      EOF
    

シャットダウン処理の修正

TOMOYO Linuxの動作中、ポリシーはメモリ上に置かれています。電源が切れる直前のポリシーをファイルに保存するため、シャットダウンスクリプトとリブートスクリプトの中で/root/ccstools/savepolicyが実行されるように修正を加えます。

まずはシャットダウンスクリプトである/etc/init.d/haltの末尾を以下のように書き換えます。

変更前変更後
	      halt -d -f -i $poweroff $hddown
	      : exit 0
	    
	      halt --help 2> /dev/null
	      /root/ccstools/savepolicy a
	      halt -d -f -i $poweroff $hddown
	      : exit 0
	    

次に、リブートスクリプトである/etc/init.d/rebootの末尾を以下のように書き換えます。

変更前変更後
	      reboot -d -f -i
	    
	      reboot --help 2> /dev/null
	      /root/ccstools/savepolicy a
	      reboot -d -f -i
	    

savepolicyの前にhalt/rebootを一度実行しているのは、halt/rebootをポリシーに追加するためです。また、savepolicyの引数"a"は、すべてのポリシーを保存するオプションです。

監査ログの取得準備

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 /var/log/tomoyo
    

例外ポリシーの作成

ポリシー生成の前には、以下の4種類の例外を設定しておく必要があります。

  1. /proc/PID のように同様のパス名をパターン化する際のパターン名
  2. すべてのプログラムに対して参照することを許可するパス名
  3. デーモンとして動作させるプログラムのパス名
  4. 強制アクセス制御が適用されない信頼済みドメイン

以上の4種類の例外ポリシーを自動的に生成するスクリプトmake_exception.shが、ccs-toolsに用意されています。make_exception.shを使って例外ポリシーを生成して保存するには以下のようにします。

      # /root/ccstools/make_exception.sh > /root/security/exception_policy.txt
    

以上でTOMOYO Linuxを使うための基本的な設定は終わりです。

運用

自動学習モード

それでは、TOMOYO Linuxにポリシーを学習させましょう。今回は、ログイン後の以下の操作をTOMOYO Linuxに学習させることにします。

  1. dateコマンドを実行する
  2. headコマンドで/etc/passwdの先頭3行を表示する
  3. tcshを起動する
  4. tailコマンドで/etc/passwdの末尾3行を表示する

まずは学習モードで起動するために、Linuxを再起動します。

      # reboot
    

カーネルの選択画面で"ACCEPT MODE"を選択してEnterを押します。

grub_accept.png

rootでログインし、上記の操作を行います。

ope_accept.png

一見普通のLinuxと変わりなく操作できますが、裏ではTOMOYO Linuxがアクセス許可を監視し、操作ごとにポリシーとしてメモリ上に記憶しています。

ポリシーの参照と編集

生成されたポリシーの参照・編集には、ccs-toolsのeditpolicyを用います。

editpolicyを起動すると、TOMOYO Linuxが学習したドメイン遷移が表示されます。

editpolicy1.png

ドメイン遷移はプロセスの親子関係をそのまま反映しており、どのプロセスからどのプロセスが実行されたのかを見て取ることができます。

ドメイン遷移の中から、gettyを探してみてください。

editpolicy2.png

/sbin/getty下の/bin/login以下では、ログインしてからのプロセス実行履歴が分かります。その中からさらに、/usr/bin/headコマンドを探してみてください。headコマンドの行でEnterキーを押すと、以下の画面が表示されます。

editpolicy3.png

これは先ほどの操作で学習したポリシーで、

<kernel> /sbin/getty /bin/login /bin/bash /usr/bin/headというドメイン(赤下線)には/etc/passwdへの読み込みアクセス(青下線)を許可する

ということを意味しています。

このようにTOMOYO Linuxでは、絶対パスを用いたプロセスの実行履歴を用いてドメイン分けを行っており、同じコマンドであっても、実行履歴により区別されたアクセス制御を行うことができます。また、ドメインにおけるファイルに対するアクセス許可は、 通常のLinuxにおけるファイルに対するパーミッションと同様の3種類(読み込み・書き込み・実行)の他に、ファイルの新規作成・削除・名前変更なども設定できます。

学習モードで学習されたポリシーはシャットダウン時にファイルに保存され、次回の起動時には自動的に読み込まれます。実際の運用では、再起動を含めて許可したい操作を何回か学習させ、ポリシーエディタで不要なアクセス許可を除いていく、という操作を繰り返します。

強制アクセス制御モード

それでは、先ほど自動学習したポリシーを使って、強制アクセス制御を行います。Linuxを再起動し、今度は"ENFORCE MODE"のカーネルでLinuxを起動してください。このモードでは、TOMOYO Linuxは起動時にポリシーの読み込みを行い、ポリシーに含まれない操作を拒否します。

rootでログインした後、以下の操作を行ってみます。

  1. dateコマンドを実行
  2. headコマンドで/etc/passwdの先頭3行を表示
  3. tailコマンドで/etc/passwdの末尾3行を表示(エラー)
  4. headコマンドで/etc/shadowの先頭3行を表示(エラー)
  5. tcshを起動
  6. dateコマンドを実行(エラー)

ope_enforce.png

図中の赤下線のコマンドは先ほど学習モードで行った操作ですので、問題なく実行できます。逆に青下線のコマンドはエラーになります。

エラーになった操作のログは、ccs-toolsのccs-auditdによって/var/log/tomoyo/reject_log.txtに保存されています。

      #2006-08-07 12:16:43# pid=1691 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

      #2006-08-07 12:16:43# pid=1691 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

      #2006-08-07 12:16:51# pid=1692 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

      #2006-08-07 12:16:56# pid=1694 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0
      <kernel> /sbin/getty /bin/login /bin/bash /bin/tcsh
      1 /bin/date
    

TOMOYO Linux is supported by NTT DATA CORPORATION
Send message to Webadmin
Last modified: $Date: 2007-01-29 21:19:28 +0900 (Mon, 29 Jan 2007) $

SourceForge.jp

Valid HTML 4.01 Strict