This page is for TOMOYO 2.2 (for Linux 2.6.30 - 2.6.35 kernels). Please jump to this page for TOMOYO 2.3 (for Linux 2.6.36 and later kernels).

English Page

Last modified: $Date: 2024-03-30 20:25:00 +0900 (Sat, 30 Mar 2024) $

第2章 TOMOYO Linux の初期化

このページでは、 TOMOYO を使うために必要となる基本操作について説明します。


ステップ1:ポリシーの初期化

以下のコマンドを実行することで、ポリシーを初期化してください。

[root@tomoyo ~]# /usr/lib/tomoyo/tomoyo_init_policy

この処理には数分かかります。

TOMOYO のポリシーファイルが /etc/tomoyo/ ディレクトリの中に作成されます。


ステップ2:ポリシーエディタの使い方を学習する

/etc/tomoyo/ というオプションと一緒に、 TOMOYO のポリシーエディタである tomoyo-editpolicy を実行すると、以下のような画面が表示されます。

[root@tomoyo ~]# /usr/sbin/tomoyo-editpolicy /etc/tomoyo/

editpolicy-domain-list1.png

この画面には、ドメインツリーが表示されています。現時点では、 <kernel> ドメインだけが定義されています。しかし、システムが動作するにつれて、 TOMOYO は新しいドメインを作成してこのツリーに追加していきます。以下の画面ではたくさんのドメインが定義されています。

editpolicy-domain-list2.png

TOMOYO における強制アクセス制御はドメインを単位として適用されます。全てのプロセスは1個のドメインに属しており、原則としてプログラムが実行される度に異なるドメインへと遷移します。ドメインの名前はプロセスの実行履歴として連結された文字列です。例えば、カーネルが属するドメインの名前は <kernel> 、カーネルから起動された /sbin/init が属するドメインの名前は <kernel> /sbin/init 、 /sbin/init から起動された /etc/rc.d/rc が属するドメインの名前は <kernel> /sbin/init /etc/rc.d/rc となります。この遷移規則の例外については後述します。

各行の2番目の数字に注目してください。

editpolicy-domain-profile-number.png

この数字はプロファイル番号と呼ばれるものです。プロファイル番号は0~255の整数値をとります。

w キーを押すと、選択肢が表示されます。

editpolicy-window-list.png

p キーを押すと、プロファイルの一覧が表示されます。

以下のエントリが表示されます。

editpolicy-profile-list-file-only.png

矢印キーや Home/End/PageUp/PageDown キーを使ってスクロールすることができます。

項目内容デフォルト値自動学習対応
COMMENT プロファイルの内容を説明するための1行コメント。 -
MAC_FOR_FILE ファイルに対する強制アクセス制御を有効にする。 disabled ○
MAX_ACCEPT_ENTRY 学習モードで自動的に追加される「アクセス許可」の上限を指定する。 2048 -
TOMOYO_VERBOSE ドメイン別ポリシーに対する違反を syslog に表示する。 enabled -

MAC_FOR_FILE については以下の値を指定できます。

値 内容
disabled 無効。通常のカーネルと同様に動作する。
learning 学習モード。ポリシーに違反してもエラーにせず、ポリシーへの自動追加を行う。
permissive 確認モード。ポリシーに違反してもエラーにせず、ポリシーへの自動追加も行わない。
enforcing 強制モード。ポリシーに違反したらエラーとする。

MAX_ACCEPT_ENTRY については 0 以上の任意の整数を指定できます。

TOMOYO_VERBOSE については以下の値を指定できます。

値 内容
disabled ドメイン別ポリシーに対する違反を表示しない。
enabled ドメイン別ポリシーに対する違反を表示する。

w キー、 e キーの順に押すことで、以下の画面が表示されます。

editpolicy-exception-list1.png

この画面には以下の例外設定が表示されます。

(1) パス名のパターン

file_pattern というキーワードを使用して、パス名のパターンを登録します。アクセス許可を学習する際に、要求されたパス名が file_pattern というキーワードを使用して登録されたパス名のパターンと一致した場合、パターン化されたパス名でアクセス許可が学習されます。
目安としては以下のものが挙げられます。

  • /proc/PID/ ディレクトリ以下に存在するファイルのパス名
  • /sys/ ディレクトリ以下に存在するファイルのパス名(カーネル 2.6 系の場合のみ)
  • /dev/ ディレクトリ以下の一部のパス名
  • /etc/tomoyo/ ディレクトリ以下のポリシーファイルのパス名
  • マニュアルページのパス名
  • スプールディレクトリのパス名
  • メールの送受信時に作成されるテンポラリファイルのパス名
  • man コマンドが作成するテンポラリファイルのパス名
  • mount コマンドが作成するテンポラリファイルのパス名

システムにインストールされているアプリケーションやその設定により、上記以外にもパターン化されたパス名が必要になります。不足しているパターンは、実際にどのようなアクセスが行われるかを観察してから、適切にパターン化して追加します。

(2) 無条件に読み込みを許可するファイル

allow_read というキーワードを使用して、全てのプログラムへの読み込みアクセスを許可するファイルのパス名を登録します。パターンも使用できます。読み込みモードで要求されたパス名が allow_read というキーワードを使用して登録されたパス名と一致した場合、ドメインポリシーで明示的に許可が与えられていなかった場合でも読み込みアクセスが許可されます。
目安としては以下のものが挙げられます。

  • ldconfig に登録されている共有ライブラリ
  • /proc/ ディレクトリ以下に存在するファイルの一部
  • /usr/share/locale/ ディレクトリ以下に存在するロケールデータの一部

システムにインストールされているアプリケーションやその設定により、上記以外にも常に読み込みアクセスを許可したいファイルがあるかもしれません。不足しているファイルは、実際にどのようなファイルを読み込むかを観察してから、必要に応じてその都度追加していきます。

(3) 書き換えを禁止するファイル

deny_rewrite というキーワードを使用して、既に記録されている部分の書き換えを禁止したいファイル(ログファイル等)のパス名を登録します。パターンが使用できます。 deny_rewrite というキーワードを使用して登録されたファイルは、後述するドメインポリシーの中で明示的に allow_rewrite というキーワードを用いて許可が与えられない限り、追記ではない書き込みモードでのオープンとファイルの切り詰めが禁止されます。
目安としては以下のものが挙げられます。

  • /var/log/ ディレクトリ以下のファイル

システムにインストールされているアプリケーションやその設定により、上記以外にも書き換えを禁止したいファイルがあるかもしれません。不足しているファイルは、実際にどのようなファイルが追記専用で使われているかを観察してから、必要に応じてその都度追加していきます。

(4) シンボリックリンクの名前で実行するプログラム

TOMOYO Linux は、原則としてシンボリックリンクを解決したパス名で実行許可のチェックを行いますが、実行時の名前によって異なる振る舞いをするプログラムがシンボリックリンク経由で実行される場合に対処するために、シンボリックリンクの名前でドメインを遷移できるようにすることができます。
シンボリックリンクの名前でドメインを遷移できるようにするには、 alias というキーワードを使用してシンボリックリンクを解決したパス名とシンボリックリンクを解決する前のパス名を指定します。パターンは使用できません。
例えば /sbin/pidof は /sbin/killall5 へのシンボリックリンクであるため、通常は /sbin/pidof を実行すると /sbin/killall5 が実行されたものとしてドメインが定義されます。しかし、 alias /sbin/killall5 /sbin/pidof という指定をすることで、 /sbin/pidof を実行すると /sbin/pidof が実行されたものとしてドメインが定義されるようにできます。

(5) ドメイン遷移を初期化するプログラム

initialize_domain というキーワードを使用して、ドメイン遷移履歴をリセットするプログラムのパス名を登録します。パターンは使用できません。 initialize_domain というキーワードを使用して登録されたパス名のプログラムが実行された場合、そのプログラムは <kernel> 直下のドメインで動作します。
目安としては以下のものが挙げられます。

  • /etc/init.d/ ディレクトリ以下にあるデーモンプログラム等を起動・終了させるためのスクリプト
  • 上記スクリプトから起動されるデーモンプログラムの内、ドメイン名を短くしたいもの(httpd や sshd など)

システムにインストールされているアプリケーションやその設定により、上記以外にもドメイン遷移履歴をリセットさせたいプログラムがあるかもしれません。最初にドメイン遷移履歴を作成して、実際にどのようなプログラムを指定したらよいかを考慮しながら、必要に応じてその都度追加していきます。その際、他のドメインへの影響に注意してください。例えば、ドメインポリシーとして

<kernel> ... /bin/bash
use_profile 3
allow_execute /bin/tcsh

<kernel> ... /bin/bash /bin/tcsh
use_profile 3
allow_execute /bin/cat

<kernel> ... /bin/bash /bin/tcsh /bin/cat
use_profile 3
allow_read /etc/fstab

というポリシーが既に存在している状態で /bin/tcsh を initialize_domain として追加した場合、 /bin/tcsh は <kernel> /bin/tcsh というドメインへ遷移することになるため、 <kernel> ・・・ /bin/bash /bin/tcsh というドメインへは遷移できなくなってしまいます。そのような場合は、以下のように、 <kernel> ・・・ /bin/bash /bin/tcsh で始まる部分を <kernel> /bin/tcsh で始まるようにドメインポリシーを変更してやる必要があります。

<kernel> ... /bin/bash
use_profile 3
allow_execute /bin/tcsh

<kernel> /bin/tcsh
use_profile 3
allow_execute /bin/cat

<kernel> /bin/tcsh /bin/cat
use_profile 3
allow_read /etc/fstab
(6) ドメイン遷移を初期化させないプログラム

no_initialize_domain というキーワードを使うことで、 initialize_domain キーワードの効果を打ち消すことができます。特定の条件下ではドメイン遷移を初期化させたくない場合に使用します。

(7) ドメイン遷移を行わないドメイン

keep_domain というキーワードを使用して、ドメイン遷移を行わないドメインを指定することができます。
例えば、 keep_domain <kernel> /usr/sbin/sshd /bin/tcsh という行が含まれている場合、 <kernel> /usr/sbin/sshd /bin/tcsh というドメインに属しているプロセスは、 initialize_domain というキーワードで指定されたプログラムが実行されない限り、そのドメインに留まります。

(8) ドメイン遷移を行うドメイン

no_keep_domain というキーワードを使うことで、 keep_domain キーワードの効果を打ち消すことができます。特定の条件下でドメイン遷移を行わせたい場合に使用します。

q キーを押してポリシーエディタを終了してください。

以後、必要に応じてポリシーエディタのチュートリアルページであるポリシーエディタの使い方を参照してください。


ステップ3:システムの再起動

システムを再起動して、起動時に TOMOYO Linux 対応カーネルを選択してください。

[root@tomoyo ~]# reboot

目次へ戻る

sflogo.php