Info: Version 1.8.x is available.
Last modified: $Date: 2024-03-30 20:25:00 +0900 (Sat, 30 Mar 2024) $
このページでは、 TOMOYO Linux を使うために必要となる基本操作について説明します。
ファイルに対するアクセス制御だけを有効にしたい場合には
| [root@tomoyo ~]# /usr/lib/ccs/init_policy --file-only-profile |
を、全機能を有効にしたい場合には
| [root@tomoyo ~]# /usr/lib/ccs/init_policy |
を実行することで、ポリシーを初期化してください。
TOMOYO Linux のポリシーファイルが /etc/ccs/ ディレクトリの中に作成されます。
/etc/ccs/ というオプションと一緒に、 TOMOYO Linux のポリシーエディタである ccs-editpolicy を実行すると、以下のような画面が表示されます。
| [root@tomoyo ~]# /usr/sbin/ccs-editpolicy /etc/ccs/ |

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

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

この数字はプロファイル番号と呼ばれるものです。プロファイル番号は0~255の整数値をとります。
w キーを押すと、選択肢が表示されます。

p キーを押すと、プロファイルの一覧が表示されます。
もし、 /usr/lib/ccs/init_policy を実行する際に --file-only-profile というオプションを指定していた場合、以下のエントリが表示されます。

もし、 /usr/lib/ccs/init_policy を実行する際に --file-only-profile というオプションを指定しなかった場合、以下のエントリが表示されます。

| 項目 | 内容 |
| PREFERENCE::audit | アクセスログの取得方法に関する設定。 |
| PREFERENCE::learning | 学習モードに関する設定。 |
| PREFERENCE::permissive | 確認モードに関する設定。 |
| PREFERENCE::enforcing | 強制モードに関する設定。 |
| COMMENT | プロファイルの内容を説明するための1行コメント。 |
| CONFIG | 強制アクセス制御のモード設定。 |
PREFERENCE::learning PREFERENCE::permissive PREFERENCE::enforcing の verbose については以下の値を指定できます。
| 値 | 内容 |
| no | ポリシー違反のメッセージを表示しない。 |
| yes | ポリシー違反のメッセージを表示する。 |
CONFIG 行で指定されている mode については以下の値を指定できます。
| 値 | 内容 |
| disabled | 無効。通常のカーネルと同様に動作する。 |
| learning | 学習モード。ポリシーに違反してもエラーにせず、ポリシーへの自動追加を行う。 |
| permissive | 確認モード。ポリシーに違反してもエラーにせず、ポリシーへの自動追加も行わない。 |
| enforcing | 強制モード。ポリシーに違反したらエラーとする。 |
w キー、 e キーの順に押すことで、以下の画面が表示されます。

矢印キーや Home/End/PageUp/PageDown キーを使ってスクロールすることができます。
この画面には以下の例外設定が表示されます。
| (1) パス名のパターン |
file_pattern というキーワードを使用して、パス名のパターンを登録します。アクセス許可を学習する際に、要求されたパス名が file_pattern というキーワードを使用して登録されたパス名のパターンと一致した場合、パターン化されたパス名でアクセス許可が学習されます。
システムにインストールされているアプリケーションやその設定により、上記以外にもパターン化されたパス名が必要になります。不足しているパターンは、実際にどのようなアクセスが行われるかを観察してから、適切にパターン化して追加します。 | ||
| (2) パス名のグループ |
path_group というキーワードを使用して、パス名のパターンを登録します。これは、複数のパス名を集約することでポリシーの記述量を減らすためのマクロです。使い方は後述します。 | ||
| (3) 数値のグループ |
number_group というキーワードを使用して、数値のパターンを登録します。これは、複数の数値を集約することでポリシーの記述量を減らすためのマクロです。使い方は後述します。 | ||
| (4) アドレスのグループ |
address_group というキーワードを使用して、 IPv4 または IPv6 アドレスのパターンを登録します。これは、複数の IP アドレスを集約することでポリシーの記述量を減らすためのマクロです。使い方は後述します。 | ||
| (5) 無条件に読み込みを許可するファイル |
allow_read というキーワードを使用して、全てのプログラムへの読み込みアクセスを許可するファイルのパス名を登録します。パターンも使用できます。読み込みモードで要求されたパス名が allow_read というキーワードを使用して登録されたパス名と一致した場合、ドメインポリシーで明示的に許可が与えられていなかった場合でも読み込みアクセスが許可されます。
システムにインストールされているアプリケーションやその設定により、上記以外にも常に読み込みアクセスを許可したいファイルがあるかもしれません。不足しているファイルは、実際にどのようなファイルを読み込むかを観察してから、必要に応じてその都度追加していきます。 | ||
| (6) 無条件に受け取ってよい環境変数名 |
allow_env というキーワードを使用して、全てのプログラムが受け取ってよい環境変数の名前を登録します。パターンも使用できます。プログラムの実行時に渡された環境変数の名前が allow_env というキーワードを使用して登録された名前と一致した場合、ドメインポリシーで明示的に許可が与えられていなかった場合でも受け取りが許可されます。
システムにインストールされているアプリケーションやその設定により、上記以外にも常に許可したい環境変数名があるかもしれません。不足している環境変数名は、実際にどのような環境変数名が使われているかを観察してから、必要に応じてその都度追加していきます。 | ||
| (7) 書き換えを禁止するファイル |
deny_rewrite というキーワードを使用して、既に記録されている部分の書き換えを禁止したいファイル(ログファイル等)のパス名を登録します。パターンが使用できます。 deny_rewrite というキーワードを使用して登録されたファイルは、後述するドメインポリシーの中で明示的に allow_rewrite というキーワードを用いて許可が与えられない限り、追記ではない書き込みモードでのオープンとファイルの切り詰めが禁止されます。
システムにインストールされているアプリケーションやその設定により、上記以外にも書き換えを禁止したいファイルがあるかもしれません。不足しているファイルは、実際にどのようなファイルが追記専用で使われているかを観察してから、必要に応じてその都度追加していきます。 | ||
| (8) プログラム名の集約 |
複数のプログラムを単一のプログラム名で扱うには、 aggregator というキーワードに続けて集約前のプログラム名と集約後のプログラム名を指定します。集約前のプログラム名にはパターンを使用できます。 | ||
| (9) ドメイン遷移を初期化するプログラム |
initialize_domain というキーワードを使用して、ドメイン遷移履歴をリセットするプログラムのパス名を登録します。パターンは使用できません。 initialize_domain というキーワードを使用して登録されたパス名のプログラムが実行された場合、そのプログラムは <kernel> 直下のドメインで動作します。
システムにインストールされているアプリケーションやその設定により、上記以外にもドメイン遷移履歴をリセットさせたいプログラムがあるかもしれません。最初にドメイン遷移履歴を作成して、実際にどのようなプログラムを指定したらよいかを考慮しながら、必要に応じてその都度追加していきます。その際、他のドメインへの影響に注意してください。例えば、ドメインポリシーとして
というポリシーが既に存在している状態で /bin/tcsh を initialize_domain として追加した場合、 /bin/tcsh は <kernel> /bin/tcsh というドメインへ遷移することになるため、 <kernel> ・・・ /bin/bash /bin/tcsh というドメインへは遷移できなくなってしまいます。そのような場合は、以下のように、 <kernel> ・・・ /bin/bash /bin/tcsh で始まる部分を <kernel> /bin/tcsh で始まるようにドメインポリシーを変更してやる必要があります。
| ||
| (10) ドメイン遷移を初期化させないプログラム |
no_initialize_domain というキーワードを使うことで、 initialize_domain キーワードの効果を打ち消すことができます。特定の条件下ではドメイン遷移を初期化させたくない場合に使用します。 | ||
| (11) ドメイン遷移を行わないドメイン |
keep_domain というキーワードを使用して、ドメイン遷移を行わないドメインを指定することができます。 | ||
| (12) ドメイン遷移を行うドメイン |
no_keep_domain というキーワードを使うことで、 keep_domain キーワードの効果を打ち消すことができます。特定の条件下でドメイン遷移を行わせたい場合に使用します。 | ||
| (13) 予約するローカルポート番号 |
deny_autobind というキーワードを使用して、ポートの自動選択機能によって割り当てられてしまうことを防ぐことができます。 |
q キーを押してポリシーエディタを終了してください。
以後、必要に応じてポリシーエディタのチュートリアルページであるポリシーエディタの使い方を参照してください。
TOMOYO Linux は、「アクセス許可ログ」(ポリシーに違反しなかったアクセス要求のログ)と「アクセス拒否ログ」(ポリシーに違反したアクセス要求のログ)を記録することができます。
アクセスログはドメインポリシーの形式と同じであり、そのままドメインポリシーへと追加することができます。「アクセス拒否ログ」に記録された要求の中で、許可すべきものと判断したものをドメインポリシーに追加してください。
アクセス許可ログ /proc/ccs/grant_log とアクセス拒否ログ /proc/ccs/reject_log をカーネルから読み出してファイルに保存する為に、 ccs-auditd というデーモンプログラムを利用できます。以下のコマンドを /etc/rc.local 等から実行するようにしてください。
| /usr/sbin/ccs-auditd アクセス許可ログの保存場所 アクセス拒否ログの保存場所 |
アクセス許可ログを保存する必要が無い場合は、プロファイルで PREFERENCE::audit={ max_grant_log=0 } という指定をして、アクセス許可ログの保存場所として /dev/null を指定することができます。 ccs-auditd にはフィルタリング機能がありませんので、アクセス許可ログを保存する場合はディスク容量に注意してください。
アクセス拒否ログを保存する必要が無い場合は、プロファイルで PREFERENCE::audit={ max_reject_log=0 } という指定をして、アクセス拒否ログの保存場所として /dev/null を指定することができます。アクセス拒否ログは保存しておくことを推奨します。この手順書では、アクセス拒否ログを /var/log/tomoyo/reject_log.conf に保存するものとします。
| /usr/sbin/ccs-auditd /dev/null /var/log/tomoyo/reject_log.conf |
アクセスログを保存するディレクトリは予め作成しておいてください。
| [root@tomoyo ~]# mkdir -p /var/log/tomoyo |
logrotate によるローテーションを行わせたい場合は、以下のような内容のファイルを /etc/logrotate.d/tomoyo に作成してください。なお、 nocreate オプションを必ず指定してください。 nocreate オプションを忘れると、最初のローテーションが実行されて以降のログが保存されなくなってしまいます。
|
/var/log/tomoyo/reject_log.conf { weekly rotate 9 missingok notifempty nocreate } |
アクセス許可ログ・アクセス拒否ログのどちらも保存しない場合には ccs-auditd を実行する必要はありません。また、プロファイルで PREFERENCE::audit={ max_grant_log=0 max_reject_log=0 } を指定しておくことで、消費メモリの節約と応答速度の向上が期待できます。
TOMOYO Linux では、メールなどの通知手段を予め設定しておくことにより、強制モードにおけるポリシー違反の発生を報告することができます。
通知のために cron デーモンを使うことができます。例えば、1時間に1回まで root@example.com 宛のメールで通知するには
| 00 * * * * root /usr/lib/ccs/ccs-notifyd 0 'mail root@example.com' |
という行を /etc/crontab に追加してください。
システムを再起動して、起動時に TOMOYO Linux 対応カーネルを選択してください。
| [root@tomoyo ~]# reboot |