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).
Last modified: $Date: 2024-03-30 20:25:00 +0900 (Sat, 30 Mar 2024) $
2.1 単語の表記規則
2.2 パターンの表記規則
2.3 単語の長さに関する制約
2.4 1 行の長さに関する制約
2.5 メモリ使用量に関する制約
3.1 所在について
3.2 変更について
4.1 ドメインとは
4.2 ドメイン遷移とは
/sys/kernel/security/tomoyo/profile および /etc/tomoyo/profile.conf で使われるもの
/sys/kernel/security/tomoyo/exception_policy および /etc/tomoyo/exception_policy.conf で使われるもの
/sys/kernel/security/tomoyo/domain_policy および /etc/tomoyo/domain_policy.conf で使われるもの
/sys/kernel/security/tomoyo/manager および /etc/tomoyo/manager.conf で使われるもの
TOMOYO Linux はパス名を用いたアクセス制御を行います。パス名には英数字だけでなく空白や改行などの文字、漢字のような複数バイトで構成される文字などが含まれる可能性があります。そのため、いかなる文字でも正しく処理できるようにするために、 TOMOYO Linux に於いては以下の規則に従って単語を表記します。単語とは、パス名だけでなくコメントや環境変数の名前やプログラム実行時のパラメータなど、文字列として扱う全ての情報を指します。
| 0x0 | 0x1 | 0x2 | 0x3 | 0x4 | 0x5 | 0x6 | 0x7 | 0x8 | 0x9 | 0xA | 0xB | 0xC | 0xD | 0xE | 0xF | ||||
| 0x0 | \001 | \002 | \003 | \004 | \005 | \006 | \007 | \010 | \011 | \012 | \013 | \014 | \015 | \016 | \017 | |||||
| 0x1 | \020 | \021 | \022 | \023 | \024 | \025 | \026 | \027 | \030 | \031 | \032 | \033 | \034 | \035 | \036 | \037 | ||||
| 0x2 | \040 | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | ||||
| 0x3 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? | ||||
| 0x4 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | ||||
| 0x5 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \\ | ] | ^ | _ | ||||
| 0x6 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | ||||
| 0x7 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | \177 | ||||
| 0x8 | \200 | \201 | \202 | \203 | \204 | \205 | \206 | \207 | \210 | \211 | \212 | \213 | \214 | \215 | \216 | \217 | ||||
| 0x9 | \220 | \221 | \222 | \223 | \224 | \225 | \226 | \227 | \230 | \231 | \232 | \233 | \234 | \235 | \236 | \237 | ||||
| 0xA | \240 | \241 | \242 | \243 | \244 | \245 | \246 | \247 | \250 | \251 | \252 | \253 | \254 | \255 | \256 | \257 | ||||
| 0xB | \260 | \261 | \262 | \263 | \264 | \265 | \266 | \267 | \270 | \271 | \272 | \273 | \274 | \275 | \276 | \277 | ||||
| 0xC | \300 | \301 | \302 | \303 | \304 | \305 | \306 | \307 | \310 | \311 | \312 | \313 | \314 | \315 | \316 | \317 | ||||
| 0xD | \320 | \321 | \322 | \323 | \324 | \325 | \326 | \327 | \330 | \331 | \332 | \333 | \334 | \335 | \336 | \337 | ||||
| 0xE | \340 | \341 | \342 | \343 | \344 | \345 | \346 | \347 | \350 | \351 | \352 | \353 | \354 | \355 | \356 | \357 | ||||
| 0xF | \360 | \361 | \362 | \363 | \364 | \365 | \366 | \367 | \370 | \371 | \372 | \373 | \374 | \375 | \376 | \377 |
以下に表記例を示します。
| 単語 | 正しい表記 | 誤った表記 |
| Hello world! | Hello\040world! | "Hello world!" |
| /home/user/Documents and Settings/ | /home/user/Documents\040and\040Settings/ | /home/user/Documents and Settings/ |
| コメント (UTF-8 の場合) | \343\202\263\343\203\241\343\203\263\343\203\210\040(UTF-8\040\343\201\256\345\240\264\345\220\210) | コメント\040(UTF-8\040の場合) |
パス名は必ず / から始まります。パス名が / で終わる場合はディレクトリ、 / 以外で終わる場合にはディレクトリ以外であると解釈されます。
| パス名 | 解釈 |
| / | ディレクトリ |
| /tmp/ | ディレクトリ |
| /tmp | ディレクトリ以外 |
| tmp/ | 無効なパス名 |
ただし、例外として、 /proc/プロセスID/fd/ ディレクトリに表示されるパイプのパス名は pipe: で、ソケットのパス名は socket: で始まります。
パス名にはテンポラリファイルのように、毎回異なる文字が使われる場合があります。そのため、ワイルドカードを用いたパターン化を行うことが必要になります。 TOMOYO Linux に於いては以下のワイルドカードをサポートしています。
| ワイルドカード | 意味 | 使用例 | ||||||||
| \* | / 以外の 0 文字以上 | /var/log/samba/\* | ||||||||
| \@ | / と . 以外の 0 文字以上 | /var/www/html/\@.html | ||||||||
| \? | / 以外の 1 文字 | /tmp/mail.\?\?\?\?\?\? | ||||||||
| \$ | 1 桁以上の 10 進数 | /proc/\$/cmdline | ||||||||
| \+ | 10 進数 1 桁 | /var/tmp/my_work.\+ | ||||||||
| \X | 1 桁以上の 16 進数 | /var/tmp/my-work.\X | ||||||||
| \x | 16 進数 1 桁 | /tmp/my-work.\x | ||||||||
| \A | 1 文字以上のアルファベット | /var/log/my-work/\$-\A-\$.log | ||||||||
| \a | アルファベット 1 文字 | /home/users/\a/\*/public_html/\*.html | ||||||||
| \- | パス名を除外する演算子 |
| ||||||||
| /\{dir\}/ | / +1回以上の dir/ の繰り返しに一致する演算子(カーネル 2.6.33 以降のみ有効) |
|
Linux に於いてはパス名の長さに関する上限は存在しませんが、パス名を用いたアクセス制御を行うために無限の長さをサポートすることはできません。そのため、 TOMOYO Linux に於いては、単語の長さは終端の NUL 文字を含めて 4000 バイトまでに制限されています。
TOMOYO Linux に於いては、 1 行の長さは終端の NUL 文字を含めて 8192 バイトまでに制限されています。
カーネル 2.6.33 以前に搭載されている TOMOYO Linux に於いては、アクセス許可や単語を記憶するために一度割り当てられたメモリは解放されません。システムを再起動する以外に、不要になったメモリを解放する手段は存在しません。
ただし、運用開始後にはアクセス許可の変更は生じにくいという傾向があること、および、運用開始前に適切にチューニングすることによりメモリ消費量を通常は 1 メガバイト以内に抑えられることから、心配する必要はありません。
TOMOYO Linux が現在使用中のメモリ消費量は、 /sys/kernel/security/tomoyo/meminfo から確認できます。単位はバイトです。 Shared: が単語を記憶するために使用されている量、 Private: がアクセス許可を記憶するために使用されている量で、減少することはありません。 Dynamic: がアクセス許可のチェックやアクセスログの保持などのために一時的に使用されている量で、不要になると減少します。
# cat /sys/kernel/security/tomoyo/meminfo Shared: 65536 Private: 49152 Dynamic: 5106 Total: 119794 |
カーネル 2.6.34 以降に搭載されている TOMOYO Linux に於いては、アクセス許可や単語を記憶するために割り当てられたメモリは自動的に解放されます。そのため、不要になったメモリを解放するためにシステムを再起動する必要はありません。
TOMOYO Linux が現在使用中のメモリ消費量は、 /sys/kernel/security/tomoyo/meminfo から確認できます。単位はバイトです。 Policy: がポリシーを記憶するために使用されている量です。
# cat /sys/kernel/security/tomoyo/meminfo Policy: 119794 Total: 119794 |
ポリシーファイルとは、アクセスの可否を定義したファイルです。システムの起動時に自動的にカーネルへと読み込まれます。
システムの起動時には、 /sbin/init というプログラムが実行されます。 /sbin/init の実行が要求されたときに、 /sbin/tomoyo-init というプログラムが存在していた場合、 /sbin/tomoyo-init が実行され、 /sbin/tomoyo-init の処理が終了してから /sbin/init の実行が開始されます。
/sbin/tomoyo-init は /etc/tomoyo/ ディレクトリにあるポリシーファイルを /sys/kernel/security/tomoyo/ ディレクトリを通じてカーネルへと読み込みます。
| カーネルとのインタフェース | ポリシーファイル | 定義されている内容 |
| /sys/kernel/security/tomoyo/profile | /etc/tomoyo/profile.conf | プロファイル(制御レベルを定義したもの) |
| /sys/kernel/security/tomoyo/manager | /etc/tomoyo/manager.conf | マネージャ(ポリシーの変更ができるプログラムを定義したもの) |
| /sys/kernel/security/tomoyo/exception_policy | /etc/tomoyo/exception_policy.conf | 例外ポリシー(ドメインポリシーの例外を定義したもの) |
| /sys/kernel/security/tomoyo/domain_policy | /etc/tomoyo/domain_policy.conf | ドメインポリシー(ドメイン単位で適用される設定) |
そのほかの情報を取得するためのインタフェースもあります。対応するポリシーファイルはありません。
| カーネルとのインタフェース | 内容 |
| /sys/kernel/security/tomoyo/.domain_status | 定義されているドメイン名とプロファイル番号 |
| /sys/kernel/security/tomoyo/meminfo | メモリ使用状況 |
| /sys/kernel/security/tomoyo/self_domain | 自分が属しているドメインのドメイン名 |
| /sys/kernel/security/tomoyo/.process_status | プロセスが属しているドメイン名とプロファイル番号 |
| /sys/kernel/security/tomoyo/version | TOMOYO Linux のバージョン |
カーネルとのインタフェースである /sys/kernel/security/tomoyo/ ディレクトリを経由してポリシーを変更することができるプログラム名を /sys/kernel/security/tomoyo/manager に登録します。プログラム名ではなくドメイン名で登録することもできます。
だけがカーネルとのインタフェースである /sys/kernel/security/tomoyo/ ディレクトリを経由してポリシーを変更できます。以下に例を示します。
|
# cat /sys/kernel/security/tomoyo/manager /usr/sbin/tomoyo-loadpolicy /usr/sbin/tomoyo-editpolicy /usr/sbin/tomoyo-setlevel /usr/sbin/tomoyo-setprofile /usr/sbin/tomoyo-ld-watch <kernel> /sbin/mingetty /bin/login /bin/bash |
デフォルトではユーザIDと実効ユーザIDの両方が 0 であるプロセスだけがポリシーを変更できますが、 root 以外のユーザによるポリシーの変更を許可の設定を行えば、非 root ユーザによるポリシーの変更も可能です。
なお、学習モード用のプロファイルが割り当てられているプロセスは、アクセスを要求するだけで /sys/kernel/security/tomoyo/domain_policy へと自動的にアクセス許可が追加されていきます。
TOMOYO Linux は、ドメイン単位でアクセス許可を定義します。アクセス許可はドメインポリシーと呼ばれ、 /sys/kernel/security/tomoyo/domain_policy を通じてアクセス許可を定義します。
TOMOYO Linux においては、全てのプロセスがそれぞれ 1 つのドメインに属し、全てのプログラムがそれぞれ異なるドメインに属します。現在実行されている 2 つのプロセスが同一のプログラムであっても、それぞれのプロセスの直前のドメインが異なっていれば異なるドメインに属します。
全てのドメインはカーネルが属するドメイン「 <kernel> 」を基点として定義されます。 /sbin/init はカーネルの属するドメインから起動されますので、 /sbin/init のドメインは「 <kernel> /sbin/init 」と定義されます。 /etc/rc.d/rc はカーネルから起動された /sbin/init の属するドメインから起動されますので、 /etc/rc.d/rc のドメインは「 <kernel> /sbin/init /etc/rc.d/rc 」と定義されます。
実行時のプログラムの名前により異なる動作をするプログラムが存在します。 例えば /sbin/pidof は /sbin/killall5 へのシンボリックリンクです。 TOMOYO Linux は正規化したパス名を使用するので、 /sbin/pidof を実行すると /sbin/killall5 が実行されたものとしてドメインが定義されます。
プロセスがプログラムを実行しようとすると、以下の処理が行われます。
| Step | 内容 |
| プログラム名の取得 |
実行しようとするプログラムの絶対パス名を取得して「パス名候補 1 」とします。ただし、実行しようとするプログラムがシンボリックリンクの場合は、シンボリックリンクを解決したパス名を取得します。 実行しようとするプログラムの絶対パス名を取得して「パス名候補 2 」とします。ただし、実行しようとするプログラムがシンボリックリンクの場合は、シンボリックリンクを解決する前のパス名を取得します。 |
| シンボリックリンクの識別 |
「パス名候補 1 」と「パス名候補 2 」が一致しない場合、例外ポリシーから
というエントリを探します。見つかった場合は「パス名候補 2 」を「パス名候補 1 」とします。 |
| 権限のチェック |
ドメインポリシーから
というエントリを探します。見つからなければプログラムの実行要求は拒否されます。 |
| 遷移先の決定 |
(1) 例外ポリシーから
というエントリを探します。見つかった場合は (3) へ進みます。 (2) 例外ポリシーから
というエントリを探します。見つかった場合は「カーネルが属しているドメインのドメイン名( <kernel> )」と「パス名候補 1 」とを連結して「遷移先ドメイン」として (6) へ進みます。 (3) 例外ポリシーから
というエントリを探します。見つかった場合は (5) へ進みます。 (4) 例外ポリシーから
というエントリを探します。見つかった場合は「現在のプロセスが属しているドメインのドメイン名」を「遷移先ドメイン」とし、 (6) へ進みます。 (5) 「現在のプロセスが属しているドメインのドメイン名」と「パス名候補 1 」とを連結して「遷移先ドメイン」とし、 (6) へ進みます。 (6) ドメインポリシーから「遷移先ドメイン」を探します。見つからなければプログラムの実行要求は拒否されます。 (7) 通常のプログラム実行処理を行い、正常に終了した場合は「遷移先ドメイン」に遷移します。 |
有効にしたい機能とそのモードを「 プロファイル番号-項目=値 」という形式で定義します。プロファイル番号は 0 ~ 255 が指定可能です。プロファイルの内容を変更するには tomoyo-setlevel コマンドまたは tomoyo-loadpolicy コマンドを使用します。
各ドメインには 1 個のプロファイルが割り当てられます。ドメインにプロファイルを割り当てるには tomoyo-setprofile コマンドまたは tomoyo-editpolicy コマンドまたは tomoyo-loadpolicy コマンドを使用します。
現在ドメインに割り当てられているプロファイル番号は tomoyo-editpolicy コマンドで確認できます。
現在動作中のプロセスに割り当てられているプロファイル番号は tomoyo-pstree コマンドで確認できます。
現在のポリシーを tomoyo-savepolicy コマンドで保存した場合、 use_profile というキーワードに保持されます。
現在のプロファイルを読み出しまたは追加するには以下のように操作します。
(例)
cat /sys/kernel/security/tomoyo/profile
tomoyo-savepolicy -p
tomoyo-setlevel 1-MAC_FOR_FILE=learning
echo 1-MAC_FOR_FILE=learning | tomoyo-loadpolicy -p
関連項目:変更について
ファイルに対する強制アクセス制御のレベルを指定します。
| 値 | 内容 |
| disabled | 無効。通常のカーネルと同様に動作します。 |
| learning | 学習モード。ポリシーに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシー違反とならないようにするために、ポリシーへの自動追加を行います。 |
| permissive | 確認モード。ポリシーに違反してもアクセス要求を拒否することはしませんが、ポリシーへの自動追加も行いません。 |
| enforcing | 強制モード。ポリシーに違反するアクセス要求を拒否します。 |
学習モードに於いて自動的に追加されるアクセス許可の上限を指定します。デフォルトは 2048 件です。
ドメインポリシーに対する違反を表示するかどうかを指定します。
| 値 | 内容 |
| disabled | ドメインポリシーに対する違反を表示しません。 |
| enabled | ドメインポリシーに対する違反を表示します。 |
このファイルでは、全てのドメインを定義し、各ドメインに対して与えるアクセス許可を定義します。
ドメインを定義している行( <kernel> で始まる行)の次行から次のドメインを定義している行の前行までが、そのドメインに対するアクセス許可です。
現在のドメインポリシーを読み出しまたは追加または削除するには、以下のように操作します。
(例)ドメインを選択してアクセス許可を追加(ドメインが存在しない場合は作成されます)
printf "<kernel> /sbin/init\nallow_read /etc/passwd\n" | tomoyo-loadpolicy -d
(例)ドメインを選択してアクセス許可を追加(ドメインが存在しない場合は作成されません)
printf "select <kernel> /sbin/init\nallow_read /etc/passwd\n" | tomoyo-loadpolicy -d
(例)ドメインを選択してアクセス許可を削除
printf "select <kernel> /sbin/init\ndelete allow_read /etc/passwd\ndelete allow_read /etc/shadow\n" | tomoyo-loadpolicy -d
(例)特定のドメインを削除
printf "delete <kernel> /sbin/init\n" | tomoyo-loadpolicy -d
(例)ドメインポリシーの読み出し
cat /sys/kernel/security/tomoyo/domain_policy
関連項目:変更について
指定されたパス名を実行することを許可します。パス名にワイルドカードを使用することは認められていません。
(例) allow_execute /bin/ls
関連項目:ドメイン遷移
指定されたパス名を書き込みモードでオープンすることを許可します。
(例) allow_write /dev/null
指定されたパス名を読み込みモードでオープンすることを許可します。
(例) allow_read /proc/meminfo
指定されたパス名を読み書きモードでオープンすることを許可します。
(例) allow_read/write /dev/null
指定されたパス名のファイルを新規作成することを許可します。
(例) allow_create /var/lock/subsys/crond
指定されたパス名を削除することを許可します。
(例) allow_unlink /var/lock/subsys/crond
パス名で指定されたディレクトリを作成することを許可します。
(例) allow_mkdir /tmp/logwatch.\*/
ディレクトリの削除を許可します。
(例) allow_rmdir /tmp/logwatch.\*/
FIFO の作成を許可します。
(例) allow_mkfifo /dev/initctl
UNIX ドメインソケットの作成を許可します。
(例) allow_mksock /dev/log
ブロック型デバイスファイルの作成を許可します。
(例) allow_mkblock /dev/\*
キャラクタ型デバイスファイルの作成を許可します。
(例) allow_mkchar /dev/\*
ファイルの切り詰めと伸長を許可します。
(例) allow_truncate /etc/mtab
シンボリックリンクの作成を許可します。
(例) allow_symlink /dev/cdrom
ハードリンクの作成を許可します。
(例) allow_link /etc/mtab~\$ /etc/mtab~
ファイル名の変更を許可します。
(例) allow_rename /etc/mtab.tmp /etc/mtab
deny_rewrite によりファイルの内容の上書きが禁止されているパス名が指すファイル内容の上書きを許可します。
(例) allow_rewrite /var/log/messages
関連項目: deny_rewrite
DACパーミッションの変更を許可します。(カーネル 2.6.34 以降のみ有効)
(例) allow_chmod /dev/mem
所有者の変更を許可します。(カーネル 2.6.34 以降のみ有効)
(例) allow_chown /dev/sda
グループの変更を許可します。(カーネル 2.6.34 以降のみ有効)
(例) allow_chgrp /dev/audio
IOCTL 要求を許可します。(カーネル 2.6.34 以降のみ有効)
(例) allow_ioctl socket:[\$]
指定された場所へのマウントを許可します。(カーネル 2.6.34 以降のみ有効)
(例) allow_mount /proc/
指定された場所のアンマウントを許可します。(カーネル 2.6.34 以降のみ有効)
(例) allow_unmount /mnt/cdrom/
ルートディレクトリの移動を許可します。(カーネル 2.6.34 以降のみ有効)
(例) allow_chroot /var/empty/sshd/
ルートディレクトリの交換を許可します。(カーネル 2.6.34 以降のみ有効)
通常、このキーワードを使う必要はありません。
これは、このドメインに対して割り当てられているプロファイル番号を示しています。プロファイル番号は 0 ~ 255 の値をとります。
これは、このドメインに対しては例外ポリシーで指定されている allow_read を無視することを示しています。特定のドメインに対して特に読み込みモードでオープンできるファイルを制限したい場合に使います。
関連項目: allow_read
これは、学習モードで動作中にアクセス許可の数が MAX_ACCEPT_ENTRY で指定された値に到達したため、このドメインに対してはアクセス許可を学習しきれなかったことを示しています。チューニングを行うなどしてアクセス許可の数を減らすようにしてください。
関連項目: MAX_ACCEPT_ENTRY
これは、プログラムの実行時にドメインを新規作成しようと試みたが、「新規作成されるドメインのドメイン名が長すぎる」または「カーネルがメモリを割り当てることができなかった」という理由により、ドメイン遷移を行わないままプログラムの実行を許可したことを示しています。このドメインに対して MAC_FOR_FILE=enforcing のプロファイルを割り当てる予定がある場合には、「ドメイン遷移を抑制する」または「メモリ割り当て量を増やす」ようにしてください。
関連項目: keep_domain ポリシーに割り当てられるメモリ量を制限
現在の例外ポリシーを読み出しまたは追加または削除するには以下のように操作します。
(例)
echo 'file_pattern /proc/\$/status' | tomoyo-loadpolicy -e
echo 'delete file_pattern /proc/\$/status' | tomoyo-loadpolicy -e
cat /sys/kernel/security/tomoyo/exception_policy
関連項目: 変更について
パス名のパターン化を指示するには、 file_pattern というキーワードに続けて、パス名のパターンを指定します。パス名は正規化されたパス名でなければなりません。このキーワードは実行許可を与える場合とドメイン定義には適用されません。
例えば、プロセスIDを含む正規化されたパス名( /proc/PID/ )は、アクセス制御が正しく行われるようにグループ化されなければなりません。
学習モード( MAC_FOR_FILE が learning に設定されている状態)でパス名に対するアクセスを行うと、自動的にパターン化された状態で学習されます。学習モード以外には影響しません。この構文は、既知のパターンをテンプレート化することによって、後でチューニングを行うときの手間を軽減するためだけに使われます。
パス名のグループを定義するには、 path_group というキーワードに続けて、グループ名とパス名のパターンを指定します。(カーネル 2.6.35 以降のみ有効)
例えば、ホームディレクトリ以下の全ファイルをまとめたい場合、
|
path_group HOME-DIR-FILE /home/\*/\* path_group HOME-DIR-FILE /home/\*/\{\*\}/\* |
のように定義しておくことで、ドメインポリシーのファイルに対するアクセス許可を指定する際に
| allow_read @HOME-DIR-FILE |
のように指定できます。
無条件に読み込みを許可するファイルを指定するには、 allow_read というキーワードに続けて、正規化されたファイル名を指定します。このキーワードの目的は、 GLIBC がプログラム実行時に参照するファイルやエラーメッセージを表示する際に参照するファイルのように、どのようなプログラムから参照されても構わないというファイルを指定することで、各ドメインで記述しないで済むようにすることです。なお、各ドメインで ignore_global_allow_read という指定をすると、ここで指定された allow_read は無視されます。
関連項目: allow_read ignore_global_allow_read
deny_rewrite というキーワードを使用して、既に記録されている部分の書き換えを禁止したいファイル(ログファイル等)のパス名を登録します。パターンが使用できます。 deny_rewrite というキーワードを使用して登録されたファイルは、ドメイン用ポリシーの中で明示的に allow_rewrite というキーワードを用いて許可が与えられない限り、追記ではない書き込みモードでのオープンとファイルの切り詰めが禁止されます。
関連項目: allow_rewrite
シンボリックリンクを解決した名前ではなくシンボリックリンクの名前のまま実行させるプログラムを指定するには、 alias というキーワードに続けてシンボリックリンクを解決したパス名とシンボリックリンクを解決する前のパス名を指定します。このキーワードの目的は、実行時の名前によって異なる振る舞いをするプログラムが、ハードリンクではなくシンボリックリンクで参照される場合に、シンボリックリンクの名前でドメインを遷移できるようにすることです。
例えば /sbin/pidof は /sbin/killall5 へのシンボリックリンクであるため、通常は /sbin/pidof を実行すると /sbin/killall5 が実行されたものとしてドメインが定義されます。しかし、 alias /sbin/killall5 /sbin/pidof という指定をすることで、 /sbin/pidof を実行すると /sbin/pidof が実行されたものとしてドメインが定義されるようにできます。
関連項目: allow_execute
特定のプログラムが実行された場合にドメイン遷移を初期化させるには、 initialize_domain というキーワードを使用します。
from 以降が指定されていない場合は任意のドメインから実行された場合に適用されます。ドメイン名が <kernel> で始まらない場合は、ドメイン名の最後のプログラム名が一致する全てのドメインに適用されます。
このキーワードの目的は、常駐型プログラムや必要に応じてカーネルから起動されるプログラムを、通常とは異なるドメインに遷移させることで、ドメイン遷移を集約することです。
関連項目:ドメイン遷移 no_initialize_domain
initialize_domain の効力を打ち消すには、 no_initialize_domain というキーワードを指定します。
このキーワードはドメイン遷移を初期化させたくない場合に使用します。
関連項目:ドメイン遷移 initialize_domain
特定のドメインからプログラムが実行されてもドメイン遷移を行わないようにするには、 keep_domain というキーワードを使用します。
from 以前が指定されていない場合は任意のプログラムが実行された場合に適用されます。ドメイン名が <kernel> で始まらない場合は、ドメイン名の最後のプログラム名が一致する全てのドメインに適用されます。
このキーワードの目的は、不要なドメイン遷移の発生を抑制することでドメイン数とメモリ消費を抑えることです。
ドメイン遷移を抑制するには、 keep_domain ディレクティブに続けてドメイン名を指定します。
このディレクティブで指定されたドメインに属しているプロセスは、 initialize_domain ディレクティブで指定されたプログラムが実行されない限り、同じドメインに残ります。
関連項目:ドメイン遷移 no_keep_domain
keep_domain の効力を打ち消すには、 no_keep_domain というキーワードを指定します。
このキーワードはドメイン遷移を行わせたい場合に使用します。
関連項目:ドメイン遷移 keep_domain
ポリシーの読み書きを行えるプログラムまたはドメインの一覧を取得または追加します。
デフォルトではユーザIDと実効ユーザIDの両方が 0 であるプロセスだけがポリシーを変更できますが、非 root ユーザによる変更を認めたい場合に使用します。
tomoyo-setprofile コマンドが行単位での処理を行いやすくするために domain_policy の内容からプロファイル番号とドメイン名の部分だけを抽出したもの。DBMSのビューに相当する機能を提供します。
TOMOYO Linux がポリシーを保持するために使用しているカーネルのメモリ情報を取得します。
(例)
cat /sys/kernel/security/tomoyo/meminfo
呼び出し元プロセスが属しているドメインの名前を取得します。
(例)
cat /sys/kernel/security/tomoyo/self_domain
tomoyo-pstree コマンド(「現在動作中のプロセス」と「そのプロセスが属しているドメイン」と「そのドメインに割り当てられているプロファイル番号」を pstree のように一覧表示する)のためのインタフェース。例外的にポリシーマネージャとして登録されていないプログラムでも書き込みを行える。
TOMOYO Linux のバージョン番号を取得するためのインタフェースです。
(例)
cat /sys/kernel/security/tomoyo/version
デフォルトではユーザIDと実効ユーザIDの両方が 0 であるプロセスだけがポリシーを変更できますが、非 root ユーザによる変更を認めたい場合には
| # echo manage_by_non_root | /usr/sbin/tomoyo-loadpolicy -m |
のように manage_by_non_root というキーワードを書き込むことで、ユーザIDと実効ユーザIDのチェックを無効にすることができます。また、再びユーザIDと実効ユーザIDのチェックを有効にするには、
| # echo delete manage_by_non_root | /usr/sbin/tomoyo-loadpolicy -m |
のように delete manage_by_non_root というキーワードを書き込んでください。 /sys/kernel/security/tomoyo/ 以下のエントリの所有者は root なので、非 root ユーザによるアクセスを認めるためには必要に応じて chown/chmod を実行してください。
起動時に自動的にこの処理が行われるようにするために、 /sbin/tomoyo-init は /etc/tomoyo/tomoyo-post-init というプログラムが存在する場合には /etc/tomoyo/tomoyo-post-init も実行するようになっています。よって、例えば demo ユーザが /sys/kernel/security/tomoyo/ インタフェースへの読み書きができるように設定したい場合は、
|
#! /bin/sh echo manage_by_non_root > /sys/kernel/security/tomoyo/manager chown -R demo /sys/kernel/security/tomoyo/ |
という内容で /etc/tomoyo/tomoyo-post-init を作成し、
|
# chmod 755 /etc/tomoyo/tomoyo-post-init # chown -R demo /etc/tomoyo/ |
を実行することで demo ユーザがポリシーのあるディレクトリへのアクセスとポリシーを編集するためのプログラムを実行できるようになります。
TOMOYO Linux のポリシーを保持しておくために割り当てられるメモリの上限(クォータ)を設定することができます。
/etc/tomoyo/tomoyo-post-init から以下のように /sys/kernel/security/tomoyo/meminfo に書き込みを行うことで設定できます。
カーネル 2.6.33 以前の場合
|
echo Shared: 2097152 > /sys/kernel/security/tomoyo/meminfo echo Private: 2097152 > /sys/kernel/security/tomoyo/meminfo |
カーネル 2.6.34 以降の場合
| echo Policy: 2097152 > /sys/kernel/security/tomoyo/meminfo |