TOMOYO Linux 導入手順書 (CentOS 4.4版)

概要

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

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

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

インストール

SELinuxを一時的に無効にする

CentOSは、インストール時のデフォルトでSELinuxが有効になっています。 TOMOYO Linuxの導入の際には、カーネルのインストールのため、一時的にSELinuxを無効にする必要があります。

現在SELinuxが有効になっているかどうかは、getenforceコマンドで確認できます。

      # getenforce
      Enforcing
    

上記のように、"Enforcing"が表示されればSELinuxは有効になっています。

SELinuxによるアクセス制御を一時的に無効にするには、setenforceコマンドを使います。

      # setenforce Permissive
    

再度getenforceコマンドを実行し、"Permissive"が表示されることを確かめてください。

      # getenforce
      Permissive
    

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

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

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

      # wget http://osdn.dl.sourceforge.jp/tomoyo/21518/kernel-2.6.9-42.0.3.EL_tomoyo_1.2.i586.rpm
    

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

      # rpm --install kernel-2.6.9-42.0.3.EL_tomoyo_1.2.i586.rpm
    

この際特にメッセージは表示されませんが、 インストールに成功すれば/etc/grub.confに以下の記述が追加されているはずです。

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

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

      #timeout=5
    
      #hiddenmenu
    

SELinuxを再度有効にする

前の手順でSELinuxを無効にした場合は、再度setenforceコマンドを実行して SELinuxを有効にします。

      # setenforce Enforcing
    

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

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

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

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

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

      # tar zxf ccs-tools-1.2-i386-CentOS4.4.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の起動モードの設定をおこないましょう。

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

      # grub.conf generated by anaconda
      #
      # Note that you do not have to rerun grub after making changes to this file
      # NOTICE:  You have a /boot partition.  This means that
      #          all kernel and initrd paths are relative to /boot/, eg.
      #          root (hd0,0)
      #          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
      #          initrd /initrd-version.img
      #boot=/dev/sda
      default=0
      #timeout=5
      splashimage=(hd0,0)/grub/splash.xpm.gz
      #hiddenmenu
      title CentOS (2.6.9-42.0.3.EL_tomoyo_1.2)
      root (hd0,0)
      kernel /vmlinuz-2.6.9-42.0.3.EL_tomoyo_1.2 ro root=/dev/VolGroup00/LogVol00
      initrd /initrd-2.6.9-42.0.3.EL_tomoyo_1.2.img
      title CentOS-4 i386 (2.6.9-42.0.3.EL)
      root (hd0,0)
      kernel /vmlinuz-2.6.9-42.0.3.EL ro root=/dev/VolGroup00/LogVol00
      initrd /initrd-2.6.9-42.0.3.EL.img
    

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

      # grub.conf generated by anaconda
      #
      # Note that you do not have to rerun grub after making changes to this file
      # NOTICE:  You have a /boot partition.  This means that
      #          all kernel and initrd paths are relative to /boot/, eg.
      #          root (hd0,0)
      #          kernel /vmlinuz-version ro root=/dev/VolGroup00/LogVol00
      #          initrd /initrd-version.img
      #boot=/dev/sda
      default=0
      #timeout=5
      splashimage=(hd0,0)/grub/splash.xpm.gz
      #hiddenmenu
      title CentOS (2.6.9-42.0.3.EL_tomoyo_1.2) ACCEPT MODE
      root (hd0,0)
      kernel /vmlinuz-2.6.9-42.0.3.EL_tomoyo_1.2 ro root=/dev/VolGroup00/LogVol00 CCS=0
      initrd /initrd-2.6.9-42.0.3.EL_tomoyo_1.2.img
      title CentOS (2.6.9-42.0.3.EL_tomoyo_1.2) ENFORCE MODE
      root (hd0,0)
      kernel /vmlinuz-2.6.9-42.0.3.EL_tomoyo_1.2 ro root=/dev/VolGroup00/LogVol00 CCS=1
      initrd /initrd-2.6.9-42.0.3.EL_tomoyo_1.2.img
      title CentOS-4 i386 (2.6.9-42.0.3.EL)
      root (hd0,0)
      kernel /vmlinuz-2.6.9-42.0.3.EL ro root=/dev/VolGroup00/LogVol00
      initrd /initrd-2.6.9-42.0.3.EL.img
    

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

ポリシーの作成準備

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

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

      # uname --kernel-release
      2.6.9-42.0.3.EL
    

上記のように、kernel-releaseに"tomoyo"が含まれていなければ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が実行されるように修正を加えます。

CentOSのシャットダウンスクリプトは/etc/rc.d/init.d/haltです。haltの最後の行は以下のようになっているはずです。

      exec $command $HALTARGS
    

このコマンドの直前にsavepolicyを実行するように変更します。

      /root/ccstools/savepolicy a
      exec $command $HALTARGS
    

savepolicyの引数"a"は、すべてのポリシーを保存するオプションです。

監査ログの取得準備

TOMOYO Linuxのログは、アクセスが許可された要求のログと、アクセスが拒否された要求のログの2種類に分けることができます。 今回は、アクセス拒否ログのみを保存する設定を行います。

ログを保存するには、ccs-toolsのccs-auditdというデーモンプログラムを使用します。 アクセス拒否ログのみを保存する設定でccs-auditdをLinuxの起動時に実行するには、 /etc/rc.d/rc.localの末尾に以下の1行を追加します。

      /root/ccstools/ccs-auditd /dev/null /var/log/tomoyo/reject_log.txt
    

この設定では、/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

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

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

editpolicy2.png

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

editpolicy3.png

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

<kernel> /sbin/mingetty /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-02 11:51:34# pid=2953 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0
      <kernel> /sbin/mingetty /bin/login /bin/bash
      1 /usr/bin/tail

      #2006-08-02 11:51:34# pid=2953 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0
      <kernel> /sbin/mingetty /bin/login /bin/bash
      4 /usr/bin/tail

      #2006-08-02 11:51:40# pid=2954 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0
      <kernel> /sbin/mingetty /bin/login /bin/bash /usr/bin/head
      4 /etc/shadow

      #2006-08-02 11:51:47# pid=2980 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0
      <kernel> /sbin/mingetty /bin/login /bin/bash /bin/tcsh
      1 /bin/date
    

TOMOYO Linux is supported by NTT DATA CORPORATION
Send message to Webadmin
Last modified: $Date: 2006-11-24 22:37:54 +0900 (Fri, 24 Nov 2006) $

SourceForge.jp

Valid HTML 4.01 Strict