tomoyotitle.png

Chapter 9: より詳細なプロファイルの管理

9.1. プロファイルの初期化

プロファイルは、アクセスを制限したい内容だけを有効にすることでポリシーの作成を容易にするために、カスタマイズすることができます。プロファイルはポリシーエディタを用いて後からあなたの要望に沿うように修正することができます。以下に、指定可能なコマンドラインオプションの一覧を示します:

オプション

デフォルト

内容

root="$rootdir"

/

ポリシーファイル用ディレクトリを生成するときのルートディレクトリを指定します。

policy_dir="$configdir"

/etc/tomoyo/

ポリシーファイル用ディレクトリを指定します。もし、このオプションを指定した場合、 $configdir へのシンボリックリンクを /etc/tomoyo という名前で作成する必要があります。

/usr/lib/tomoyo/init_policy を実行した場合、 /etc/tomoyo/profile.conf は以下のようになります:

PROFILE_VERSION=20090903
PREFERENCE::enforcing={ verbose=yes }
PREFERENCE::learning={ verbose=no max_entry=2048 }
PREFERENCE::permissive={ verbose=yes }
0-COMMENT=-----Disabled Mode-----
0-CONFIG={ mode=disabled }
1-COMMENT=-----Learning Mode-----
1-CONFIG={ mode=learning }
2-COMMENT=-----Permissive Mode-----
2-CONFIG={ mode=permissive }
3-COMMENT=-----Enforcing Mode-----
3-CONFIG={ mode=enforcing }

9.2. プロファイルの構文

9.2.1. 書式

各プロファイルには3種類の行が存在します:

名前

内容

COMMENT

プロファイルの内容を説明するための1行コメント。

CONFIG

アクセス制御モードの設定。

PREFERENCE

様々なオプションの設定。

9.2.2. CONFIG 行

CONFIG 行では以下のオプションを指定できます:

オプション

デフォルト

内容

mode

disabled

アクセス制御モードを指定します。以下の表を参照してください。

CONFIG 行の mode パラメータは以下の値を指定できます:

意味

disabled

無効。通常のカーネルと同様に動作する。

learning

学習モード。アクセス要求がポリシーに違反しても拒否しない。アクセス要求をポリシーへ追加する。

permissive

確認モード。アクセス要求がポリシーに違反しても拒否しない。アクセス要求をポリシーへ追加しない。

enforcing

強制モード。アクセス要求がポリシーに違反したら拒否する。アクセス要求をポリシーへ追加しない。

デフォルトでは CONFIG 行に全てのカテゴリの全ての機能についてのアクセス制御モードの設定が行われます。 CONFIG 行が指定されていない場合、 mode=disabled が指定されたものとして解釈されます。ただし、カテゴリを指定した CONFIG 行を指定することにより、デフォルトの設定を上書きすることができます:

名前

アクセス制御モードが設定される範囲

CONFIG

全ての機能

CONFIG::file

ファイルに関する操作のみ

(なお、このバージョンでは CONFIG::file カテゴリのみがサポートされているため、 CONFIG と CONFIG::file は同じ機能を指します。)

カテゴリ単位の設定は、機能単位の設定により上書きすることができます:

名前

アクセス制御モードが設定される範囲

CONFIG::file::execute

プログラムの実行およびドメイン遷移

CONFIG::file::open

読み込みまたは書き込みモードでのファイルのオープン

CONFIG::file::create

ファイルの作成

CONFIG::file::unlink

ファイルの削除

CONFIG::file::mkdir

ディレクトリの作成

CONFIG::file::rmdir

ディレクトリの削除

CONFIG::file::mkfifo

名前付きパイプの作成

CONFIG::file::mksock

UNIXドメインソケットの作成

CONFIG::file::truncate

ファイルの切り詰め

CONFIG::file::symlink

シンボリックリンクの作成

CONFIG::file::rewrite

ファイルの書き換え

CONFIG::file::mkblock

ブロック型デバイスファイルの作成

CONFIG::file::mkchar

キャラクタ型デバイスファイルの作成

CONFIG::file::link

ハードリンクの作成

CONFIG::file::rename

ファイルやディレクトリの名前の変更

CONFIG::file::chmod

ファイルやディレクトリのモードの変更

CONFIG::file::chown

ファイルやディレクトリの所有者の変更

CONFIG::file::chgrp

ファイルやディレクトリのグループの変更

CONFIG::file::ioctl

IOCTL の使用

CONFIG::file::chroot

ルートディレクトリの変更

CONFIG::file::mount

マウント

CONFIG::file::unmount

アンマウント

CONFIG::file::pivot_root

ルートディレクトリの交換

例えば、プログラムの実行のみを制限するプロファイルは以下のように指定できます:

4-COMMENT=-----Enforcing file::execute only-----
4-CONFIG::file::execute={ mode=enforcing }

CONFIG::file::execute 行は CONFIG::file 行の設定を上書きすることに注目してください。また、 CONFIG::file 行は CONFIG 行の設定(指定されていないので mode=disabled として解釈されます)を上書きすることに注目してください。このように指定することで、アクセスを制限したい操作だけを制限する詳細なプロファイルを定義することができます。

また、1つのプロファイルの中で複数のアクセス制御モードを組み合わせることも可能です。例えば、ネットワークに関する操作には強制モードを適用しつつ、ファイルに関する操作には学習モードを適用するということができます:

5-COMMENT=-----Enforcing file::execute and learning other file operations-----
5-CONFIG::file={ mode=learning  }
5-CONFIG::file::execute={ mode=enforcing }

9.2.3. PREFERENCE 行

PREFERENCE 行では以下のオプションを指定できます:

名前

内容

verbose

ポリシー違反が発生した場合にコンソールにメッセージを表示するかどうかを指定します。 yes または no を指定できます。

max_entry

学習モードで動作中にカーネルが自動的に追加することができるアクセス許可の件数の上限を指定します。 0 以上の整数値を指定できます。 0 を指定すると学習モードは確認モードと同様に振舞うようになります。バイト数での上限を /sys/kernel/security/tomoyo/meminfo インタフェースから指定することもできます。