# TOMOYO Linux (日本語)

TOMOYO Linux は Linux 用の強制アクセス制御(MAC)の実装です。2003年3月にローンチされ、NTT データによって提供されています。TOMOYO Linux はシステムの振る舞いに着目し、目的を達成するのに必要な振る舞いやリソースについて報告させることができます。アクセス制限ツールとしてだけでなくシステム解析ツールとしても利用価値があります。

TOMOYO Linux におけるセキュリティのゴールは"多くのユーザーにとって現実的な要件を満たし、管理者が使いやすさを維持できる強制アクセス制御"を提供することです。TOMOYO Linux はセキュリティ専門家のためだけでなく、標準的なユーザーや管理者のために開発されています。

Note: この記事では網羅的な解説はしないので、充実したプロジェクトのユーザードキュメントの補助としてお使いください。
Tip: TOMOYO Linux 2.xブランチが Arch Linux の [community] レポジトリに入っています。今のところこのブランチでは 1.x ブランチと同等の機能は完備されていませんが、手軽に始めたい人には 2.x ブランチの方が簡単にインストールできます。TOMOYO Linux 1.x ブランチはより良いセキュリティを求める人向けで、AKARI はその中間に位置します。

## イントロダクション

TOMOYO Linux は簡単な方法でシステムを制御します:

- カーネルのライフタイムに発生したアクセスリクエストの全てを記録します
- 管理者は予想される・望ましいアクセスリクエストだけを許可するポリシーを作ります

AppArmor とは違って、TOMOYO Linux は、アプリケーションの exploit をつこうとする攻撃者からシステム全体を守るように設計されています。脅威に対処するために、TOMOYO Linux はテスト環境で全てのアプリケーションの挙動を記録し、記録された挙動内でアプリケーションの行動を本番環境で制限します。

TOMOYO Linux は他人に書かれた既製のポリシーファイルをユーザーが使うことを意図していません。自動的にポリシーファイルを生成する "learning mode" を必要に応じて使いながら、スクラッチからポリシーを作る必要があります。TOMOYO Linux はシステム内で起こっていることを逐一観測するのでシステムの解析ツールとしても有用です。strace と同じようにプログラムによって実行されている命令やアクセス中のファイル/ネットワークを報告します。

この表では TOMOYO Linux と AppArmor、SELinux、SMACK を比較しています。

## 開発ブランチ

TOMOYO Linux 1.x はオリジナルの実装です。TOMOYO Linux は2005年11月11日に初めてリリースされました。当時 Linux カーネルへのパッチとして作られ、現在も活発に開発されています。SELinux や SMACK、AppArmor など他のセキュリティモジュールと共存できます。

TOMOYO Linux 2.x は標準の Linux カーネルに統合されている実装です。2009年の6月に、Linux Security Module (LSM) インターフェースを利用する形で TOMOYO は Linux カーネル 2.6.30 にマージされました。しかしながら、LSM は TOMOYO Linux の完全な強制アクセス制御を Linux カーネルで機能させるには不十分です。そのため 1.x ブランチよりも少ない機能しか提供されていません。この表にそれぞれのブランチの違いが比較されています。

AKARI は TOMOYO Linux 1.x をベースにローダブル・カーネル・モジュール (LKM) として機能します。そのためユーザーはカーネルにパッチをあてリコンパイルする必要がないという利点があります。このテーブルで AKARI と TOMOYO Linux 1.x・2.x ブランチの比較を一覧することができます。

## TOMOYO Linux 1.x

TOMOYO Linux 1.x を使うことで TOMOYO Linux プロジェクトで開発された全ての機能を利用することができます。しかしながら、このブランチを使うには多くのハードルがあります。カーネルに ccs-patch をパッチしてその後リコンパイルしなくてはなりません。

linux-ccs とユーザースペースツールをインストールする必要があります。AUR にそれぞれ linux-ccs と ccs-tools のパッケージが存在します。

### 初期設定

ポリシーを初期化してください:

    # /usr/lib/ccs/init_policy

ポリシーファイルは `/etc/css/` ディレクトリに保存されています。編集するには:

    # ccs-editpolicy

## AKARI

### AKARI の制限

AKARI にはカーネルリコンパイルが必要ないという利点があります。TOMOYO Linux を単純にシステム解析に使うつもりなら、AKARI は一番簡単な方法になります。TOMOYO Linux をシステム制限に使うのなら、TOMOYO Linux 1.x ブランチの機能を得るために最低限の労力が必要です。ただ、少しの機能制限を考慮しなくてはなりません:

- どの機能が制限されるかはカーネルのバージョンと、ディストリビューションによる設定によります:

    CONFIG_SECURITY=y [required]
    CONFIG_KALLSYMS=y [required]
    CONFIG_PROC_FS=y [required]
    CONFIG_MODULES=y [required]
    CONFIG_SECURITY_PATH=y [optional: for using absolute pathnames]
    CONFIG_SECURITY_NETWORK=y [optional: for providing network restriction]

- LSM フックを使えないため、高度なネットワークオペレーションのいくつかの制限が使えません
- ケイパビリティを使った制限は行えません
- Looking up per-task variables is slower as they are managed outside "struct task_struct" in order to keep KABI unchanged. However, this should not be noticeable for the typical end-user as performance decrease by pathname based permission checking is dominant

このテーブルで AKARI と TOMOYO Linux 1.x、2.x ブランチとの比較を一覧できます。

Note: 2.6.36 以後の Arch Linux カーネルでは全ての機能を有効にするのに必要なコンフィグレーションオプションの全てが提供されています。

### インストール

ユーザースペースツールとあわせて AKARI をインストールする必要があります。AKARIとccs-tools のパッケージが AUR で手に入ります。

AKARI を有効にするためにブートローダの設定を変える必要があります:

    title  Arch Linux
    root   (hd0,0)
    kernel /boot/vmlinuz-linux root=/dev/sda1 ro init=/sbin/ccs-init
    initrd /boot/initramfs-linux.img

### 初期設定

ポリシーを初期化してください:

    # /usr/lib/ccs/init_policy --module_name=akari

ポリシーファイルは `/etc/css/` ディレクトリに保存されています。編集するには:

    # ccs-editpolicy

## TOMOYO Linux 2.x

### TOMOYO Linux 2.x の制限

Linux カーネルのメインラインに取り込まれている TOMOYO Linux 2.x の機能は完全ではありませんが、2.5.x からほとんど遜色がなくなっています。1.x ブランチと比べると実装されていない機能が少数あります。この表でそれぞれの開発ブランチの差を比較できます。

### インストール

TOMOYO Linux 2.x は Linux のメインラインのカーネルの一部です。次のカーネルコンフィグレーションが必要です:

    CONFIG_SECURITY_TOMOYO=y

Note: 2.6.36以後のArch Linuxカーネルでは全ての機能を有効にするのに必要なコンフィグレーションオプションの全てが提供されています。

カーネルが TOMOYO Linux 2.x をサポートしていれば、あとはユーザースペースのツールをインストールすれば十分です:

    pacman -S tomoyo-tools

カーネルバージョンが 2.6.30 から 2.6.35 の場合、tomoyo-tools 2.2.x をインストールしてください。パッケージは AUR で手に入ります。

そして、`/etc/default/grub` の GRUB_CMDLINE_LINUX_DEFAULT パラメータに security=tomoyo TOMOYO_trigger=/sbin/init を追加:

    GRUB_CMDLINE_LINUX_DEFAULT="quiet init=/sbin/init security=tomoyo TOMOYO_trigger=/bin/systemd"

その後、`grub.cfg` をリコンパイル:

    # grub-mkconfig -o /boot/grub/grub.cfg

`/sbin/init` が実行された時に TOMOYO は `/etc/tomoyo/policy/current` の全てのポリシーをロードします。

Note: 現在、/sbin/init は /usr/lib/systemd/systemd のシンボリックリンクになっています。CONFIG_SECURITY_TOMOYO_ACTIVATION_TRIGGER か TOMOYO_trigger に /sbin/init を指定する必要があります。

For first time, you may want to auto-save in-memory policies to filesystem when computer goes to shutdown/reboot. If yes, append the following line to `/etc/rc.local.shutdown`:

    /usr/sbin/tomoyo-savepolicy

### 初期設定

ポリシーを初期化してください:

    # /usr/lib/tomoyo/init_policy

ポリシーファイルは `/etc/tomoyo/` ディレクトリに保存されています。編集するには:

    # tomoyo-editpolicy

By default, tomoyo will start with "Disabled" profile (see profile-table below). You may want to enable learning mode for everybody right now. Just switch profile for `<kernel>` namespace in `/etc/tomoyo/policy/current/domain_policy.conf`:

    <kernel>
    use_profile 1
    use_group 0

If unsure if such wide learning is needed, just ignore this step. You can switch profiles later using tomoyo-editpolicy in "Domain transition editor" by pressing S on any selected domain (domains).

Now, the computer should be restarted.

## 使用方法

TOMOYO Linux や AKARI を効果的に使うためにもドキュメントをよく読みましょう:

- TOMOYO Linux documentation
- AKARI documentation

編集をはじめるためにポリシーエディタを起動します。TOMOYO Linux 1.x もしくは AKARI を使っている場合は ccs-tools を使います:

    # /usr/sbin/ccs-editpolicy

TOMOYO Linux 2.x を使っている場合は tomoyo-tools を使います:

    # /usr/sbin/tomoyo-editpolicy

システムが動いている間、TOMOYO Linux はドメインを作りツリーに加えます。TOMOYO Linux のアクセス解析・制限はドメインを通して適用されます。全てのプロセスはシングルドメインに属し、プロセスはプログラムを起動するたびに新しいドメインに遷移します。ドメインの名前は実行した順番に連結されて表現されます。例えば、カーネルが属しているドメインの名前は "<kernel>" で、カーネルによって起動した `/sbin/init` のドメインの名前は "<kernel> /sbin/init"。もし `/sbin/init` が `/etc/rc.d/rc` を起動すると、そのドメインは "<kernel> /sbin/init /etc/rc.d/rc" になります。必要に応じてドメイン遷移を抑制したり初期化することができます。

それぞれのドメインにはプロファイルが割り当てられます。デフォルトでは異なる4つのプロファイルが定義されています：

Disabled | 通常のカーネルのように動作します。
Learning | アクセス要求がポリシーで許可されていなくても拒否しません。また、同じアクセス要求を次回以降は許可するためにポリシーに追加します。
Permissive | アクセス要求がポリシーで許可されていなくても拒否しません。ただし、ポリシーへの追加も行いません。
Enforcing | アクセス要求がポリシーで許可されていない場合には拒否します。また、ポリシーへの追加も行いません。

学習用プロファイルはシステムや特定のアプリケーションを解析するために使うことができます。 Once all of the desired access requests of a domain have been identified, the policy for that domain can be edited as required before selecting the enforcing profile. This can be done for any and all domains from the start of system boot.

## 参照

- TOMOYO Linux SourceForge page
- TOMOYO Linux Wiki
- AKARI SourceForge page
- AKARI documentation
- TOMOYO Linux 1.8.x documentation
- TOMOYO Linux 2.5.x documentation
- TOMOYO Linux Security Goal
- Policy sample
- TOMOYO Linux on the Embedded Linux Wiki
- Presentation slides from PacSec 2007

## 関連項目

- AppArmor
- SELinux

Categories:

- Security (日本語)
- Kernel (日本語)