オープンソース・ソフトウェアの開発とダウンロード

Subversion リポジトリの参照

Contents of /tags/htdocs/ja/1.6.x/new-policy-reference.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1094 - (show annotations) (download) (as text)
Wed Apr 9 05:14:41 2008 UTC (16 years, 1 month ago) by kumaneko
File MIME type: text/html
File size: 132141 byte(s)


1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2 <html lang="ja-JP">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=shift_jis">
5 <meta http-equiv="Content-Style-Type" content="text/css">
6 <title>TOMOYO Linux ポリシ解説書</title>
7 <link rel="stylesheet" href="tomoyo.css" media="all" type="text/css">
8 </head>
9 <body>
10 <p style="text-align:right;"><a href="../../en/1.6.x/policy-reference.html">English Page</a></p>
11 <h1 style="text-align:center;">TOMOYO Linux ポリシ解説書</h1>
12 <p style="text-align:right;">Last modified: $Date: 2008-03-03 16:32:30 +0900 (Mon, 3 Mar 2008) $</p>
13 <h1><a name="index">目次</a></h1>
14 <h2><a href="#Keyword_Index">1. キーワード一覧</a></h2>
15 <h2><a href="#Introduction">2. はじめに</a></h2>
16 <p><a href="#word_expression_rules">2.1 単語の表記規則</a></p>
17 <p><a href="#wildcard_expression_rules">2.2 パターンの表記規則</a></p>
18 <p><a href="#word_length_rules">2.3 単語の長さに関する制約</a></p>
19 <p><a href="#line_length_rules">2.4 1行の長さに関する制約</a></p>
20 <p><a href="#memory_allocation_rules">2.5 メモリ使用量に関する制約</a></p>
21 <h2><a href="#Policy_Files">3. ポリシファイルに関して</a></h2>
22 <p><a href="#policy_file_locations">3.1 所在について</a></p>
23 <p><a href="#policy_file_modifiers">3.2 変更について</a></p>
24 <h2><a href="#Domain_Rules">4. ドメインに関して</a></h2>
25 <p><a href="#domain_definition">4.1 ドメインとは</a></p>
26 <p><a href="#domain_transition">4.2 ドメイン遷移とは</a></p>
27 <p><a href="#access_logs">4.3 アクセスログについて</a></p>
28 <h2><a href="#Syntax_Details">5. キーワード詳細</a></h2>
29 <h2><a href="#features_for_advanced">6. 便利な機能</a></h2>
30 <p><a href="#conditional_acl">6.1 条件付きアクセス許可の指定</a></p>
31 <p><a href="#stateful_acl">6.2 ステートフルなアクセス許可の指定</a></p>
32 <p><a href="#sleep_penalty">6.3 ポリシ違反時のペナルティ指定</a></p>
33 <p><a href="#execute_handler">6.4 プログラムの実行可否をカーネルの外部で判断</a></p>
34 <p><a href="#denied_execute_handler">6.5 許可されていないプログラムの実行が要求された場合の代替処理指定</a></p>
35 <hr>
36
37 <h1><a name="Keyword_Index">1. キーワード一覧</a></h1>
38
39 <p><a name="profile">/proc/ccs/profile</a> <a name="profile.conf">/etc/ccs/profile.conf</a></p>
40
41 <ul>
42 <li><a href="#profile_MAC_FOR_FILE">MAC_FOR_FILE</a></li>
43 <li><a href="#profile_MAC_FOR_ARGV0">MAC_FOR_ARGV0</a></li>
44 <li><a href="#profile_MAC_FOR_ENV">MAC_FOR_ENV</a></li>
45 <li><a href="#profile_MAC_FOR_CAPABILITY::inet_tcp_create">MAC_FOR_CAPABILITY::inet_tcp_create</a></li>
46 <li><a href="#profile_MAC_FOR_CAPABILITY::inet_tcp_listen">MAC_FOR_CAPABILITY::inet_tcp_listen</a></li>
47 <li><a href="#profile_MAC_FOR_CAPABILITY::inet_tcp_connect">MAC_FOR_CAPABILITY::inet_tcp_connect</a></li>
48 <li><a href="#profile_MAC_FOR_CAPABILITY::use_inet_udp">MAC_FOR_CAPABILITY::use_inet_udp</a></li>
49 <li><a href="#profile_MAC_FOR_CAPABILITY::use_inet_ip">MAC_FOR_CAPABILITY::use_inet_ip</a></li>
50 <li><a href="#profile_MAC_FOR_CAPABILITY::use_route">MAC_FOR_CAPABILITY::use_route</a></li>
51 <li><a href="#profile_MAC_FOR_CAPABILITY::use_packet">MAC_FOR_CAPABILITY::use_packet</a></li>
52 <li><a href="#profile_MAC_FOR_CAPABILITY::use_kernel_module">MAC_FOR_CAPABILITY::use_kernel_module</a></li>
53 <li><a href="#profile_MAC_FOR_CAPABILITY::create_fifo">MAC_FOR_CAPABILITY::create_fifo</a></li>
54 <li><a href="#profile_MAC_FOR_CAPABILITY::create_block_dev">MAC_FOR_CAPABILITY::create_block_dev</a></li>
55 <li><a href="#profile_MAC_FOR_CAPABILITY::create_char_dev">MAC_FOR_CAPABILITY::create_char_dev</a></li>
56 <li><a href="#profile_MAC_FOR_CAPABILITY::create_unix_socket">MAC_FOR_CAPABILITY::create_unix_socket</a></li>
57 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_MOUNT">MAC_FOR_CAPABILITY::SYS_MOUNT</a></li>
58 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_UMOUNT">MAC_FOR_CAPABILITY::SYS_UMOUNT</a></li>
59 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_REBOOT">MAC_FOR_CAPABILITY::SYS_REBOOT</a></li>
60 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_CHROOT">MAC_FOR_CAPABILITY::SYS_CHROOT</a></li>
61 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_KILL">MAC_FOR_CAPABILITY::SYS_KILL</a></li>
62 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_VHANGUP">MAC_FOR_CAPABILITY::SYS_VHANGUP</a></li>
63 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_TIME">MAC_FOR_CAPABILITY::SYS_TIME</a></li>
64 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_NICE">MAC_FOR_CAPABILITY::SYS_NICE</a></li>
65 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_SETHOSTNAME">MAC_FOR_CAPABILITY::SYS_SETHOSTNAME</a></li>
66 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_LINK">MAC_FOR_CAPABILITY::SYS_LINK</a></li>
67 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_SYMLINK">MAC_FOR_CAPABILITY::SYS_SYMLINK</a></li>
68 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_RENAME">MAC_FOR_CAPABILITY::SYS_RENAME</a></li>
69 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_UNLINK">MAC_FOR_CAPABILITY::SYS_UNLINK</a></li>
70 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_CHMOD">MAC_FOR_CAPABILITY::SYS_CHMOD</a></li>
71 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_CHOWN">MAC_FOR_CAPABILITY::SYS_CHOWN</a></li>
72 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_IOCTL">MAC_FOR_CAPABILITY::SYS_IOCTL</a></li>
73 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_KEXEC_LOAD">MAC_FOR_CAPABILITY::SYS_KEXEC_LOAD</a></li>
74 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_PIVOT_ROOT">MAC_FOR_CAPABILITY::SYS_PIVOT_ROOT</a></li>
75 <li><a href="#profile_MAC_FOR_CAPABILITY::SYS_PTRACE">MAC_FOR_CAPABILITY::SYS_PTRACE</a></li>
76 <li><a href="#profile_MAC_FOR_NETWORK">MAC_FOR_NETWORK</a></li>
77 <li><a href="#profile_MAC_FOR_SIGNAL">MAC_FOR_SIGNAL</a></li>
78 <li><a href="#profile_DENY_CONCEAL_MOUNT">DENY_CONCEAL_MOUNT</a></li>
79 <li><a href="#profile_RESTRICT_CHROOT">RESTRICT_CHROOT</a></li>
80 <li><a href="#profile_RESTRICT_MOUNT">RESTRICT_MOUNT</a></li>
81 <li><a href="#profile_RESTRICT_UNMOUNT">RESTRICT_UNMOUNT</a></li>
82 <li><a href="#profile_RESTRICT_PIVOT_ROOT">RESTRICT_PIVOT_ROOT</a></li>
83 <li><a href="#profile_RESTRICT_AUTOBIND">RESTRICT_AUTOBIND</a></li>
84 <li><a href="#profile_MAX_ACCEPT_ENTRY">MAX_ACCEPT_ENTRY</a></li>
85 <li><a href="#profile_MAX_GRANT_LOG">MAX_GRANT_LOG</a></li>
86 <li><a href="#profile_MAX_REJECT_LOG">MAX_REJECT_LOG</a></li>
87 <li><a href="#profile_TOMOYO_VERBOSE">TOMOYO_VERBOSE</a></li>
88 <li><a href="#profile_ALLOW_ENFORCE_GRACE">ALLOW_ENFORCE_GRACE</a></li>
89 <li><a href="#profile_SLEEP_PERIOD">SLEEP_PERIOD</a></li>
90 </ul>
91
92 <p><a name="system_policy">/proc/ccs/system_policy</a> <a name="system_policy.conf">/etc/ccs/system_policy.conf</a></p>
93
94 <ul>
95 <li><a href="#system_policy_allow_mount">allow_mount</a></li>
96 <li><a href="#system_policy_deny_unmount">deny_unmount</a></li>
97 <li><a href="#system_policy_allow_chroot">allow_chroot</a></li>
98 <li><a href="#system_policy_allow_pivot_root">allow_pivot_root</a></li>
99 <li><a href="#system_policy_deny_autobind">deny_autobind</a></li>
100 </ul>
101
102 <p><a name="exception_policy">/proc/ccs/exception_policy</a> <a name="exception_policy.conf">/etc/ccs/exception_policy.conf</a></p>
103
104 <ul>
105 <li><a href="#exception_policy_aggregator">aggregator</a></li>
106 <li><a href="#exception_policy_initialize_domain">initialize_domain</a></li>
107 <li><a href="#exception_policy_no_initialize_domain">no_initialize_domain</a></li>
108 <li><a href="#exception_policy_keep_domain">keep_domain</a></li>
109 <li><a href="#exception_policy_no_keep_domain">no_keep_domain</a></li>
110 <li><a href="#exception_policy_file_pattern">file_pattern</a></li>
111 <li><a href="#exception_policy_path_group">path_group</a></li>
112 <li><a href="#exception_policy_address_group">address_group</a></li>
113 <li><a href="#exception_policy_allow_read">allow_read</a></li>
114 <li><a href="#exception_policy_allow_env">allow_env</a></li>
115 <li><a href="#exception_policy_deny_rewrite">deny_rewrite</a></li>
116 <li><a href="#exception_policy_alias">alias</a></li>
117 </ul>
118
119 <p><a name="domain_policy">/proc/ccs/domain_policy</a> <a name="domain_policy.conf">/etc/ccs/domain_policy.conf</a></p>
120
121 <ul>
122 <li><a href="#domain_policy_allow_execute">allow_execute</a></li>
123 <li><a href="#domain_policy_allow_read">allow_read</a></li>
124 <li><a href="#domain_policy_allow_write">allow_write</a></li>
125 <li><a href="#domain_policy_allow_read/write">allow_read/write</a></li>
126 <li><a href="#domain_policy_allow_create">allow_create</a></li>
127 <li><a href="#domain_policy_allow_unlink">allow_unlink</a></li>
128 <li><a href="#domain_policy_allow_mkdir">allow_mkdir</a></li>
129 <li><a href="#domain_policy_allow_rmdir">allow_rmdir</a></li>
130 <li><a href="#domain_policy_allow_mkfifo">allow_mkfifo</a></li>
131 <li><a href="#domain_policy_allow_mksock">allow_mksock</a></li>
132 <li><a href="#domain_policy_allow_mkblock">allow_mkblock</a></li>
133 <li><a href="#domain_policy_allow_mkchar">allow_mkchar</a></li>
134 <li><a href="#domain_policy_allow_truncate">allow_truncate</a></li>
135 <li><a href="#domain_policy_allow_symlink">allow_symlink</a></li>
136 <li><a href="#domain_policy_allow_link">allow_link</a></li>
137 <li><a href="#domain_policy_allow_rename">allow_rename</a></li>
138 <li><a href="#domain_policy_allow_rewrite">allow_rewrite</a></li>
139 <li><a href="#domain_policy_allow_argv0">allow_argv0</a></li>
140 <li><a href="#domain_policy_allow_env">allow_env</a></li>
141 <li><a href="#domain_policy_allow_network">allow_network</a></li>
142 <li><a href="#domain_policy_allow_capability">allow_capability</a></li>
143 <li><a href="#domain_policy_allow_signal">allow_signal</a></li>
144 <li><a href="#domain_policy_use_profile">use_profile</a></li>
145 <li><a href="#domain_policy_ignore_global_allow_read">ignore_global_allow_read</a></li>
146 <li><a href="#domain_policy_ignore_global_allow_env">ignore_global_allow_env</a></li>
147 <li><a href="#domain_policy_execute_handler">execute_handler</a></li>
148 <li><a href="#domain_policy_denied_execute_handler">denied_execute_handler</a></li>
149 <li><a href="#domain_policy_quota_exceeded">quota_exceeded</a></li>
150 </ul>
151
152 <h1><a name="Introduction">2. はじめに</a></h1>
153
154 <h2><a name="word_expression_rules">2.1 単語の表記規則</a></h2>
155
156 <p>TOMOYO Linux はパス名を用いたアクセス制御を行います。パス名には英数字だけでなく空白や改行などの文字、漢字のような複数バイトで構成される文字などが含まれる可能性があります。そのため、いかなる文字でも正しく処理できるようにするために、 TOMOYO Linux に於いては以下の規則に従って単語を表記します。単語とは、パス名だけでなくコメントや環境変数の名前やプログラム実行時のパラメータなど、文字列として扱う全ての情報を指します。</p>
157
158 <ul>
159 <li>NUL 文字(0x00)は文字列の終端を示すための文字であり、 \000 という表記はできません。</li>
160 <li>\ 文字(0x5C)は8進数表記であることを示すために使用されるため、 \\ のように2個続けます。</li>
161 <li>0x01 〜 0x20 および 0x7F 〜 0xFF は \ooo という形式の8進数で表記します。</li>
162 <li>残りの 0x21 〜 0x5B および 0x5D 〜 0x7E はそのままの文字で表記します。</li>
163 </ul>
164
165 <table border="1">
166 <tr><td><table><tr><td></td><td>下位4ビット</td></tr><tr><td>上位4ビット</td><td></td></tr></table></td><td>0x0</td><td>0x1</td><td>0x2</td><td>0x3</td><td>0x4</td><td>0x5</td><td>0x6</td><td>0x7</td><td>0x8</td><td>0x9</td><td>0xA</td><td>0xB</td><td>0xC</td><td>0xD</td><td>0xE</td><td>0xF</td></tr>
167 <tr><td>0x0</td><td></td><td>\001</td><td>\002</td><td>\003</td><td>\004</td><td>\005</td><td>\006</td><td>\007</td><td>\010</td><td>\011</td><td>\012</td><td>\013</td><td>\014</td><td>\015</td><td>\016</td><td>\017</td></tr>
168 <tr><td>0x1</td><td>\020</td><td>\021</td><td>\022</td><td>\023</td><td>\024</td><td>\025</td><td>\026</td><td>\027</td><td>\030</td><td>\031</td><td>\032</td><td>\033</td><td>\034</td><td>\035</td><td>\036</td><td>\037</td></tr>
169 <tr><td>0x2</td><td>\040</td><td>!</td><td>"</td><td>#</td><td>$</td><td>%</td><td>&amp;</td><td>'</td><td>(</td><td>)</td><td>*</td><td>+</td><td>,</td><td>-</td><td>.</td><td>/</td></tr>
170 <tr><td>0x3</td><td>0</td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td><td>8</td><td>9</td><td>:</td><td>;</td><td>&lt;</td><td>=</td><td>&gt;</td><td>?</td></tr>
171 <tr><td>0x4</td><td>@</td><td>A</td><td>B</td><td>C</td><td>D</td><td>E</td><td>F</td><td>G</td><td>H</td><td>I</td><td>J</td><td>K</td><td>L</td><td>M</td><td>N</td><td>O</td></tr>
172 <tr><td>0x5</td><td>P</td><td>Q</td><td>R</td><td>S</td><td>T</td><td>U</td><td>V</td><td>W</td><td>X</td><td>Y</td><td>Z</td><td>[</td><td>\\</td><td>]</td><td>^</td><td>_</td></tr>
173 <tr><td>0x6</td><td>`</td><td>a</td><td>b</td><td>c</td><td>d</td><td>e</td><td>f</td><td>g</td><td>h</td><td>i</td><td>j</td><td>k</td><td>l</td><td>m</td><td>n</td><td>o</td></tr>
174 <tr><td>0x7</td><td>p</td><td>q</td><td>r</td><td>s</td><td>t</td><td>u</td><td>v</td><td>w</td><td>x</td><td>y</td><td>z</td><td>{</td><td>|</td><td>}</td><td>~</td><td>\177</td></tr>
175 <tr><td>0x8</td><td>\200</td><td>\201</td><td>\202</td><td>\203</td><td>\204</td><td>\205</td><td>\206</td><td>\207</td><td>\210</td><td>\211</td><td>\212</td><td>\213</td><td>\214</td><td>\215</td><td>\216</td><td>\217</td></tr>
176 <tr><td>0x9</td><td>\220</td><td>\221</td><td>\222</td><td>\223</td><td>\224</td><td>\225</td><td>\226</td><td>\227</td><td>\230</td><td>\231</td><td>\232</td><td>\233</td><td>\234</td><td>\235</td><td>\236</td><td>\237</td></tr>
177 <tr><td>0xA</td><td>\240</td><td>\241</td><td>\242</td><td>\243</td><td>\244</td><td>\245</td><td>\246</td><td>\247</td><td>\250</td><td>\251</td><td>\252</td><td>\253</td><td>\254</td><td>\255</td><td>\256</td><td>\257</td></tr>
178 <tr><td>0xB</td><td>\260</td><td>\261</td><td>\262</td><td>\263</td><td>\264</td><td>\265</td><td>\266</td><td>\267</td><td>\270</td><td>\271</td><td>\272</td><td>\273</td><td>\274</td><td>\275</td><td>\276</td><td>\277</td></tr>
179 <tr><td>0xC</td><td>\300</td><td>\301</td><td>\302</td><td>\303</td><td>\304</td><td>\305</td><td>\306</td><td>\307</td><td>\310</td><td>\311</td><td>\312</td><td>\313</td><td>\314</td><td>\315</td><td>\316</td><td>\317</td></tr>
180 <tr><td>0xD</td><td>\320</td><td>\321</td><td>\322</td><td>\323</td><td>\324</td><td>\325</td><td>\326</td><td>\327</td><td>\330</td><td>\331</td><td>\332</td><td>\333</td><td>\334</td><td>\335</td><td>\336</td><td>\337</td></tr>
181 <tr><td>0xE</td><td>\340</td><td>\341</td><td>\342</td><td>\343</td><td>\344</td><td>\345</td><td>\346</td><td>\347</td><td>\350</td><td>\351</td><td>\352</td><td>\353</td><td>\354</td><td>\355</td><td>\356</td><td>\357</td></tr>
182 <tr><td>0xF</td><td>\360</td><td>\361</td><td>\362</td><td>\363</td><td>\364</td><td>\365</td><td>\366</td><td>\367</td><td>\370</td><td>\371</td><td>\372</td><td>\373</td><td>\374</td><td>\375</td><td>\376</td><td>\377</td></tr>
183 </table>
184
185 <ul>
186 <li>単語と単語を区切るデリミタとして空白文字( 0x20 )を、行と行を区切るデリミタとして改行文字( 0x1A )を使用します。</li>
187 <li>上記の規則に従って表記された単語と、デリミタとして使われる空白文字および改行文字のみが有効です。それ以外の文字は空白文字とみなされます。連続する空白文字は自動的に1個の空白文字に圧縮されます。行頭及び行末の空白文字は自動的に削除されます。</li>
188 </ul>
189
190 <p>以下に表記例を示します。</p>
191
192 <table border="1">
193 <tr><td>単語</td><td>正しい表記</td><td>誤った表記</td></tr>
194 <tr><td>Hello world!</td><td>Hello\040world!</td><td>"Hello world!"</td></tr>
195 <tr><td>/home/user/Documents and Settings/</td><td>/home/user/Documents\040and\040Settings/</td><td>/home/user/Documents and Settings/</td></tr>
196 <tr><td>コメント (UTF-8 の場合)</td><td>\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)</td><td>コメント\040(UTF-8\040の場合)</td></tr>
197 </table>
198
199 <p>パス名は必ず / から始まります。パス名が / で終わる場合はディレクトリ、 / 以外で終わる場合にはディレクトリ以外であると解釈されます。</p>
200
201 <table border="1">
202 <tr><td>パス名</td><td>解釈</td></tr>
203 <tr><td>/</td><td>ディレクトリ</td></tr>
204 <tr><td>/tmp/</td><td>ディレクトリ </td></tr>
205 <tr><td>/tmp</td><td>ディレクトリ以外</td></tr>
206 <tr><td>tmp/</td><td>無効なパス名</td></tr>
207 </table>
208
209 <p>ただし、例外として、 /proc/プロセスID/fd/ ディレクトリに表示されるパイプのパス名は pipe: で、ソケットのパス名は socket: で始まります。</p>
210
211 <h2><a name="wildcard_expression_rules">2.2 パターンの表記規則</a></h2>
212
213 <p>パス名にはテンポラリファイルのように、毎回異なる文字が使われる場合があります。そのため、ワイルドカードを用いたパターン化を行うことが必要になります。 TOMOYO Linux に於いては以下のワイルドカードをサポートしています。</p>
214
215 <table border="1">
216 <tr><td>ワイルドカード</td><td>意味</td><td>使用例</td></tr>
217 <tr><td>\*</td><td>/ 以外の0文字以上</td><td>/var/log/samba/\*</td></tr>
218 <tr><td>\@</td><td>/ と . 以外の0文字以上</td><td>/var/www/html/\@.html</td></tr>
219 <tr><td>\?</td><td>/ 以外の1文字</td><td>/tmp/mail.\?\?\?\?\?\?</td></tr>
220 <tr><td>\$</td><td>1桁以上の10進数</td><td>/proc/\$/cmdline</td></tr>
221 <tr><td>\+</td><td>10進数1桁</td><td>/var/tmp/my_work.\+</td></tr>
222 <tr><td>\X</td><td>1桁以上の16進数</td><td>/var/tmp/my-work.\X</td></tr>
223 <tr><td>\x</td><td>16進数1桁</td><td>/tmp/my-work.\x</td></tr>
224 <tr><td>\A</td><td>1文字以上のアルファベット</td><td>/var/log/my-work/\$-\A-\$.log</td></tr>
225 <tr><td>\a</td><td>アルファベット1文字</td><td>/home/users/\a/\*/public_html/\*.html</td></tr>
226 <tr><td>\-</td><td>パス名を除外する演算子</td><td>
227 <table border="1">
228 <tr><td>使用例</td><td>意味</td></tr>
229 <tr><td>/etc/\*</td><td>/etc/ 直下の全ファイル</td></tr>
230 <tr><td>/etc/\*\-\*shadow\*</td><td>/etc/\*shadow\* 以外の /etc/\*</td></tr>
231 <tr><td>/\*\-proc\-sys/</td><td>/proc/ と /sys/ 以外の /\*/</td></tr>
232 </table>
233 </td></tr>
234 </table>
235
236 <h2><a name="word_length_rules">2.3 単語の長さに関する制約</a></h2>
237
238 <p>Linux に於いてはパス名の長さに関する上限は存在しませんが、パス名を用いたアクセス制御を行うために無限の長さをサポートすることはできません。そのため、 TOMOYO Linux に於いては、単語の長さは終端の NUL 文字を含めて4000バイトまでに制限されています。</p>
239
240 <h2><a name="line_length_rules">2.4 1行の長さに関する制約</a></h2>
241
242 <p>TOMOYO Linux に於いては、1行の長さは終端の NUL 文字を含めて8192バイトまでに制限されています。</p>
243
244 <h2><a name="memory_allocation_rules">2.5 メモリ使用量に関する制約</a></h2>
245
246 <p>TOMOYO Linux に於いては、アクセス許可や単語を記憶するために一度割り当てられたメモリは解放されません。システムを再起動する以外に、不要になったメモリを解放する手段は存在しません。</p>
247
248 <p>ただし、運用開始後にはアクセス許可の変更は生じにくいという傾向があること、および、運用開始前に適切にチューニングすることによりメモリ消費量を通常は1メガバイト以内に抑えられることから、心配する必要はありません。</p>
249
250 <p>TOMOYO Linux が現在使用中のメモリ消費量は、 /proc/ccs/meminfo から確認できます。単位はバイトです。 Shared: が単語を記憶するために使用されている量、 Private: がアクセス許可を記憶するために使用されている量で、減少することはありません。 Dynamic: がアクセス許可のチェックやアクセスログの保持などのために一時的に使用されている量で、不要になると減少します。</p>
251
252 <table border="1">
253 <tr><td><pre>
254 # cat /proc/ccs/meminfo
255 Shared: 65536
256 Private: 49152
257 Dynamic: 5106
258 Total: 119794
259 </pre></td></tr>
260 </table>
261
262 <h1><a name="Policy_Files">3. ポリシファイルに関して</a></h1>
263
264 <h2><a name="policy_file_locations">3.1 所在について</a></h2>
265
266 <p>ポリシファイルとは、アクセスの可否を定義したファイルです。システムの起動時に自動的にカーネルへと読み込まれます。</p>
267
268 <p>システムの起動時には、 /sbin/init というプログラムが実行されます。 /sbin/init の実行が要求されたときに、 /sbin/ccs-init というプログラムが存在していた場合、 /sbin/ccs-init が実行され、 /sbin/ccs-init の処理が終了してから /sbin/init の実行が開始されます。</p>
269
270 <p> /sbin/ccs-init は /etc/ccs/ ディレクトリにあるポリシファイルを /proc/ccs/ ディレクトリを通じてカーネルへと読み込みます。</p>
271
272 <table border="1">
273 <tr><td>カーネルとのインタフェース</td><td>ポリシファイル</td><td>定義されている内容</td></tr>
274 <tr><td><a href="#profile">/proc/ccs/profile</a></td><td><a href="#profile.conf">/etc/ccs/profile.conf</a></td><td>プロファイル(制御レベルを定義したもの)</td></tr>
275 <tr><td><a href="#manager">/proc/ccs/manager</a></td><td><a href="#manager.conf">/etc/ccs/manager.conf</a><td>マネージャ(ポリシの変更ができるプログラムを定義したもの)</td></tr>
276 <tr><td><a href="#system_policy">/proc/ccs/system_policy</a></td><td><a href="#system_policy.conf">/etc/ccs/system_policy.conf</a></td><td>システムポリシ(システム全体で適用される設定)</td></tr>
277 <tr><td><a href="#exception_policy">/proc/ccs/exception_policy</a></td><td><a href="#exception_policy.conf">/etc/ccs/exception_policy.conf</a></td><td>例外ポリシ(ドメインポリシの例外を定義したもの)</td></tr>
278 <tr><td><a href="#domain_policy">/proc/ccs/domain_policy</a></td><td><a href="#domain_policy.conf">/etc/ccs/domain_policy.conf</a></td><td>ドメインポリシ(ドメイン単位で適用される設定)</td></tr>
279 </table>
280
281 <p>そのほかの情報を取得するためのインタフェースもあります。対応するポリシファイルはありません。</p>
282
283 <table border="1">
284 <tr><td>カーネルとのインタフェース</td><td>内容</td></tr>
285 <tr><td><a href="#query">/proc/ccs/query</a></td><td>管理者の指示待ちとなっているアクセス要求</td></tr>
286 <tr><td><a href="#.domain_status">/proc/ccs/.domain_status</a></td><td>定義されているドメイン名とプロファイル番号</td></tr>
287 <tr><td><a href="#meminfo">/proc/ccs/meminfo</a></td><td>メモリ使用状況</td></tr>
288 <tr><td><a href="#grant_log">/proc/ccs/grant_log</a></td><td>ポリシに違反しなかったアクセス要求のログ</td></tr>
289 <tr><td><a href="#reject_log">/proc/ccs/reject_log</a></td><td>ポリシに違反したアクセス要求のログ</td></tr>
290 <tr><td><a href="#self_domain">/proc/ccs/self_domain</a></td><td>自分が属しているドメインのドメイン名</td></tr>
291 <tr><td><a href="#.process_status">/proc/ccs/.process_status</a></td><td>プロセスが属しているドメイン名とプロファイル番号</td></tr>
292 <tr><td><a href="#.updates_counter">/proc/ccs/.updates_counter</a></td><td>ポリシの変更カウンタ</td></tr>
293 <tr><td><a href="#version">/proc/ccs/version</a></td><td>TOMOYO Linux のバージョン</td></tr>
294 </table>
295
296 <h2><a name="policy_file_modifiers">3.2 変更について</a></h2>
297
298 <p>カーネルとのインタフェースである /proc/ccs/ ディレクトリを経由してポリシを変更することができるプログラム名を /proc/ccs/manager に登録します。プログラム名ではなくドメイン名で登録することもできます。</p>
299
300 <ul>
301 <li>/proc/ccs/manager に登録されているプログラム名を持つプロセス</li>
302 <li>/proc/ccs/manager に登録されているドメイン名を持つプロセス</li>
303 </ul>
304
305 <p>だけがカーネルとのインタフェースである /proc/ccs/ ディレクトリを経由してポリシを変更できます。以下に例を示します。</p>
306
307 <table border="1">
308 <tr><td>
309 # cat /proc/ccs/manager<br>
310 /usr/lib/ccs/loadpolicy<br>
311 /usr/lib/ccs/editpolicy<br>
312 /usr/lib/ccs/setlevel<br>
313 /usr/lib/ccs/setprofile<br>
314 /usr/lib/ccs/ld-watch<br>
315 /usr/lib/ccs/ccs-queryd<br>
316 &lt;kernel&gt; /sbin/mingetty /bin/login /bin/bash
317 </td></tr>
318 </table>
319
320 <p>上記の制約に加えて、デフォルトではユーザIDと実効ユーザIDの両方が0であるプロセスだけがポリシを変更できますが、 非 root ユーザによるポリシの変更を認めたい場合には /proc/ccs/manager に対して</p>
321
322 <table border="1">
323 <tr><td>
324 # echo manage_by_non_root | /usr/lib/ccs/loadpolicy -m
325 </td></tr>
326 </table>
327
328 <p>のように manage_by_non_root というキーワードを書き込むことで、ユーザIDと実効ユーザIDのチェックを無効にすることができます。また、再びユーザIDと実効ユーザIDのチェックを有効にするには、</p>
329
330 <table border="1">
331 <tr><td>
332 # echo delete manage_by_non_root | /usr/lib/ccs/loadpolicy -m
333 </td></tr>
334 </table>
335
336 <p>のように delete manage_by_non_root というキーワードを書き込んでください。 /proc/ccs/ 以下のエントリの所有者は root なので、非 root ユーザによるアクセスを認めるためには必要に応じて chown/chmod を実行してください。<br>
337 起動時に自動的にこの処理が行われるようにするために、 /sbin/ccs-init は /etc/ccs/ccs-post-init というプログラムが存在する場合には /etc/ccs/ccs-post-init も実行するようになっています。よって、例えば demo ユーザが /proc/ccs/ インタフェースへの読み書きができるように設定したい場合は、</p>
338
339 <table border="1">
340 <tr><td>
341 #! /bin/sh<br>
342 echo manage_by_non_root &gt; /proc/ccs/manager<br>
343 chown -R demo /proc/ccs/
344 </td></tr>
345 </table>
346
347 <p>という内容で /etc/ccs/ccs-post-init を作成し、</p>
348
349 <table border="1">
350 <tr><td>
351 # chmod 755 /etc/ccs/ccs-post-init<br>
352 # chown -R demo /etc/ccs/<br>
353 # chmod 755 /usr/lib/ccs/
354 </td></tr>
355 </table>
356
357 <p>を実行することで demo ユーザがポリシのあるディレクトリへのアクセスとポリシを編集するためのプログラムを実行できるようになります。</p>
358
359 <p>なお、学習モード用のプロファイルが割り当てられているプロセスは、アクセスを要求するだけで<a href="#system_policy">/proc/ccs/system_policy</a>または<a href="#domain_policy">/proc/ccs/domain_policy</a>へと自動的にアクセス許可が追加されていきます。</p>
360
361 <h1><a name="Domain_Rules">4. ドメインに関して</a></h1>
362
363 <h2><a name="domain_definition">4.1 ドメインとは</a></h2>
364
365 <p>TOMOYO Linux においては、システム全体でアクセス許可を定義するものと、ドメイン単位でアクセス許可を定義するものの2種類があります。前者はシステムポリシと呼ばれ、<a href="#system_policy">/proc/ccs/system_policy</a>を通じてアクセス許可を指定します。後者はドメインポリシと呼ばれ、<a href="#domain_policy">/proc/ccs/domain_policy</a> を通じてアクセス許可を定義します。</p>
366
367 <p>TOMOYO Linux においては、全てのプロセスがそれぞれ1つのドメインに属し、全てのプログラムがそれぞれ異なるドメインに属します。現在実行されている2つのプロセスが同一のプログラムであっても、それぞれのプロセスの直前のドメインが異なっていれば異なるドメインに属します。</p>
368
369 <p>全てのドメインはカーネルが属するドメイン「&lt;kernel&gt;」を基点として定義されます。 /sbin/init はカーネルの属するドメインから起動されるので、 /sbin/init のドメインは「&lt;kernel&gt; /sbin/init」と定義されます。 /etc/rc.d/rc はカーネルから起動された /sbin/init の属するドメインから起動されるので、 /etc/rc.d/rc のドメインは「&lt;kernel&gt; /sbin/init /etc/rc.d/rc」と定義されます。</p>
370
371 <h2><a name="domain_transition">4.2 ドメイン遷移とは</a></h2>
372
373 <p>実行時のプログラムの名前により異なる動作をするプログラムが存在します。例えば /sbin/pidof は /sbin/killall5 へのシンボリックリンクです。 TOMOYO Linux は正規化したパス名を使用するので、 /sbin/pidof を実行すると /sbin/killall5 が実行されたものとしてドメインが定義されます。</p>
374
375 <p>プロセスがプログラムを実行しようとすると、以下の処理が行われます。</p>
376
377 <table border="1">
378 <tr><td>Step</td><td>内容</td></tr>
379 <tr><td>プログラム名の取得</td><td>
380 <p>実行しようとするプログラムの「正規化されたファイル名」を取得して「パス名候補1」とします。ただし、実行しようとするプログラムがシンボリックリンクの場合は、シンボリックリンクを解決したパス名を取得します。</p>
381 <p>実行しようとするプログラムの「正規化されたファイル名」を取得して「パス名候補2」とします。ただし、実行しようとするプログラムがシンボリックリンクの場合は、シンボリックリンクを解決する前のパス名を取得します。</p>
382 </td></tr>
383 <tr><td>シンボリックリンクの識別</td><td>
384 <p>「パス名候補1」と「パス名候補2」が一致しない場合、例外ポリシから</p>
385
386 <ul>
387 <li>alias 「パス名候補1」 「パス名候補2」
388 </ul>
389
390 <p>というエントリを探します。見つかった場合は「パス名候補2」を「パス名候補1」とします。</p>
391 </td></tr>
392 <tr><td><a name="exec_stage_check_argv0">argv[0] のチェック</a></td><td>
393 <p>「パス名候補1」の最後の / 以降の部分と argv[0] の最後の / 以降の部分が異なっている場合、ドメインポリシから</p>
394
395 <ul>
396 <li>allow_argv0 「パス名候補1」 「argv[0]の最後の / 以降の部分」
397 </ul>
398
399 <p>というエントリを探します。見つからなければプログラムの実行要求は拒否されます。</p>
400 </td></tr>
401 <tr><td>類似するプログラムの集約</td><td>
402 <p>例外ポリシから</p>
403
404 <ul>
405 <li>aggregator 「パス名候補1」 「集約されたパス名」
406 </ul>
407
408 <p>というエントリを探します。見つかった場合は、「集約されたパス名」を「パス名候補1」とします。</p>
409 </td></tr>
410 <tr><td><a name="exec_stage_check_execute">権限のチェック</a></td><td>
411 <p>ドメインポリシから</p>
412
413 <ul>
414 <li>allow_execute 「パス名候補1」
415 <li>allow_execute @「パス名候補1」を含むグループ名
416 </ul>
417
418 <p>というエントリを探します。見つからなければプログラムの実行要求は拒否されます。</p>
419 </td></tr>
420 <tr><td><a name="exec_stage_check_destination">遷移先の決定</a></td><td>
421
422 <p>(1) 例外ポリシから</p>
423
424 <ul>
425 <li>no_initialize_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」
426 <li>no_initialize_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
427 <li>no_initialize_domain 「パス名候補1」
428 </ul>
429
430 <p>というエントリを探します。見つかった場合は (3) へ進みます。</p>
431
432 <p>(2) 例外ポリシから</p>
433
434 <ul>
435 <li>initialize_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」
436 <li>initialize_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
437 <li>initialize_domain 「パス名候補1」
438 </ul>
439
440 <p>というエントリを探します。見つかった場合は「カーネルが属しているドメインのドメイン名(&lt;kernel&gt;)」と「パス名候補1」とを連結して「遷移先ドメイン」として (6) へ進みます。</p>
441
442 <p>(3) 例外ポリシから</p>
443
444 <ul>
445 <li>no_keep_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」
446 <li>no_keep_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
447 <li>no_keep_domain 「現在のプロセスが属しているドメインのドメイン名」
448 <li>no_keep_domain 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
449 </ul>
450
451 <p>というエントリを探します。見つかった場合は (5) へ進みます。</p>
452
453 <p>(4) 例外ポリシから</p>
454
455 <ul>
456 <li>keep_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」
457 <li>keep_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
458 <li>keep_domain 「現在のプロセスが属しているドメインのドメイン名」
459 <li>keep_domain 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
460 </ul>
461
462 <p>というエントリを探します。見つかった場合は「現在のプロセスが属しているドメインのドメイン名」を「遷移先ドメイン」とし、 (7) へ進みます。</p>
463
464 <p>(5) 「現在のプロセスが属しているドメインのドメイン名」と「パス名候補1」とを連結して「遷移先ドメイン」とし、(6)へ進みます。</p>
465
466 <p>(6) ドメインポリシから「遷移先ドメイン」を探します。見つからなければプログラムの実行要求は拒否されます。</p>
467
468 </td></tr>
469 <tr><td>環境変数のチェック</td><td>
470
471 <p>(1)全ての環境変数名が「遷移先ドメイン」で許可されているかどうかを検査します。1つでも許可されていないものが見つかった場合は、プログラムの実行要求は拒否されます。</p>
472
473 <p>(2)通常のプログラム実行処理を行い、正常に終了した場合は「遷移先ドメイン」に遷移します。</p>
474 </td></tr>
475 </table>
476
477 <p>ただし、例外として</p>
478
479 <ul>
480 <li>上記手順の「<a href="#exec_stage_check_argv0">argv[0] のチェック</a>」「<a href="#exec_stage_check_execute">権限のチェック</a>」「<a href="#exec_stage_check_destination">遷移先の決定</a>」の何れかに於いて拒否されたが、プログラムの実行を要求したプロセスの属しているドメインに <a href="#domain_policy_denied_execute_handler">denied_execute_handler</a>キーワードが指定されている</li>
481 <li>プログラムの実行を要求したプロセスの属しているドメインに <a href="#domain_policy_execute_handler">execute_handler</a> キーワードが指定されている</li>
482 </ul>
483
484 <p>のどちらかに該当し、かつ、</p>
485
486 <ul>
487 <li>プログラムの実行を要求したプロセスが <a href="#domain_policy_execute_handler">execute_handler</a> キーワードまたは <a href="#domain_policy_denied_execute_handler">denied_execute_handler</a> キーワードにより起動されたプロセスではない</li>
488 </ul>
489
490 <p>場合には、以下の手順を実行します。この例外の使い方については「<a href="#execute_handler">プログラムの実行可否をカーネルの外部で判断</a>」と「<a href="#denied_execute_handler">許可されていないプログラムの実行が要求された場合の代替処理指定</a>」で説明します。</p>
491
492 <table border="1">
493 <tr><td>Step</td><td>内容</td></tr>
494 <tr><td>プログラム名の取得</td><td>
495 <p><a href="#domain_policy_denied_execute_handler">denied_execute_handler</a> または <a href="#domain_policy_execute_handler">execute_handler</a>で指定されているプログラムのパス名を取得し、「パス名候補1」とします。</p>
496 </td></tr>
497 <tr><td>情報の追加</td><td>
498 <p>全ての環境変数を引数の末尾に追加し、全ての環境変数を削除します。</p>
499 <p>「パス名候補1」「プログラムの実行を要求したプロセスの属しているドメインのドメイン名」「プログラムの実行を要求したプロセスのパス名」「プログラムの実行を要求したプロセスの状態」「実行が要求されたプログラムのパス名」「引数の数」「環境変数の数」を引数の先頭に挿入します。</p>
500 </td></tr>
501 <tr><td>遷移先の決定</td><td>
502
503 <p>(1) 例外ポリシから</p>
504
505 <ul>
506 <li>no_initialize_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」
507 <li>no_initialize_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
508 <li>no_initialize_domain 「パス名候補1」
509 </ul>
510
511 <p>というエントリを探します。見つかった場合は (3) へ進みます。</p>
512
513 <p>(2) 例外ポリシから</p>
514
515 <ul>
516 <li>initialize_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」
517 <li>initialize_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
518 <li>initialize_domain 「パス名候補1」
519 </ul>
520
521 <p>というエントリを探します。見つかった場合は「カーネルが属しているドメインのドメイン名(&lt;kernel&gt;)」と「パス名候補1」とを連結して「遷移先ドメイン」として (6) へ進みます。</p>
522
523 <p>(3) 例外ポリシから</p>
524
525 <ul>
526 <li>no_keep_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」
527 <li>no_keep_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
528 <li>no_keep_domain 「現在のプロセスが属しているドメインのドメイン名」
529 <li>no_keep_domain 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
530 </ul>
531
532 <p>というエントリを探します。見つかった場合は (5) へ進みます。</p>
533
534 <p>(4) 例外ポリシから</p>
535
536 <ul>
537 <li>keep_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」
538 <li>keep_domain 「パス名候補1」 from 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
539 <li>keep_domain 「現在のプロセスが属しているドメインのドメイン名」
540 <li>keep_domain 「現在のプロセスが属しているドメインのドメイン名」の最後の要素
541 </ul>
542
543 <p>というエントリを探します。見つかった場合は「現在のプロセスが属しているドメインのドメイン名」を「遷移先ドメイン」とし、 (7) へ進みます。</p>
544
545 <p>(5) 「現在のプロセスが属しているドメインのドメイン名」と「パス名候補1」とを連結して「遷移先ドメイン」とし、(6)へ進みます。</p>
546
547 <p>(6) ドメインポリシから「遷移先ドメイン」を探します。見つからなければプログラムの実行要求は拒否されます。</p>
548
549 </td></tr>
550 <tr><td>プログラムの実行</td><td>
551
552 <p>通常のプログラム実行処理を行い、正常に終了した場合は「遷移先ドメイン」に遷移します。</p>
553
554 </td></tr>
555 </table>
556
557 <h2><a name="access_logs">4.3 アクセスログについて</a></h2>
558
559 <p>ドメインポリシによって許可されたアクセス要求のログと拒否されたアクセス要求のログを生成します。前者は許可ログと呼ばれ、 /proc/ccs/grant_log から取得することができます。後者は拒否ログと呼ばれ、 /proc/ccs/reject_log から取得することができます。これらのログを取得してファイルとして保存するためのツールとして /usr/lib/ccs/ccs-auditd というプログラムが付属しています。</p>
560
561 <p>以下に例を示します。最初の例はプログラムを実行しようとしたときのログです。</p>
562
563 <table border="1">
564 <tr><td>
565 #2008-04-09 12:50:15# profile=1 mode=learning pid=5054 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 state[0]=0 state[1]=0 state[2]=0 argc=2 envc=16 argv[]={ "cat" "/etc/fstab" } envp[]={ "TERM=vt100" "SHELL=/bin/bash" "SSH_CLIENT=::ffff:192.168.99.1\04048601\04022" "SSH_TTY=/dev/pts/0" "USER=root" "MAIL=/var/mail/root" "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/lib/ccs" "PWD=/root" "LANG=C" "PS1=\\h:\\w\\$\040" "SHLVL=1" "HOME=/root" "LANGUAGE=en_JP:en_US:en_GB:en" "LOGNAME=root" "SSH_CONNECTION=::ffff:192.168.99.1\04048601\040::ffff:192.168.99.152\04022" "_=/bin/cat" }<br>
566 &lt;kernel&gt; /usr/sbin/sshd /bin/bash<br>
567 allow_execute /bin/cat
568 </td></tr>
569 </table>
570
571 <p>このログは、 &lt;kernel&gt; /usr/sbin/sshd /bin/bash というドメインに属しているプロセスが /bin/cat というプログラムを実行しようとし、そのときの引数の内容は "cat" "/etc/fstab" 、環境変数の内容は "TERM=vt100" "SHELL=/bin/bash" "SSH_CLIENT=::ffff:192.168.99.1\04048601\04022" "SSH_TTY=/dev/pts/0" "USER=root" "MAIL=/var/mail/root" "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/lib/ccs" "PWD=/root" "LANG=C" "PS1=\\h:\\w\\$\040" "SHLVL=1" "HOME=/root" "LANGUAGE=en_JP:en_US:en_GB:en" "LOGNAME=root" "SSH_CONNECTION=::ffff:192.168.99.1\04048601\040::ffff:192.168.99.152\04022" "_=/bin/cat" であったということを示しています。また、プロセスIDやユーザIDなど、プロセスに関する情報も一緒に出力されます。</p>
572
573 <p>次の例は、ファイルを読み込みモードでオープンしようとしたときのログです。</p>
574
575 <table border="1">
576 <tr><td>
577 #2008-04-09 12:50:15# profile=1 mode=learning pid=5054 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 state[0]=0 state[1]=0 state[2]=0<br>
578 &lt;kernel&gt; /usr/sbin/sshd /bin/bash /bin/cat<br>
579 allow_read /etc/fstab
580 </td></tr>
581 </table>
582
583 <p>このログは、 &lt;kernel&gt; /usr/sbin/sshd /bin/bash /bin/cat というドメインに属しているプロセスが /etc/fstab というファイルをオープンしようとしたことを示しています。</p>
584
585 <p>次の例は、ドメインが新規作成されたときのログです。</p>
586
587 <table border="1">
588 <tr><td>
589 #2008-04-09 12:52:01# profile=1 mode=learning pid=5110 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 state[0]=0 state[1]=0 state[2]=0<br>
590 &lt;kernel&gt; /usr/sbin/sshd /bin/bash /bin/bash /bin/audit-exec-param /bin/cat<br>
591 use_profile 1
592 </td></tr>
593 </table>
594
595 <p>このログは、 &lt;kernel&gt; /usr/sbin/sshd /bin/bash /bin/bash /bin/audit-exec-param /bin/cat というドメインが新規作成され、プロファイルとして 1 が割り当てられたことを示しています。 TOMOYO Linux では、ドメインが自動的に新規作成されていきます。自動的に新規作成された場合には、ドメインを新規作成することになったプロセスの属しているドメインに割り当てられていたプロファイル番号が引き継がれます。</p>
596
597 <p>次の例は、<a href="#execute_handler">プログラムの実行可否をカーネルの外部で判断</a>するために要求されたのとは異なるプログラムが実行されたときのログです。</p>
598 <table border="1">
599 <tr><td>
600 #2008-04-09 12:52:01# profile=1 mode=learning pid=5110 uid=0 gid=0 euid=0 egid=0 suid=0 sgid=0 fsuid=0 fsgid=0 state[0]=0 state[1]=0 state[2]=0 argc=24 envc=0 argv[]={ "/bin/audit-exec-param" "&lt;kernel&gt;\040/usr/sbin/sshd\040/bin/bash\040/bin/bash" "/bin/bash" "pid=5110\040uid=0\040gid=0\040euid=0\040egid=0\040suid=0\040sgid=0\040fsuid=0\040fsgid=0\040state[0]=0\040state[1]=0\040state[2]=0" "/bin/cat" "2" "18" "cat" "/etc/fstab" "SHELL=/bin/bash" "TERM=vt100" "SSH_CLIENT=::ffff:192.168.99.1\04048601\04022" "SSH_TTY=/dev/pts/0" "USER=root" "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/lib/ccs" "MAIL=/var/mail/root" "_=/bin/cat" "PWD=/root" "LANG=C" "HOME=/root" "SHLVL=2" "LANGUAGE=en_JP:en_US:en_GB:en" "LOGNAME=root" "SSH_CONNECTION=::ffff:192.168.99.1\04048601\040::ffff:192.168.99.152\04022" } envp[]={ }<br>
601 &lt;kernel&gt; /usr/sbin/sshd /bin/bash /bin/bash<br>
602 execute_handler /bin/audit-exec-param
603 </td></tr>
604 </table>
605
606 <p>このログは、 &lt;kernel&gt; /usr/sbin/sshd /bin/bash /bin/bash というドメインに属しているプロセスがプログラムを実行しようとしたが、 execute_handler が指定されていたので代わりに /bin/audit-exec-param というプログラムが実行されたこと、 /bin/audit-exec-param に渡された引数の内容は "/bin/audit-exec-param" "&lt;kernel&gt;\040/usr/sbin/sshd\040/bin/bash\040/bin/bash" "/bin/bash" "pid=5110\040uid=0\040gid=0\040euid=0\040egid=0\040suid=0\040sgid=0\040fsuid=0\040fsgid=0\040state[0]=0\040state[1]=0\040state[2]=0" "/bin/cat" "2" "18" "cat" "/etc/fstab" "SHELL=/bin/bash" "TERM=vt100" "SSH_CLIENT=::ffff:192.168.99.1\04048601\04022" "SSH_TTY=/dev/pts/0" "USER=root" "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/lib/ccs" "MAIL=/var/mail/root" "_=/bin/cat" "PWD=/root" "LANG=C" "HOME=/root" "SHLVL=2" "LANGUAGE=en_JP:en_US:en_GB:en" "LOGNAME=root" "SSH_CONNECTION=::ffff:192.168.99.1\04048601\040::ffff:192.168.99.152\04022" であったということを示しています。 LD_PRELOAD などの環境変数によって /bin/audit-exec-param の動作が左右されるのを防ぐため、環境変数を引数に移動しています。</p>
607
608 <p>このように、アクセスログは3行で1件( /usr/lib/ccs/ccs-auditd によってファイルに保存されるときに空行が入るので4行で1件)となっており、これらのログはそのままドメインポリシとして追加可能な形式になっています。アクセス拒否ログから許可したい部分を抽出して、例えば /var/log/tomoyo/diff.txt という名前で保存した後、</p>
609
610 <table border="1">
611 <tr><td>
612 # /usr/lib/ccs/loadpolicy -d &lt; /var/log/tomoyo/diff.txt
613 </td></tr>
614 </table>
615
616 <p>という操作を行うことで、ドメインポリシに追加することができます。そのため、「学習モード」を使わなくても、最初から「許容モード」を使って拒否ログを出力させ、拒否ログの内容を編集するというアプローチでもドメインポリシを定義していくことができます。「学習モード」でドメインポリシを作成する場合にはプロセスの状態(アクセスログの先頭行の内容)は加味されませんが、アクセス拒否ログからドメインポリシを生成すると、最初から<a href="#conditional_acl">条件付きアクセス許可の指定</a>を行うことができます。例えば、「学習モード」を使わずにログを生成し、</p>
617
618 <table border="1">
619 <tr><td>
620 &lt;kernel&gt; /usr/sbin/sshd /bin/bash<br>
621 allow_execute /bin/cat if exec.argc=2 exec.argv[0]="cat" exec.argv[1]="/etc/fstab"
622 </td></tr>
623 </table>
624
625 <p>としてドメインポリシを追加した場合、「学習モード」で追加される</p>
626
627 <table border="1">
628 <tr><td>
629 &lt;kernel&gt; /usr/sbin/sshd /bin/bash<br>
630 allow_execute /bin/cat
631 </td></tr>
632 </table>
633
634 <p>よりも細かい指定を行うことができるようになります。</p>
635
636 <h1><a name="Syntax_Details">5. キーワード詳細</a></h1>
637
638 <h2><a name="profile">/proc/ccs/profile</a></h2>
639
640 <p>TOMOYO Linuxでは、ファイル以外にもいくつかの項目について強制アクセス制御を行うことができますが、ポリシ管理の負担を減らすために、必要の無い機能を無効化できるようになっています。</p>
641
642 <p>有効にしたい機能とそのモードを「プロファイル番号-項目=値」という形式で定義します。プロファイル番号は 0 〜 255 が指定可能です。プロファイルの内容を変更するには setlevel コマンドまたは loadpolicy コマンドを使用します。</p>
643
644 <p>各ドメインには1個のプロファイルが割り当てられます。ドメインにプロファイルを割り当てるには setprofile コマンドまたは editpolicy コマンドまたは loadpolicy コマンドを使用します。</p>
645
646 <p>現在ドメインに割り当てられているプロファイル番号は editpolicy コマンドで確認できます。<br>
647 現在動作中のプロセスに割り当てられているプロファイル番号は ccstree コマンドで確認できます。<br>
648 現在のポリシを savepolicy コマンドで保存した場合、<a href="#domain_policy_use_profile">use_profile</a>というキーワードに保持されます。</p>
649
650 <h3><a name="profile_MAC_FOR_FILE">MAC_FOR_FILE</a></h3>
651
652 <p>ファイルに対する強制アクセス制御のレベルを指定します。</p>
653
654 <table border="1">
655 <tr><td></td><td>内容</td></tr>
656 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
657 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
658 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。
659 ポリシへの自動追加も行いません。</td></tr>
660 <tr><td>enforcing</td><td>強制モード。ポリシに違反したらエラーとします。</td></tr>
661 </table>
662
663 <h3><a name="profile_MAC_FOR_ARGV0">MAC_FOR_ARGV0</a></h3>
664
665 <p>プログラム実行時の argv[0] に対する強制アクセス制御のレベルを指定します。</p>
666
667 <table border="1">
668 <tr><td></td><td>内容</td></tr>
669 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
670 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
671 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
672 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
673 </table>
674
675 <h3><a name="profile_MAC_FOR_ENV">MAC_FOR_ENV</a></h3>
676
677 <p>プログラム実行時の環境変数名に対する強制アクセス制御のレベルを指定します。</p>
678
679 <table border="1">
680 <tr><td></td><td>内容</td></tr>
681 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
682 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
683 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
684 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
685 </table>
686
687 <h3><a name="profile_MAC_FOR_CAPABILITY::inet_tcp_create">MAC_FOR_CAPABILITY::inet_tcp_create</a></h3>
688
689 <p>TCP ソケットの使用に対する強制アクセス制御のレベルを指定します。</p>
690
691 <table border="1">
692 <tr><td></td><td>内容</td></tr>
693 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
694 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
695 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
696 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
697 </table>
698
699 <h3><a name="profile_MAC_FOR_CAPABILITY::inet_tcp_listen">MAC_FOR_CAPABILITY::inet_tcp_listen</a></h3>
700
701 <p>TCP ソケットの listenに対する強制アクセス制御のレベルを指定します。</p>
702
703 <table border="1">
704 <tr><td></td><td>内容</td></tr>
705 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
706 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
707 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
708 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
709 </table>
710
711 <h3><a name="profile_MAC_FOR_CAPABILITY::inet_tcp_connect">MAC_FOR_CAPABILITY::inet_tcp_connect</a></h3>
712
713 <p>TCP ソケットの connectに対する強制アクセス制御のレベルを指定します。</p>
714
715 <table border="1">
716 <tr><td></td><td>内容</td></tr>
717 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
718 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
719 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
720 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
721 </table>
722
723 <h3><a name="profile_MAC_FOR_CAPABILITY::use_inet_udp">MAC_FOR_CAPABILITY::use_inet_udp</a></h3>
724
725 <p>UDP ソケットの使用に対する強制アクセス制御のレベルを指定します。</p>
726
727 <table border="1">
728 <tr><td></td><td>内容</td></tr>
729 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
730 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
731 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
732 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
733 </table>
734
735 <h3><a name="profile_MAC_FOR_CAPABILITY::use_inet_ip">MAC_FOR_CAPABILITY::use_inet_ip</a></h3>
736
737 <p>RAW ソケットの使用に対する強制アクセス制御のレベルを指定します。</p>
738
739 <table border="1">
740 <tr><td></td><td>内容</td></tr>
741 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
742 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
743 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
744 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
745 </table>
746
747 <h3><a name="profile_MAC_FOR_CAPABILITY::use_route">MAC_FOR_CAPABILITY::use_route</a></h3>
748
749 <p>ROUTE ソケットの使用に対する強制アクセス制御のレベルを指定します。</p>
750
751 <table border="1">
752 <tr><td></td><td>内容</td></tr>
753 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
754 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
755 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
756 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
757 </table>
758
759 <h3><a name="profile_MAC_FOR_CAPABILITY::use_packet">MAC_FOR_CAPABILITY::use_packet</a></h3>
760
761 <p>PACKET ソケットの使用に対する強制アクセス制御のレベルを指定します。</p>
762
763 <table border="1">
764 <tr><td></td><td>内容</td></tr>
765 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
766 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
767 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
768 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
769 </table>
770
771 <h3><a name="profile_MAC_FOR_CAPABILITY::use_kernel_module">MAC_FOR_CAPABILITY::use_kernel_module</a></h3>
772
773 <p>create_module(2) init_module(2) delete_module(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
774
775 <table border="1">
776 <tr><td></td><td>内容</td></tr>
777 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
778 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
779 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
780 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
781 </table>
782
783 <h3><a name="profile_MAC_FOR_CAPABILITY::create_fifo">MAC_FOR_CAPABILITY::create_fifo</a></h3>
784
785 <p>mknod(2) で FIFO の作成に対する強制アクセス制御のレベルを指定します。</p>
786
787 <table border="1">
788 <tr><td></td><td>内容</td></tr>
789 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
790 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
791 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
792 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
793 </table>
794
795 <h3><a name="profile_MAC_FOR_CAPABILITY::create_block_dev">MAC_FOR_CAPABILITY::create_block_dev</a></h3>
796
797 <p>mknod(2) でブロック型デバイスの作成に対する強制アクセス制御のレベルを指定します。</p>
798
799 <table border="1">
800 <tr><td></td><td>内容</td></tr>
801 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
802 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
803 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
804 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
805 </table>
806
807 <h3><a name="profile_MAC_FOR_CAPABILITY::create_char_dev">MAC_FOR_CAPABILITY::create_char_dev</a></h3>
808
809 <p>mknod(2) でキャラクタ型デバイスの作成に対する強制アクセス制御のレベルを指定します。</p>
810
811 <table border="1">
812 <tr><td></td><td>内容</td></tr>
813 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
814 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
815 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
816 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
817 </table>
818
819 <h3><a name="profile_MAC_FOR_CAPABILITY::create_unix_socket">MAC_FOR_CAPABILITY::create_unix_socket</a></h3>
820
821 <p>mknod(2) で UNIX ドメインソケットの作成に対する強制アクセス制御のレベルを指定します。</p>
822
823 <table border="1">
824 <tr><td></td><td>内容</td></tr>
825 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
826 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
827 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
828 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
829 </table>
830
831 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_MOUNT">MAC_FOR_CAPABILITY::SYS_MOUNT</a></h3>
832
833 <p>mount(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
834
835 <table border="1">
836 <tr><td></td><td>内容</td></tr>
837 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
838 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
839 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
840 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
841 </table>
842
843 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_UMOUNT">MAC_FOR_CAPABILITY::SYS_UMOUNT</a></h3>
844
845 <p>umount(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
846
847 <table border="1">
848 <tr><td></td><td>内容</td></tr>
849 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
850 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
851 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
852 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
853 </table>
854
855 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_REBOOT">MAC_FOR_CAPABILITY::SYS_REBOOT</a></h3>
856
857 <p>reboot(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
858
859 <table border="1">
860 <tr><td></td><td>内容</td></tr>
861 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
862 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
863 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
864 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
865 </table>
866
867 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_CHROOT">MAC_FOR_CAPABILITY::SYS_CHROOT</a></h3>
868
869 <p>chroot(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
870
871 <table border="1">
872 <tr><td></td><td>内容</td></tr>
873 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
874 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
875 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
876 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
877 </table>
878
879 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_KILL">MAC_FOR_CAPABILITY::SYS_VHANGUP</a></h3>
880
881 <p>0 以外のシグナルで kill(2) tkill(2) tgkill(2)の使用に対する強制アクセス制御のレベルを指定します。</p>
882
883 <table border="1">
884 <tr><td></td><td>内容</td></tr>
885 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
886 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
887 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
888 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
889 </table>
890
891 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_VHANGUP">MAC_FOR_CAPABILITY::SYS_VHANGUP</a></h3>
892
893 <p>vhangup(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
894
895 <table border="1">
896 <tr><td></td><td>内容</td></tr>
897 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
898 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
899 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
900 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
901 </table>
902
903 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_TIME">MAC_FOR_CAPABILITY::SYS_TIME</a></h3>
904
905 <p>stime(2) settimeofday(2) adjtimex(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
906
907 <table border="1">
908 <tr><td></td><td>内容</td></tr>
909 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
910 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
911 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
912 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
913 </table>
914
915 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_NICE">MAC_FOR_CAPABILITY::SYS_NICE</a></h3>
916
917 <p>nice(2) setpriority(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
918
919 <table border="1">
920 <tr><td></td><td>内容</td></tr>
921 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
922 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
923 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
924 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
925 </table>
926
927 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_SETHOSTNAME">MAC_FOR_CAPABILITY::SYS_SETHOSTNAME</a></h3>
928
929 <p>sethostname(2) setdomainname(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
930
931 <table border="1">
932 <tr><td></td><td>内容</td></tr>
933 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
934 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
935 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
936 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
937 </table>
938
939 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_LINK">MAC_FOR_CAPABILITY::SYS_LINK</a></h3>
940
941 <p>link(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
942
943 <table border="1">
944 <tr><td></td><td>内容</td></tr>
945 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
946 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
947 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
948 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
949 </table>
950
951 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_SYMLINK">MAC_FOR_CAPABILITY::SYS_SYMLINK</a></h3>
952
953 <p>symlink(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
954
955 <table border="1">
956 <tr><td></td><td>内容</td></tr>
957 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
958 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
959 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
960 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
961 </table>
962
963 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_RENAME">MAC_FOR_CAPABILITY::SYS_RENAME</a></h3>
964
965 <p>symlink(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
966
967 <table border="1">
968 <tr><td></td><td>内容</td></tr>
969 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
970 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
971 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
972 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
973 </table>
974
975 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_UNLINK">MAC_FOR_CAPABILITY::SYS_UNLINK</a></h3>
976
977 <p>symlink(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
978
979 <table border="1">
980 <tr><td></td><td>内容</td></tr>
981 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
982 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
983 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
984 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
985 </table>
986
987 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_CHMOD">MAC_FOR_CAPABILITY::SYS_CHMOD</a></h3>
988
989 <p>chmod(2) fchmod(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
990
991 <table border="1">
992 <tr><td></td><td>内容</td></tr>
993 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
994 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
995 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
996 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
997 </table>
998
999 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_CHOWN">MAC_FOR_CAPABILITY::SYS_CHOWN</a></h3>
1000
1001 <p>chown(2) fchown(2) lchown(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
1002
1003 <table border="1">
1004 <tr><td></td><td>内容</td></tr>
1005 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1006 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
1007 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
1008 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
1009 </table>
1010
1011 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_IOCTL">MAC_FOR_CAPABILITY::SYS_IOCTL</a></h3>
1012
1013 <p>chown(2) fchown(2) lchown(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
1014
1015 <table border="1">
1016 <tr><td></td><td>内容</td></tr>
1017 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1018 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
1019 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
1020 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
1021 </table>
1022
1023 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_KEXEC_LOAD">MAC_FOR_CAPABILITY::SYS_KEXEC_LOAD</a></h3>
1024
1025 <p>kexec_load(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
1026
1027 <table border="1">
1028 <tr><td></td><td>内容</td></tr>
1029 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1030 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
1031 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
1032 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
1033 </table>
1034
1035 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_PIVOT_ROOT">MAC_FOR_CAPABILITY::SYS_PIVOT_ROOT</a></h3>
1036
1037 <p>pivot_root(2) の使用に対する強制アクセス制御のレベルを指定します。</p>
1038
1039 <table border="1">
1040 <tr><td></td><td>内容</td></tr>
1041 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1042 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
1043 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
1044 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
1045 </table>
1046
1047 <h3><a name="profile_MAC_FOR_CAPABILITY::SYS_PTRACE">MAC_FOR_CAPABILITY::SYS_PTRACE</a></h3>
1048
1049 <p>ptrace(2) の使用に対する強制アクセス制御のレベルを指定します。<br>
1050
1051 <table border="1">
1052 <tr><td></td><td>内容</td></tr>
1053 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1054 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
1055 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
1056 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
1057 </table>
1058
1059 <h3><a name="profile_MAC_FOR_NETWORK">MAC_FOR_NETWORK</a></h3>
1060
1061 <p>ネットワークに対する強制アクセス制御のレベルを指定します。</p>
1062
1063 <table border="1">
1064 <tr><td></td><td>内容</td></tr>
1065 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1066 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
1067 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
1068 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
1069 </table>
1070
1071 <h3><a name="profile_MAC_FOR_SIGNAL">MAC_FOR_SIGNAL</a></h3>
1072
1073 <p>シグナルの送信に対する強制アクセス制御のレベルを指定します。</p>
1074
1075 <table border="1">
1076 <tr><td></td><td>内容</td></tr>
1077 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1078 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
1079 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
1080 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
1081 </table>
1082
1083 <h3><a name="profile_DENY_CONCEAL_MOUNT">DENY_CONCEAL_MOUNT</a></h3>
1084 <p>既存のマウントを隠蔽するようなマウントを禁止します。</p>
1085
1086 <table border="1">
1087 <tr><td></td><td>内容</td></tr>
1088 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1089 <tr><td>permissive</td><td>許容モード。既存のマウントを隠蔽するようなマウント要求に対して警告メッセージを表示しますが、拒否はしません。</td></tr>
1090 <tr><td>enforcing</td><td>強制モード。既存のマウントを隠蔽するようなマウント要求に対してエラーメッセージを表示し、拒否します。</td></tr>
1091 </table>
1092
1093 <h3><a name="profile_RESTRICT_CHROOT">RESTRICT_CHROOT</a></h3>
1094
1095 <p>chroot で移動可能なディレクトリの制限を有効にします。</p>
1096
1097 <table border="1">
1098 <tr><td></td><td>内容</td></tr>
1099 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1100 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
1101 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
1102 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
1103 </table>
1104
1105 <h3><a name="profile_RESTRICT_MOUNT">RESTRICT_MOUNT</a></h3>
1106
1107 <p>mount で指定可能なパラメータの制限を有効にします。</p>
1108
1109 <table border="1">
1110 <tr><td></td><td>内容</td></tr>
1111 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1112 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
1113 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
1114 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
1115 </table>
1116
1117 <h3><a name="profile_RESTRICT_UNMOUNT">RESTRICT_UNMOUNT</a></h3>
1118
1119 <p>指定されたディレクトリのアンマウントを禁止します。</p>
1120
1121 <table border="1">
1122 <tr><td></td><td>内容</td></tr>
1123 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1124 <tr><td>permissive</td><td>許容モード。指定されたディレクトリのアンマウント要求に対して警告メッセージを表示しますが、拒否はしません。</td></tr>
1125 <tr><td>enforcing</td><td>強制モード。指定されたディレクトリのアンマウント要求に対してエラーメッセージを表示し、拒否します。</td></tr>
1126 </table>
1127
1128 <h3><a name="profile_RESTRICT_PIVOT_ROOT">RESTRICT_PIVOT_ROOT</a></h3>
1129
1130 <p>pivot_root で交換可能なディレクトリの制限を有効にします。</p>
1131
1132 <table border="1">
1133 <tr><td></td><td>内容</td></tr>
1134 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1135 <tr><td>learning</td><td>学習モード。ポリシに違反してもアクセス要求を拒否することはせず、再度同じアクセス要求が発生した場合にポリシ違反とならないようにするために、ポリシへの自動追加を行います。</td></tr>
1136 <tr><td>permissive</td><td>許容モード。ポリシに違反してもアクセス要求を拒否することはしませんが、ポリシへの自動追加も行いません。</td></tr>
1137 <tr><td>enforcing</td><td>強制モード。ポリシに違反するアクセス要求を拒否します。</td></tr>
1138 </table>
1139
1140 <h3><a name="profile_RESTRICT_AUTOBIND">RESTRICT_AUTOBIND</a></h3>
1141
1142 <p>ローカルのポート番号を自動選択させる際に特定のポート番号を選択させないようにするかどうかを指定します。</p>
1143
1144 <table border="1">
1145 <tr><td></td><td>内容</td></tr>
1146 <tr><td>disabled</td><td>無効。通常のカーネルと同様に動作します。</td></tr>
1147 <tr><td>enabled</td><td>有効。ローカルのポート番号を自動選択させる際に、特定のポート番号を選択させないようにします。</td></tr>
1148 </table>
1149
1150 <h3><a name="profile_MAX_ACCEPT_ENTRY">MAX_ACCEPT_ENTRY</a></h3>
1151
1152 <p>学習モードに於いて自動的に追加されるアクセス許可の上限を指定します。デフォルトは 2048 件です。</p>
1153
1154 <h3><a name="profile_MAX_GRANT_LOG">MAX_GRANT_LOG</a></h3>
1155
1156 <p>カーネル内に保持する、ポリシによって許可されたアクセス要求のログの件数を指定します。デフォルトは 1024 件です。</p>
1157
1158 <h3><a name="profile_MAX_REJECT_LOG">MAX_REJECT_LOG</a></h3>
1159
1160 <p>カーネル内に保持する、ポリシによって許可されなかったアクセス要求のログの件数を指定します。デフォルトは 1024 件です。</p>
1161
1162 <h3><a name="profile_TOMOYO_VERBOSE">TOMOYO_VERBOSE</a></h3>
1163
1164 <p>ドメインポリシに対する違反を syslog に表示するかどうかを指定します。</p>
1165
1166 <table border="1">
1167 <tr><td></td><td>内容</td></tr>
1168 <tr><td>disabled</td><td>ドメインポリシに対する違反を表示しない。</td></tr>
1169 <tr><td>enabled</td><td>ドメインポリシに対する違反を表示します。</td></tr>
1170 </table>
1171
1172 <h3><a name="profile_ALLOW_ENFORCE_GRACE">ALLOW_ENFORCE_GRACE</a></h3>
1173
1174 <p>強制モードに於いてポリシに違反したアクセス要求を対話的に許可できるようにするかどうかを指定します。</p>
1175
1176 <table border="1">
1177 <tr><td></td><td>内容</td></tr>
1178 <tr><td>disabled</td><td>強制モードでポリシに違反したら直ちに拒否します。</td></tr>
1179 <tr><td>enabled</td><td>強制モードでポリシに違反しても、対話的な操作により許可することを可能にします。</td></tr>
1180 </table>
1181
1182 <h3><a name="profile_SLEEP_PERIOD">SLEEP_PERIOD</a></h3>
1183
1184 <p>強制モードに於いてポリシ違反が発生した場合にスリープさせるかどうかを指定します。</p>
1185
1186 <table border="1">
1187 <tr><td></td><td>内容</td></tr>
1188 <tr><td>0 〜 3000</td><td>スリープさせる時間を 0.1 秒単位で指定します。デフォルトは 0 秒です。</td></tr>
1189 </table>
1190
1191 <h2><a name="system_policy">/proc/ccs/system_policy</a></h2>
1192
1193 <h3><a name="system_policy_allow_mount">allow_mount</a></h3>
1194 <p>マウント許可を指定するには、 allow_mount というディレクティブに続けて、「デバイスファイル マウントポイント ファイルシステム オプション」を指定します。 デバイスファイルを必要とするファイルシステムを指定する場合は、デバイスファイルは正規化されたファイル名でなければいけません。マウントポイントは正規化されたディレクトリ名でなければいけません。オプションは 16 進数の数値で指定します。</p>
1195
1196 <p>「any マウントポイント --remount オプション」と指定すると、「mount -o remount マウントポイント」が許可されます。</p>
1197
1198 <p>「複製元 複製先 --bind オプション」と指定すると、「mount --bind 複製元 複製先」が許可されます。<br>
1199 「移動元 移動先 --move オプション」と指定すると、「mount --move 移動元 移動先」が許可されます。<br>
1200 複製元/複製先/移動元/移動先は正規化されたディレクトリ名でなければなりません。</p>
1201
1202 <p>カーネル 2.6.15 以降では、 Shared Subtree という機能が利用できる。<br>
1203 「any マウントポイント --make-unbindable オプション」と指定すると、「mount --make-unbindable マウントポイント」が許可されます。<br>
1204 「any マウントポイント --make-private オプション」と指定すると、「mount --make-private マウントポイント」が許可されます。<br>
1205 「any マウントポイント --make-slave オプション」と指定すると、「mount --make-slave マウントポイント」が許可されます。<br>
1206 「any マウントポイント --make-shared オプション」と指定すると、「mount --make-shared マウントポイント」が許可されます。
1207 </p>
1208
1209 <p>(例)<br>
1210 allow_mount none /dev/pts/ devpts 0x0<br>
1211 allow_mount /proc /proc/ proc 0x0<br>
1212 allow_mount usbdevfs /proc/bus/usb/ usbdevfs 0x0<br>
1213 allow_mount none /data/ tmpfs 0xE<br>
1214 allow_mount none /dev/shm/ tmpfs 0xE<br>
1215 allow_mount /dev/hdc /var/www/ ext2 0xF<br>
1216 allow_mount any / --remount 0x0</p>
1217
1218 <h3><a name="system_policy_deny_unmount">deny_unmount</a></h3>
1219 <p>アンマウント禁止を指定するには、 deny_unmount というディレクティブに続けて、アンマウントを許可しない正規化されたディレクトリ名を指定します。<br>
1220 通常、 /sbin/mingetty が使用する /dev/tty? を含む /dev/ ディレクトリと、リモートログインする場合に pty デバイスファイルが作成される /dev/pts/ ディレクトリを指定します。</p>
1221 <p>/dev が読み込み専用になってしまったり、 /dev/pts がアンマウントされてしまうと、ログインができなくなる。そのため、 / が読み込み専用のシステムでは、 /dev/ や /dev/pts/ がアンマウントされないようにしなければなりません。</p>
1222
1223 <p>(例)<br>
1224 deny_unmount /dev/<br>
1225 deny_unmount /dev/pts/<br>
1226 deny_unmount /proc/</p>
1227
1228 <h3><a name="system_policy_allow_chroot">allow_chroot</a></h3>
1229 <p>chroot 許可を指定するには、 allow_chroot というディレクティブに続けて、 chroot で移動することを許可したい正規化されたディレクトリ名を指定します。<br>
1230 通常、 sshd が使用する /var/empty/sshd/ を指定します。 その他に chroot 環境で動かしたいアプリケーションや、 chroot を行うアプリケーション( vsftpd の場合 /usr/share/empty/ )が存在する場合は、それらも指定します。</p>
1231
1232 <p>(例)<br>
1233 allow_chroot /var/empty/sshd/<br>
1234 allow_chroot /usr/share/empty/<br>
1235 allow_chroot /var/www/html/<br>
1236 allow_chroot /</p>
1237
1238 <h3><a name="system_policy_allow_pivot_root">allow_pivot_root</a></h3>
1239 <p>pivot_root 許可を指定するには、 allow_pivot_root というディレクティブに続けて、新しいルートとなる正規化されたディレクトリ名と古いルートディレクトリとなる正規化されたディレクトリ名を指定します。<br>
1240 通常、このディレクティブを使う必要は無い。</p>
1241
1242 <h3><a name="system_policy_deny_autobind">deny_autobind</a></h3>
1243 <p>ローカルポートの自動選択で特定のポート番号が選択させるのを禁止するには、 deny_autobind というディレクティブに続けて、ローカルポート番号を指定します。 このディレクティブは、特定のポート番号が一時的な用途で割り当てられるのを防ぐのが狙いである。 例えば、一部のプロキシサーバはポート8080を使用するので、ポート8080が一時的な用途のために割り当てられるべきではない。</p>
1244
1245 <p>(例)<br>
1246 deny_autobind 1-1023<br>
1247 deny_autobind 8080</p>
1248
1249 <h2><a name="domain_policy">/proc/ccs/domain_policy</a></h2>
1250
1251 <p>このファイルでは、全てのドメインを定義し、各ドメインに対して与えるアクセス許可を定義します。</p>
1252
1253 <p>ドメインを定義している行(&lt;kernel&gt;で始まる行)の次行から次のドメインを定義している行の前行までが、そのドメインに対するアクセス許可である。</p>
1254
1255 <p>それぞれのアクセス許可について、必要に応じて追加の条件を指定することができる。そのための構文は<a href="#conditional_acl">条件付きアクセス許可の指定</a>で説明します。さらに、必要に応じてプロセスの状態を切り替え、プロセスの状態も条件として使うための方法を<a href="#stateful_acl">ステートフルなアクセス許可の指定</a>で説明します。</p>
1256
1257 <h3><a name="domain_policy_allow_execute">allow_execute</a></h3>
1258 <p>指定されたパス名を実行することを許可します。パス名にワイルドカードを使用することは認められない。ワイルドカードで指定しなければ対応できない場合には、プログラム名をグループ化してからアクセス許可を与える。</p>
1259 <p>(例)allow_execute /bin/ls</p>
1260 <p>関連項目:<a href="#domain_transition">ドメイン遷移</a> <a href="#exception_policy_path_group">path_group</a> <a href="#exception_policy_aggregator">aggregator</a></p>
1261
1262 <h3><a name="domain_policy_allow_write">allow_write</a></h3>
1263 <p>指定されたパス名を書き込みモードでオープンすることを許可します。</p>
1264 <p>(例) allow_write /dev/null</p>
1265 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1266
1267 <h3><a name="domain_policy_allow_read">allow_read</a></h3>
1268 <p>指定されたパス名を読み込みモードでオープンすることを許可します。</p>
1269 <p>(例) allow_read /proc/meminfo</p>
1270 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1271
1272 <h3><a name="domain_policy_allow_read/write">allow_read/write</a></h3>
1273 <p>指定されたパス名を読み書きモードでオープンすることを許可します。</p>
1274 <p>(例) allow_read/write /dev/null</p>
1275 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1276
1277 <h3><a name="domain_policy_allow_create">allow_create</a></h3>
1278 <p>指定されたパス名のファイルを新規作成することを許可します。</p>
1279 <p>(例) allow_create /var/lock/subsys/crond</p>
1280 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1281
1282 <h3><a name="domain_policy_allow_unlink">allow_unlink</a></h3>
1283 <p>指定されたパス名を削除することを許可します。</p>
1284 <p>(例) allow_unlink /var/lock/subsys/crond</p>
1285 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1286
1287 <h3><a name="domain_policy_allow_mkdir">allow_mkdir</a></h3>
1288 <p>パス名で指定されたディレクトリを作成することを許可します。</p>
1289 <p>(例) allow_mkdir /tmp/logwatch.\*/</p>
1290 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1291
1292 <h3><a name="domain_policy_allow_rmdir">allow_rmdir</a></h3>
1293 <p>ディレクトリの削除を許可します。</p>
1294 <p>(例) allow_rmdir /tmp/logwatch.\*/</p>
1295 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1296
1297 <h3><a name="domain_policy_allow_mkfifo">allow_mkfifo</a></h3>
1298 <p>FIFO の作成を許可します。</p>
1299 <p>(例) allow_mkfifo /dev/initctl</p>
1300 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1301
1302 <h3><a name="domain_policy_allow_mksock">allow_mksock</a></h3>
1303 <p>UNIX ドメインソケットの作成を許可します。</p>
1304 <p>(例) allow_mksock /dev/log</p>
1305 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1306
1307 <h3><a name="domain_policy_allow_mkblock">allow_mkblock</a></h3>
1308 <p>ブロック型デバイスファイルの作成を許可します。</p>
1309 <p>(例) allow_mkblock /dev/\*</p>
1310 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1311
1312 <h3><a name="domain_policy_allow_mkchar">allow_mkchar</a></h3>
1313 <p>キャラクタ型デバイスファイルの作成を許可します。</p>
1314 <p>(例) allow_mkchar /dev/\*</p>
1315 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1316
1317 <h3><a name="domain_policy_allow_truncate">allow_truncate</a></h3>
1318 <p>ファイルの切り詰めと伸長を許可します。</p>
1319 <p>(例) allow_truncate /etc/mtab</p>
1320 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1321
1322 <h3><a name="domain_policy_allow_symlink">allow_symlink</a></h3>
1323 <p>シンボリックリンクの作成を許可します。</p>
1324 <p>(例) allow_symlink /dev/cdrom</p>
1325 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1326
1327 <h3><a name="domain_policy_allow_link">allow_link</a></h3>
1328 <p>ハードリンクの作成を許可します。</p>
1329 <p>(例) allow_link /etc/mtab~\$ /etc/mtab~</p>
1330 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1331
1332 <h3><a name="domain_policy_allow_rename">allow_rename</a></h3>
1333 <p>ファイル名の変更を許可します。</p>
1334 <p>(例) allow_rename /etc/mtab.tmp /etc/mtab</p>
1335 <p>関連項目:<a href="#exception_policy_path_group">path_group</a></p>
1336
1337 <h3><a name="domain_policy_allow_rewrite">allow_rewrite</a></h3>
1338 <p><a href="#exception_policy_deny_rewrite">deny_rewrite</a>によりファイルの内容の上書きが禁止されているパス名が指すファイル内容の上書きを許可します。</p>
1339 <p>(例) allow_rewrite /var/log/messages</p>
1340 <p>関連項目:<a href="#exception_policy_path_group">path_group</a> <a href="#exception_policy_deny_rewrite">deny_rewrite</a></p>
1341
1342 <h3><a name="domain_policy_allow_argv0">allow_argv0</a></h3>
1343
1344 <p>argv[0] の組み合わせを制限するには、 allow_argv0 というディレクティブに続けて、「正規化されたファイル名」と「argv[0] の最後の / より後ろの部分」を指定します。</p>
1345
1346 <p>プログラムを実行する関数である execve() には filename と argv[] と envp[] を渡すことができる。いくつかのプログラム(例えば busybox )は argv[0] の内容によって振る舞いを変化させる。
1347 プログラムへのシンボリックリンクを経由してプログラムを実行する場合、 TOMOYO Linux のドメイン遷移は filename が指すパス名を正規化した内容に基づいて行われるのに対し、振る舞いは argv[0] (通常は filename が指すパス名と同じ内容)に基づいて行われてしまう。例えば、 /bin/ls と /bin/cat が busybox へのハードリンクとして提供されている環境において、 /tmp/cat という /bin/ls へのシンボリックリンクを作成して /tmp/cat を実行することにより、 /bin/ls のためのドメインで cat として振舞うことができてしまうという抜け穴になる。</p>
1348 <p>このディレクティブの目的は、 filename と argv[0] の内容の組み合わせを制限することでそのような抜け穴を塞ぐことである。</p>
1349
1350 <h3><a name="domain_policy_allow_env">allow_env</a></h3>
1351
1352 <p>環境変数名を制限するには、 allow_env というディレクティブに続けて、「環境変数名」を指定します。</p>
1353
1354 <p>プログラムを実行する関数である execve() には filename と argv[] と envp[] を渡すことができる。多くのプログラムは envp[] の内容によって振る舞いを変化させる。</p>
1355 <p>このディレクティブの目的は、実行されるプログラムに渡される環境変数を制限することである。</p>
1356
1357 <p>関連項目:<a href="#exception_policy_allow_env">allow_env</a></p>
1358
1359 <h3><a name="domain_policy_allow_capability">allow_capability</a></h3>
1360
1361 <p>ケイパビリティのアクセス許可を指定するには、 allow_capability というディレクティブに続けて、ケイパビリティを指定します。以下のケイパビリティが指定できます。</p>
1362
1363 <table border="1">
1364 <tr><td>allow_capability inet_tcp_create</td><td>TCP ソケットの使用を許可</td></tr>
1365 <tr><td>allow_capability inet_tcp_listen</td><td>TCP ソケットの listen を許可</td></tr>
1366 <tr><td>allow_capability inet_tcp_connect</td><td>TCP ソケットの connect を許可</td></tr>
1367 <tr><td>allow_capability use_inet_udp</td><td>UDP ソケットの使用を許可</td></tr>
1368 <tr><td>allow_capability use_inet_ip</td><td>RAW ソケットの使用を許可</td></tr>
1369 <tr><td>allow_capability use_route</td><td>ROUTE ソケットの使用を許可</td></tr>
1370 <tr><td>allow_capability use_packet</td><td>PACKET ソケットの使用を許可</td></tr>
1371 <tr><td>allow_capability use_kernel_module</td><td>create_module(2) init_module(2) delete_module(2) の使用を許可</td></tr>
1372 <tr><td>allow_capability create_fifo</td><td>mknod(2) で FIFO の作成を許可</td></tr>
1373 <tr><td>allow_capability create_block_dev</td><td>mknod(2) でブロック型デバイスの作成を許可</td></tr>
1374 <tr><td>allow_capability create_char_dev</td><td>mknod(2) でキャラクタ型デバイスの作成を許可</td></tr>
1375 <tr><td>allow_capability create_unix_socket</td><td>mknod(2) で UNIX ドメインソケットの作成を許可</td></tr>
1376 <tr><td>allow_capability SYS_MOUNT</td><td>mount(2) の使用を許可</td></tr>
1377 <tr><td>allow_capability SYS_UMOUNT</td><td>umount(2) の使用を許可</td></tr>
1378 <tr><td>allow_capability SYS_REBOOT</td><td>reboot(2) の使用を許可</td></tr>
1379 <tr><td>allow_capability SYS_CHROOT</td><td>chroot(2) の使用を許可</td></tr>
1380 <tr><td>allow_capability SYS_KILL</td><td>0 以外のシグナルで kill(2) tkill(2) tgkill(2)の使用を許可</td></tr>
1381 <tr><td>allow_capability SYS_VHANGUP</td><td>vhangup(2) の使用を許可</td></tr>
1382 <tr><td>allow_capability SYS_TIME</td><td>stime(2) settimeofday(2) adjtimex(2) の使用を許可</td></tr>
1383 <tr><td>allow_capability SYS_NICE</td><td>nice(2) setpriority(2) の使用を許可</td></tr>
1384 <tr><td>allow_capability SYS_SETHOSTNAME</td><td>sethostname(2) setdomainname(2) の使用を許可</td></tr>
1385 <tr><td>allow_capability SYS_LINK</td><td>link(2) の使用を許可</td></tr>
1386 <tr><td>allow_capability SYS_SYMLINK</td><td>symlink(2) の使用を許可</td></tr>
1387 <tr><td>allow_capability SYS_RENAME</td><td>rename(2) の使用を許可</td></tr>
1388 <tr><td>allow_capability SYS_UNLINK</td><td>unlink(2) の使用を許可</td></tr>
1389 <tr><td>allow_capability SYS_CHMOD</td><td>chmod(2) fchmod(2) の使用を許可</td></tr>
1390 <tr><td>allow_capability SYS_CHOWN</td><td>chown(2) fchown(2) lchown(2) の使用を許可</td></tr>
1391 <tr><td>allow_capability SYS_IOCTL</td><td>ioctl(2) compat_sys_ioctl(2) の使用を許可</td></tr>
1392 <tr><td>allow_capability SYS_KEXEC_LOAD</td><td>kexec_load(2) の使用を許可</td></tr>
1393 <tr><td>allow_capability SYS_PIVOT_ROOT</td><td>pivot_root(2) の使用を許可</td></tr>
1394 <tr><td>allow_capability SYS_PTRACE</td><td>ptrace(2) の使用を許可</td></tr>
1395 </table>
1396
1397 <p>allow_capability ディレクティブの目的は、プログラムが呼び出すことができるシステムコールを制限することである。幾つかのシステムコールに対しては他のディレクティブやポリシファイルを使用してより詳細な制限が可能になっている。</p>
1398 <ul>
1399 <li>作成を許可するキャラクタ型デバイスファイルのパス名を<a href="#domain_policy_allow_mkblock">allow_mkblock</a>ディレクティブを使用して制限することができる。
1400 <li>作成を許可するブロック型デバイスファイルのパス名を<a href="#domain_policy_allow_mkchar">allow_mkchar</a>ディレクティブを使用して制限することができる。
1401 <li>作成を許可する FIFO のパス名を<a href="#domain_policy_allow_mkfifo">allow_mkfifo</a>ディレクティブを使用して制限することができる。
1402 <li>作成を許可する UNIX ドメインソケットのパス名を<a href="#domain_policy_allow_mksock">allow_mksock</a>ディレクティブを使用して制限することができる。
1403 <li>作成を許可するシンボリックリンクのパス名を<a href="#domain_policy_allow_symlink">allow_symlink</a>ディレクティブを使用して制限することができる。
1404 <li>削除を許可するパス名を<a href="#domain_policy_allow_unlink">allow_unlink</a>ディレクティブを使用して制限することができる。
1405 <li>ハードリンクを許可する組み合わせを<a href="#domain_policy_allow_link">allow_link</a>ディレクティブを使用して制限することができる。
1406 <li>パス名の変更を許可する組み合わせを<a href="#domain_policy_allow_rename">allow_rename</a>ディレクティブを使用して制限することができる。
1407 <li>使用を許可する IP アドレスの範囲ととポート番号の範囲を<a href="#domain_policy_allow_network">allow_network</a>ディレクティブを使用して制限することができる。
1408 <li>送信可能なシグナルの番号と送信先のドメインを<a href="#domain_policy_allow_signal">allow_signal</a>ディレクティブを使用して制限することができる。
1409 <li>マウントを許可するデバイスおよびマウントポイントを<a href="#system_policy_allow_mount">allow_mount</a>ディレクティブを使用して制限することができる。
1410 <li>アンマウントを許可しないマウントポイントを<a href="#system_policy_deny_unmount">deny_unmount</a>ディレクティブを使用して指定することができる。
1411 <li>chroot で移動できるディレクトリを<a href="#system_policy_allow_chroot">allow_chroot</a>ディレクティブを使用して制限することができる。
1412 <li>pivot_root で交換できるディレクトリを<a href="#system_policy_allow_pivot_root">allow_pivot_root</a>ディレクティブを使用して制限することができる。
1413 </ul>
1414
1415 <h3><a name="domain_policy_allow_network">allow_network</a></h3>
1416
1417 <p>ネットワークのアクセス許可を指定するには、 allow_network というディレクティブに続けて、プロトコル(TCP UDP RAW の何れか)、 IP アドレス、ポート番号(TCP UDP の場合)またはプロトコル番号(RAW の場合)を指定します。 IPv4 プロトコルおよび IPv6 プロトコルで使用するローカルポート番号が対象である。</p>
1418 <table border="1">
1419 <tr><td>ディレクティブ</td><td>許可されるアクセス</td><td>指定例</td></tr>
1420 <tr><td>allow_network TCP bind</td><td>ローカルの TCP アドレス/ポートの割り当て</td><td>allow_network TCP bind 0.0.0.0 80</td></tr>
1421 <tr><td>allow_network TCP listen</td><td>ローカルの TCP アドレス/ポートでの待機</td><td>allow_network TCP listen 0.0.0.0 80</td></tr>
1422 <tr><td>allow_network TCP accept</td><td>リモートの TCP アドレス/ポートからの接続受付および通信</td><td>allow_network TCP accept 10.0.0.0-10.255.255.255 1024-65535</td></tr>
1423 <tr><td>allow_network TCP connect</td><td>リモートの TCP アドレス/ポートへの接続および通信</td><td>allow_network TCP connect 127.0.0.1 1024-65535</td></tr>
1424 <tr><td>allow_network UDP bind</td><td>ローカルの UDP アドレス/ポートの割り当て</td><td>allow_network UDP bind 0.0.0.0 53</td></tr>
1425
1426 <tr><td>allow_network UDP connect</td><td>リモートの UDP アドレス/ポートとの通信</td><td>allow_network UDP connect 127.0.0.1 53</td></tr>
1427 <tr><td>allow_network RAW bind</td><td>ローカルの IP アドレス/プロトコルの割り当て</td><td>allow_network RAW bind 127.0.0.1 255</td></tr>
1428 <tr><td>allow_network RAW connect</td><td>リモートの IP アドレス/プロトコルとの通信</td><td>allow_network RAW connect 10.0.0.1 1</td></tr>
1429 </table>
1430 <p>IPv6 で使われる "::" という表記はサポートされていない。 "::1" ではなく "0:0:0:0:0:0:0:1" のように表記する必要がある。</p>
1431
1432 <p>同じIPアドレスを繰り返し指定する手間を避けるために、パス名と同様にグループ化を行うことができる。</p>
1433
1434 <p>関連項目:<a href="#exception_policy_address_group">address_group</a></p>
1435
1436 <h3><a name="domain_policy_allow_signal">allow_signal</a></h3>
1437
1438 <p>シグナルのアクセス許可を指定するには、 allow_signal というディレクティブに続けて、シグナルの番号および操作対象ドメインを指定します。<br>
1439  例外が2つ存在します。シグナル番号が0の場合は常に許可されます。また、自分の属するドメインへのシグナルの場合には常に許可されます。<br>
1440  その他の場合、このファイルに指定されたシグナル番号とドメイン名で始まる場合のみそのシグナルを送信できる。<br>
1441  操作対象ドメインとして &lt;kernel&gt; を指定すると、全てのドメインに指定された番号のシグナルを送信できる。</p>
1442
1443 <h3><a name="domain_policy_use_profile">use_profile</a></h3>
1444
1445 <p>これは、このドメインに対して割り当てられているプロファイル番号を示しています。プロファイル番号は 0 〜 255 の値をとります。</p>
1446
1447 <h3><a name="domain_policy_ignore_global_allow_read">ignore_global_allow_read</a></h3>
1448
1449 <p>これは、このドメインに対しては例外ポリシで指定されている <a href="#exception_policy_allow_read">allow_read</a> を無視することを示しています。特定のドメインに対して特に読み込みモードでオープンできるファイルを制限したい場合に使います。</p>
1450
1451 <p>関連項目:<a href="#exception_policy_allow_read">allow_read</a></p>
1452
1453 <h3><a name="domain_policy_ignore_global_allow_env">ignore_global_allow_env</a></h3>
1454
1455 <p>これは、このドメインに対しては例外ポリシで指定されている <a href="#exception_policy_allow_env">allow_env</a> を無視することを示しています。特定のドメインに対して特に環境変数の受け渡しを制限したい場合に使います。</p>
1456
1457 <p>関連項目:<a href="#exception_policy_allow_env">allow_env</a></p>
1458
1459 <h3><a name="domain_policy_execute_handler">execute_handler</a></h3>
1460
1461 <p>これは、このドメインに対しては常にこのキーワードで指定されたプログラムだけを実行することを示しています。つまり、プログラムの実行時にチェックされるキーワード( <a href="#domain_policy_allow_execute">allow_execute</a><a href="#domain_policy_allow_argv0">allow_argv0</a> )の設定内容は無視されるようになります。
1462 特定のドメインで実行されるプログラムの実行要求を全て特定のプログラムを経由して起動させたい場合に使います。</p>
1463
1464 <p>このキーワードが指定されている場合、 <a href="#profile_MAC_FOR_FILE">MAC_FOR_FILE</a> の値に関わらず常にこのキーワードで指定されたプログラムが実行されます。そのため、このキーワードに適切なプログラムへのパス名が指定されていなかった場合、このキーワードが指定されているドメインからは一切のプログラムを実行できなくなります。</p>
1465
1466 <p>関連項目:<a href="#domain_policy_denied_execute_handler">denied_execute_handler</a> <a href="#profile_MAC_FOR_FILE">MAC_FOR_FILE</a> <a href="#domain_policy_allow_execute">allow_execute</a> <a href="#domain_policy_allow_argv0">allow_argv0</a></p>
1467
1468 <h3><a name="domain_policy_denied_execute_handler">denied_execute_handler</a></h3>
1469
1470 <p>これは、 <a href="#profile_MAC_FOR_FILE">MAC_FOR_FILE</a> が enforcing の状態に於いて許可されていないプログラムの実行が要求された場合には、常にこのキーワードで指定されたプログラムを実行することを示しています。このキーワードが指定されていない場合、 <a href="#profile_MAC_FOR_FILE">MAC_FOR_FILE</a> が enforcing の状態に於いて許可されていないプログラムの実行が要求された場合にはプログラムの実行を拒否します。</p>
1471
1472 <p>ただし、ドメインに対して <a href="#domain_policy_execute_handler">execute_handler</a> キーワードが指定されている場合、このキーワードは無視されます。</p>
1473
1474 <h3><a name="domain_policy_quota_exceeded">quota_exceeded</a></h3>
1475
1476 <p>これは、学習モードで動作中にアクセス許可の数が<a href="#profile_MAX_ACCEPT_ENTRY">MAX_ACCEPT_ENTRY</a>で指定された値に到達したため、このドメインに対してはアクセス許可を学習しきれなかったことを示しています。チューニングを行うなどしてアクセス許可の数を減らすようにしてください。</p>
1477
1478 <h2><a name="exception_policy">/proc/ccs/exception_policy</a></h2>
1479
1480 <h3><a name="exception_policy_file_pattern">file_pattern</a></h3>
1481
1482 <p>パス名のパターン化を指示するには、 file_pattern というディレクティブに続けて、パス名のパターンを指定します。パス名は正規化されたパス名でなければなりません。このディレクティブは実行許可を与える場合とドメイン定義には適用されない。<br>
1483 例えば、プロセスIDを含む正規化されたパス名(/proc/PID/)は、アクセス制御が正しく行われるようにグループ化されなければなりません。</p>
1484
1485 <p>学習モード(<a href="#profile_MAC_FOR_FILE">MAC_FOR_FILE</a>がlearningに設定されている状態)でパス名に対するアクセスを行うと、自動的にパターン化された状態で学習されます。学習モード以外には影響しない。この構文は、既知のパターンをテンプレート化することによって、後でチューニングを行うときの手間を軽減するためだけに使われる。</p>
1486
1487 <h3><a name="exception_policy_path_group">path_group</a></h3>
1488
1489 <p>パス名のグループを定義するには、 path_group というディレクティブに続けて、グループ名とパス名のパターンを指定します。<br>
1490  例えば、ホームディレクトリ以下の全ファイルをまとめたい場合、</p>
1491
1492 <table border="1">
1493 <tr><td>
1494 path_group HOME-DIR-FILE /home/\*/\*<br>
1495 path_group HOME-DIR-FILE /home/\*/\*/\*<br>
1496 path_group HOME-DIR-FILE /home/\*/\*/\*/\*<br>
1497 path_group HOME-DIR-FILE /home/\*/\*/\*/\*/\*<br>
1498 path_group HOME-DIR-FILE /home/\*/\*/\*/\*/\*/\*<br>
1499 path_group HOME-DIR-FILE /home/\*/\*/\*/\*/\*/\*/\*
1500 </td></tr>
1501 </table>
1502
1503 <p>のように定義しておくことで、ドメインポリシのファイルに対するアクセス許可を指定する際に</p>
1504
1505 <table border="1">
1506 <tr><td>
1507 allow_read @HOME-DIR-FILE
1508 </td></tr>
1509 </table>
1510
1511 <p>のように指定できます。</p>
1512
1513 <h3><a name="exception_policy_address_group">address_group</a></h3>
1514
1515 <p>アドレスのグループを定義するには、 address_group というディレクティブに続けて、グループ名とIPアドレスのパターンを指定します。<br>
1516  例えば、ローカルアドレスをまとめたい場合、</p>
1517
1518 <table border="1">
1519 <tr><td>
1520 address_group local-address 10.0.0.0-10.255.255.255<br>
1521 address_group local-address 172.16.0.0-172.31.255.255<br>
1522 address_group local-address 192.168.0.0-192.168.255.255
1523 </td></tr>
1524 </table>
1525
1526 <p>のように定義しておくことで、ドメインポリシのネットワークに対するアクセス許可を指定する際に</p>
1527
1528 <table border="1">
1529 <tr><td>
1530 allow_network TCP accept @local-address 1024-65535
1531 </td></tr>
1532 </table>
1533
1534 <p>のように指定できます。</p>
1535
1536 <h3><a name="exception_policy_allow_read">allow_read</a></h3>
1537
1538 <p>無条件に読み込みを許可するファイルを指定するには、 allow_read というディレクティブに続けて、正規化されたファイル名を指定します。このディレクティブの目的は、 GLIBC がプログラム実行時に参照するファイルやエラーメッセージを表示する際に参照するファイルのように、どのようなプログラムから参照されても構わないというファイルを指定することで、各ドメインで記述しないで済むようにすることです。なお、各ドメインで ignore_global_allow_read という指定をすると、ここで指定された allow_read は無視されます。</p>
1539
1540 <p>関連項目:<a href="#domain_policy_allow_read">allow_read</a> <a href="#domain_policy_ignore_global_allow_read">ignore_global_allow_read</a></p>
1541
1542 <h3><a name="exception_policy_allow_env">allow_env</a></h3>
1543
1544 <p>無条件に受け取ってよい環境変数名を指定するには、 allow_env というディレクティブに続けて、環境変数名を指定します。このディレクティブの目的は、 PATH や HOME のように、どのようなプログラムに渡されても構わないような環境変数名を指定することで、各ドメインで記述しないで済むようにすることです。くれぐれも LD_PRELOAD のような危険な環境変数を指定しないでください。なお、各ドメインで ignore_global_allow_env という指定をすると、ここで指定された allow_env は無視されます。</p>
1545
1546 <p>関連項目:<a href="#domain_policy_ignore_global_allow_env">ignore_global_allow_env</a> <a href="#domain_policy_allow_env">allow_env</a></p>
1547
1548 <h3><a name="exception_policy_deny_rewrite">deny_rewrite</a></h3>
1549
1550 <p>deny_rewrite というキーワードを使用して、既に記録されている部分の書き換えを禁止したいファイル(ログファイル等)のパス名を登録します。パターンが使用できる。 deny_rewrite というキーワードを使用して登録されたファイルは、ドメイン用ポリシの中で明示的に<a href="#domain_policy_allow_rewrite">allow_rewrite</a>というキーワードを用いて許可が与えられない限り、追記ではない書き込みモードでのオープンとファイルの切り詰めが禁止されます。</p>
1551
1552 <p>関連項目:<a href="#domain_policy_allow_rewrite">allow_rewrite</a></p>
1553
1554 <h3><a name="exception_policy_alias">alias</a></h3>
1555
1556 <p>シンボリックリンクを解決した名前ではなくシンボリックリンクの名前のまま実行させるプログラムを指定するには、 alias というディレクティブに続けてシンボリックリンクを解決したパス名とシンボリックリンクを解決する前のパス名を指定します。このディレクティブの目的は、実行時の名前によって異なる振る舞いをするプログラムが、ハードリンクではなくシンボリックリンクで参照される場合に、シンボリックリンクの名前でドメインを遷移できるようにすることである。</p>
1557 <p>例えば /sbin/pidof は /sbin/killall5 へのシンボリックリンクであるため、通常は /sbin/pidof を実行すると /sbin/killall5 が実行されたものとしてドメインが定義されます。しかし、 alias /sbin/killall5 /sbin/pidof という指定をすることで、 /sbin/pidof を実行すると /sbin/pidof が実行されたものとしてドメインが定義されるようにできる。</p>
1558
1559 <p>関連項目:<a href="#domain_policy_allow_execute">allow_execute</a></p>
1560
1561 <h3><a name="exception_policy_aggregator">aggregator</a></h3>
1562
1563 <p>複数のプログラムを単一のプログラム名で扱うには、 aggregator というディレクティブに続けて集約前のプログラム名と集約後のプログラム名を指定します。このディレクティブの目的は、同様のプログラムを集約することである。</p>
1564 <p>例えば、 /usr/bin/tac と /bin/cat は似ているので、 aggregator /usr/bin/tac /bin/cat という指定をすることで /usr/bin/tac を /bin/cat のドメインで実行することができるようになる。</p>
1565 <p>例えば、Fedora Core 3 の /usr/sbin/logrotate は /tmp/logrotate.\?\?\?\?\?\? というパターンのプログラムを作成して実行するが、 TOMOYO Linux では安全上の理由からプログラムの実行許可を与える場合とドメインを定義する場合にパターンを使用することを認めていない。しかし、 aggregator /tmp/logrotate.\?\?\?\?\?\? /tmp/logrotate.tmp という指定をすることで /tmp/logrotate.\?\?\?\?\?\? を /tmp/logrotate.tmp のドメインで実行することができるようになる。</p>
1566
1567 <p>関連項目:<a href="#domain_policy_allow_execute">allow_execute</a></p>
1568
1569 <h3><a name="exception_policy_initialize_domain">initialize_domain</a></h3>
1570
1571 <p>特定のプログラムが実行された場合にドメイン遷移を初期化させるには、 initialize_domain というディレクティブを使用します。</p>
1572
1573 <ul>
1574 <li>initialize_domain プログラム名 from ドメイン名
1575 <li>initialize_domain プログラム名 from ドメイン名の最後のプログラム名
1576 <li>initialize_domain プログラム名
1577 </ul>
1578
1579 <p> from 以降が指定されていない場合は任意のドメインから実行された場合に適用されます。ドメイン名が &lt;kernel&gt; で始まらない場合は、ドメイン名の最後のプログラム名が一致する全てのドメインに適用されます。</p>
1580
1581 <p>このディレクティブの目的は、常駐型プログラムや必要に応じてカーネルから起動されるプログラムを、通常とは異なるドメインに遷移させることで、ドメイン遷移を集約することである。</p>
1582
1583 <p>関連項目:<a href="#domain_transition">ドメイン遷移</a> <a href="#exception_policy_no_initialize_domain">no_initialize_domain</a></p>
1584
1585 <h3><a name="exception_policy_no_initialize_domain">no_initialize_domain</a></h3>
1586
1587 <p>initialize_domain の効力を打ち消すには、 no_initialize_domain というディレクティブを指定します。</p>
1588 <ul>
1589 <li>no_initialize_domain プログラム名 from ドメイン名
1590 <li>no_initialize_domain プログラム名 from ドメイン名の最後のプログラム名
1591 <li>no_initialize_domain プログラム名
1592 </ul>
1593
1594 <p>このディレクティブはドメイン遷移を初期化させたくない場合に使用します。</p>
1595
1596 <p>関連項目:<a href="#domain_transition">ドメイン遷移</a> <a href="#exception_policy_initialize_domain">initialize_domain</a></p>
1597
1598 <h3><a name="exception_policy_keep_domain">keep_domain</a></h3>
1599
1600 <p>特定のドメインからプログラムが実行されてもドメイン遷移を行わないようにするには、 keep_domain というディレクティブを使用します。</p>
1601
1602 <ul>
1603 <li>keep_domain プログラム名 from ドメイン名
1604 <li>keep_domain プログラム名 from ドメイン名の最後のプログラム名
1605 <li>keep_domain ドメイン名
1606 <li>keep_domain ドメイン名の最後のプログラム名
1607 </ul>
1608
1609 <p> from 以前が指定されていない場合は任意のプログラムが実行された場合に適用されます。ドメイン名が &lt;kernel&gt; で始まらない場合は、ドメイン名の最後のプログラム名が一致する全てのドメインに適用されます。</p>
1610
1611 <p>このディレクティブの目的は、不要なドメイン遷移の発生を抑制することでドメイン数とメモリ消費を抑えることである。</p>
1612
1613 <p>関連項目:<a href="#domain_transition">ドメイン遷移</a> <a href="#exception_policy_no_keep_domain">no_keep_domain</a></p>
1614
1615 <h3><a name="exception_policy_no_keep_domain">no_keep_domain</a></h3>
1616
1617 <p>keep_domain の効力を打ち消すには、 no_keep_domain というディレクティブを指定します。</p>
1618
1619 <ul>
1620 <li>no_keep_domain プログラム名 from ドメイン名
1621 <li>no_keep_domain プログラム名 from ドメイン名の最後のプログラム名
1622 <li>no_keep_domain ドメイン名
1623 <li>no_keep_domain ドメイン名の最後のプログラム名
1624 </ul>
1625
1626 <p>このディレクティブはドメイン遷移を行わせたい場合に使用します。</p>
1627
1628 <p>関連項目:<a href="#domain_transition">ドメイン遷移</a> <a href="#exception_policy_keep_domain">keep_domain</a></p>
1629
1630 <hr>
1631
1632 <h3><a name="profile">/proc/ccs/profile</a></h3>
1633
1634 <p>現在の制御レベルを取得または変更します。変更するためのツールとして setlevel と loadpolicy が用意されている。</p>
1635 <p>(例)<br>
1636 cat /proc/ccs/profile<br>
1637 savepolicy -p<br>
1638 setlevel 1-MAC_FOR_FILE=learning<br>
1639 echo 1-MAC_FOR_FILE=learning | loadpolicy -p</p>
1640
1641 <p>関連項目:<a href="#policy_file_modifiers">変更について</a></p>
1642
1643 <h3><a name="system_policy">/proc/ccs/system_policy</a></h3>
1644
1645 <p>現在の<a href="#system_policy">システムポリシ</a>を読み出しまたは追加または削除します。</p>
1646 <p>(例)<br>
1647 cat /proc/ccs/system_policy<br>
1648 savepolicy -s<br>
1649 echo 'allow_mount /proc /proc/ proc' | loadpolicy -s<br>
1650 echo 'delete allow_mount /proc /proc/ proc' | loadpolicy -s</p>
1651
1652 <p>関連項目:<a href="#policy_file_modifiers">変更について</a></p>
1653
1654 <h3><a name="domain_policy">/proc/ccs/domain_policy</a></h3>
1655
1656 <p>現在の<a href="#domain_policy">ドメインポリシ</a>を読み出しまたは追加または削除します。</p>
1657 <p>(例)ドメインを選択してアクセス許可を追加(ドメインが存在しない場合は作成される)<br>
1658 printf "&lt;kernel&gt; /sbin/init\nallow_read /etc/passwd\n" | loadpolicy -d</p>
1659 <p>(例)ドメインを選択してアクセス許可を追加(ドメインが存在しない場合は作成されない)<br>
1660 printf "select &lt;kernel&gt; /sbin/init\nallow_read /etc/passwd\n" | loadpolicy -d</p>
1661 <p>(例)ドメインを選択してアクセス許可を削除<br>
1662 printf "select &lt;kernel&gt; /sbin/init\ndelete allow_read /etc/passwd\ndelete allow_read /etc/shadow\n" | loadpolicy -d</p>
1663 <p>(例)特定のドメインを削除<br>
1664 printf "delete &lt;kernel&gt; /sbin/init\n" | loadpolicy -d</p>
1665 <p>(例)ドメインポリシの読み出し<br>
1666 cat /proc/ccs/domain_policy</p>
1667
1668 <h3><a name="exception_policy">/proc/ccs/exception_policy</a></h3>
1669
1670 <p>現在の<a href="#exception_policy">例外ポリシ</a>を読み出しまたは追加または削除します。</p>
1671 <p>(例)<br>
1672 echo 'file_pattern /proc/\$/status' | loadpolicy -e<br>
1673 echo 'delete file_pattern /proc/\$/status' | loadpolicy -e<br>
1674 cat /proc/ccs/exception_policy</p>
1675
1676 <h3><a name="query">/proc/ccs/query</a></h3>
1677
1678 <p>強制モードで動作中にポリシ違反が発生した場合に、そのアクセス要求を個別に許可するかどうかの指定を行うために使用します。 ALLOW_ENFORCE_GRACE=enabled に設定されているプロファイルが割り当てられているドメインに対して強制モードでポリシ違反が発生した場合、 ccs-queryd を用いて対話的に諾否を指定できます。</p>
1679
1680 <h3><a name="manager">/proc/ccs/manager</a></h3>
1681
1682 <p>ポリシの読み書きを行えるプログラムまたはドメインの一覧を取得または追加します。</p>
1683
1684 <h3><a name=".domain_status">/proc/ccs/.domain_status</a></h3>
1685
1686 <p>setprofile コマンドが行単位での処理を行いやすくするために domain_policy の内容からプロファイル番号とドメイン名の部分だけを抽出したもの。DBMSのビューに相当する機能を提供します。</p>
1687
1688 <h3><a name="meminfo">/proc/ccs/meminfo</a></h3>
1689
1690 <p>TOMOYO Linuxがポリシを保持するために使用しているカーネルのメモリ情報を取得します。</p>
1691 <p>(例)<br>
1692 cat /proc/ccs/meminfo<br></p>
1693
1694 <h3><a name="grant_log">/proc/ccs/grant_log</a></h3>
1695
1696 <p>ドメインポリシに対するアクセス許可ログを取得します。 取得すべきログが無い場合はすぐに戻ってくるので、ログが発生するまで待機させるには select(2) を使うこと。 記憶できる件数はMAX_GRANT_LOG件までです。 それ以上は記録されないので、随時読み出すようにする必要がある。</p>
1697 <p>(例)<br>
1698 cat /proc/ccs/grant_log</p>
1699
1700 <h3><a name="reject_log">/proc/ccs/reject_log</a></h3>
1701
1702 <p>ドメインポリシに対するアクセス拒否ログを取得します。 取得すべきログが無い場合はすぐに戻ってくるので、ログが発生するまで待機させるには select(2) を使うこと。 記憶できる件数はMAX_REJECT_LOG件までです。 それ以上は記録されないので、随時読み出すようにする必要がある。</p>
1703 <p>(例)<br>
1704 cat /proc/ccs/reject_log</p>
1705
1706 <h3><a name="self_domain">/proc/ccs/self_domain</a></h3>
1707
1708 <p>呼び出し元プロセスが属しているドメインの名前を取得します。</p>
1709 <p>(例)<br>
1710 cat /proc/ccs/self_domain</p>
1711
1712 <h3><a name=".process_status">/proc/ccs/.process_status</a></h3>
1713
1714 <p>ccstree コマンド(「現在動作中のプロセス」と「そのプロセスが属しているドメイン」と「そのドメインに割り当てられているプロファイル番号」を pstree のように一覧表示する)のためのインタフェース。例外的にポリシマネージャとして登録されていないプログラムでも書き込みを行える。</p>
1715
1716 <h3><a name=".updates_counter">/proc/ccs/.updates_counter</a></h3>
1717
1718 <p>ポリシの変更を検出するためのカウンタです。参照されるたびに 0 にリセットされます。ポリシの更新を監視するプログラムのためのインタフェースです。</p>
1719
1720 <h3><a name="version">/proc/ccs/version</a></h3>
1721
1722 <p>TOMOYO Linux のバージョン番号を取得するためのインタフェースです。</p>
1723 <p>(例)<br>
1724 cat /proc/ccs/version</p>
1725
1726 <h2><a name="features_for_advanced">6. 便利な機能</a></h2>
1727
1728 <h3><a name="conditional_acl">6.1 条件付きアクセス許可の指定</a></h3>
1729
1730 <p>アクセス許可にユーザID等に基づいた条件を付加することができます。条件は個々のアクセス許可の末尾に " if " 句を追加する形で指定します。</p>
1731
1732 <table border="1">
1733 <tr><td>指定例</td><td>意味</td></tr>
1734 <tr><td>allow_read /etc/passwd</td><td>/etc/passwd の参照を許可</td></tr>
1735 <tr><td>allow_read /etc/passwd if task.uid=0</td><td>プロセスのユーザIDが0の場合に限り、/etc/passwd の参照を許可</td></tr>
1736 <tr><td>allow_read /etc/passwd if task.uid!=0</td><td>プロセスのユーザIDが0ではない場合に限り、/etc/passwd の参照を許可</td></tr>
1737 <tr><td>allow_network TCP connect 10.0.0.1</td><td>TCP プロトコルで 10.0.0.1 への接続を許可</td></tr>
1738 <tr><td>allow_network TCP connect 10.0.0.1 if task.uid=100</td><td>プロセスのユーザIDが100の場合に限り、TCP プロトコルで 10.0.0.1 への接続を許可</td></tr>
1739 <tr><td>allow_capability SYS_KILL</td><td>kill(2) の使用を許可</td></tr>
1740 <tr><td>allow_capability SYS_KILL if task.ppid=1 task.uid=0 task.euid=0</td><td>プロセスが /sbin/init の子であり、かつ、プロセスのユーザIDと実効ユーザIDが0の場合に限り、kill(2) の使用を許可</td></tr>
1741 </table>
1742
1743 <p>以下の変数を指定できます。</p>
1744
1745 <table border="1">
1746 <tr><td>変数</td><td>意味</td></tr>
1747 <tr><td>task.uid</td><td>呼び出したプロセスのユーザID</td></tr>
1748 <tr><td>task.euid</td><td>呼び出したプロセスの実効ユーザID</td></tr>
1749 <tr><td>task.suid</td><td>呼び出したプロセスの保存ユーザID</td></tr>
1750 <tr><td>task.fsuid</td><td>呼び出したプロセスのファイルシステムユーザID</td></tr>
1751 <tr><td>task.gid</td><td>呼び出したプロセスのグループID</td></tr>
1752 <tr><td>task.egid</td><td>呼び出したプロセスの実効グループID</td></tr>
1753 <tr><td>task.sgid</td><td>呼び出したプロセスの保存グループID</td></tr>
1754 <tr><td>task.fsgid</td><td>呼び出したプロセスのファイルシステムグループID</td></tr>
1755 <tr><td>task.pid</td><td>呼び出したプロセスのプロセスID</td></tr>
1756 <tr><td>task.ppid</td><td>呼び出したプロセスの親プロセスのプロセスID</td></tr>
1757 <tr><td>path1.uid</td><td>許可されるパス名の所有者ID</td></tr>
1758 <tr><td>path1.gid</td><td>許可されるパス名のグループID</td></tr>
1759 <tr><td>path1.ino</td><td>許可されるパス名のiノード番号</td></tr>
1760 <tr><td>path1.parent.uid</td><td>許可されるパス名の親ディレクトリの所有者ID</td></tr>
1761 <tr><td>path1.parent.gid</td><td>許可されるパス名の親ディレクトリのグループID</td></tr>
1762 <tr><td>path1.parent.ino</td><td>許可されるパス名の親ディレクトリのiノード番号</td></tr>
1763 <tr><td>path2.parent.uid</td><td>作成されるパス名の親ディレクトリの所有者ID</td></tr>
1764 <tr><td>path2.parent.gid</td><td>作成されるパス名の親ディレクトリのグループID</td></tr>
1765 <tr><td>path2.parent.ino</td><td>作成されるパス名の親ディレクトリのiノード番号</td></tr>
1766 <tr><td>exec.argc</td><td>プログラム実行時の引数の数</td></tr>
1767 <tr><td>exec.envc</td><td>プログラム実行時の環境変数の数</td></tr>
1768 <tr><td>exec.argv[index]="value"</td><td>index ( 0 &lt;= index &lt; exec.argc)番目の引数の値が value である</td></tr>
1769 <tr><td>exec.argv[index]!="value"</td><td>index ( 0 &lt;= index &lt; exec.argc)番目の引数の値が value ではない</td></tr>
1770 <tr><td>exec.envp["name"]="value"</td><td>環境変数 name が定義されており、値が value である</td></tr>
1771 <tr><td>exec.envp["name"]!="value"</td><td>環境変数 name が定義されていないか、あるいは値が value ではない</td></tr>
1772 <tr><td>exec.envp["name"]!=NULL</td><td>環境変数 name が定義されている</td></tr>
1773 <tr><td>exec.envp["name"]=NULL</td><td>環境変数 name が定義されていない</td></tr>
1774 </table>
1775
1776 <p>path1 はパス名を必要とする操作の1個目のパス名に対応し、 path2 はパス名を必要とする操作の2個目のパス名に対応します。
1777 例えば、「allow_rename ファイル1 ファイル2」というアクセス許可の場合、 path1 がファイル1に、 path2 がファイル2に対応します。</p>
1778
1779 <p>path1.uid および path1.gid は存在しないパス名に対しては指定できない。つまり、ファイル等の作成時(allow_create 等)には使用できません。</p>
1780
1781 <p>path1.parent.uid および path1.parent.gid は常に指定可能です。</p>
1782
1783 <p>path2.parent.uid および path2.parent.gid はパス名を2つ必要とする操作(つまり allow_link および allow_rename )に限り指定できます。</p>
1784
1785 <p>path2.uid および path2.gid はサポートしていません。( rename 操作に於いて、 path2 が存在する場合には暗黙のうちに unlink または rmdir が実行されます。)</p>
1786
1787 <p>sysctl による読み書き( /proc/sys/ ディレクトリ以下のファイルを open ではなく sysctl を用いてアクセス)を行う場合については、 path1 path2 ともにサポートしていません。</p>
1788
1789 <p>exec はプログラム実行時(つまり<a href="#domain_policy_allow_execute">allow_execute</a>)に限り指定できます。</p>
1790
1791 <h3><a name="stateful_acl">6.2 ステートフルなアクセス許可の指定</a></h3>
1792
1793 <p>TOMOYO Linux はユーザランドアプリケーションの修正を行わないため、プログラムの実行を伴わずにアクセス可能な資源の範囲を変更することはできません。しかし、例えば接続元クライアントのIPアドレスによってアクセスの可否を切り替えたいという場合があります。そのような場合に対応するため、プロセス毎に状態変数を割り当てることができ、条件付きアクセス許可の指定で使えるようになっています。</p>
1794
1795 <table border="1">
1796 <tr><td>変数</td><td>意味</td></tr>
1797 <tr><td>task.state[0]</td><td>呼び出したプロセスの状態変数0</td></tr>
1798 <tr><td>task.state[1]</td><td>呼び出したプロセスの状態変数1</td></tr>
1799 <tr><td>task.state[2]</td><td>呼び出したプロセスの状態変数2</td></tr>
1800 </table>
1801
1802 <p>task.state[0] 〜 task.state[2] は 0 〜 255 までの値を指定できます。この値を設定するには、以下のようにアクセス許可の指定に続けて " ; set " という句を指定します。</p>
1803
1804 <table border="1">
1805 <tr><td>使用例</td><td>意味</td></tr>
1806 <tr><td>allow_network TCP accept @TRUSTED_HOSTS 1024-65535 ; set task.state[0]=1</td><td>クライアントが @TRUSTED_HOSTS である場合には、 state[0] に 1 を設定します。</td></tr>
1807 <tr><td>allow_network TCP accept @UNTRUSTED_HOSTS 1024-65535 ; set task.state[0]=0</td><td>クライアントが @UNTRUSTED_HOSTS である場合には、 state[0] に 0 を設定します。</td></tr>
1808 <tr><td>allow_execute /bin/bash if task.state[0]=1</td><td>state[0] が 1 の場合は、 /bin/bash の実行を許可します。</td></tr>
1809 <tr><td>allow_execute /sbin/nologin if task.state[0]=0</td><td>state[0] が 0 の場合は、 /sbin/nologin の実行を許可します。</td></tr>
1810 <tr><td>allow_execute /etc/passwd if task.state[2]=0 ; set task.state[2]=1</td><td>state[2] が 0 の場合は /etc/passwd の読み込みモードでのオープンを許可し、その後 state[2] に 1 を設定します。</td></tr>
1811 </table>
1812
1813 <p>状態変数を使用する際には、以下の点に注意してください。</p>
1814
1815 <ul>
1816 <li>プロセスのドメインはプログラムの実行によって自動的に変更されるのに対して、プロセスの状態変数は明示的に" ; set " という句で指定されない限り変更されない。そのため、状態変数の戻し忘れに注意。</li>
1817 <li>状態変数の設定はポリシのチェックにより許可された時点で行われる。そのため、メモリ不足などポリシのチェック以降のエラーによって、状態変数が変更されたけれどもアクセス要求は処理されなかったという状況が発生しうる。</li>
1818 <li>上記の @TRUSTED_HOSTS と @UNTRUSTED_HOSTS の両方に含まれていた場合、先に一致したほうの状態変数が使われてしまう。そのため、順番に依存するアクセス許可を定義しないように注意。</li>
1819 </ul>
1820
1821 <h3><a name="sleep_penalty">6.3 ポリシ違反時のペナルティ指定</a></h3>
1822
1823 <p>強制モードでポリシ違反が発生した場合に、ポリシ違反の原因となったプロセスを一定時間スリープ状態にさせることができます。</p>
1824
1825 <table border="1">
1826 <tr><td>/proc/ccs/profile での指定例</td><td>意味</td></tr>
1827 <tr><td>3-SLEEP_PERIOD=1</td><td>プロファイル 3 が割り当てられているプロセスが強制モードに於いてポリシ違反を発生させた場合、0.1秒間スリープさせる。</td></tr>
1828 <tr><td>4-SLEEP_PERIOD=10</td><td>プロファイル 4 が割り当てられているプロセスが強制モードに於いてポリシ違反を発生させた場合、1秒間スリープさせる。</td></tr>
1829 </table>
1830
1831 <p>この機能は、無限ループの中でポリシ違反が発生した場合に、CPU使用率が100%になってしまうのを回避するための安全装置です。通常は0.1秒間スリープさせるだけで充分です。</p>
1832
1833 <p>この機能は、許可されていないホストからの TCP 接続要求や UDP パケットを攻撃者が故意に送りつけることでポリシ違反を発生させることでサービスを長時間スリープ状態にさせることにより、許可されているホストからの TCP 接続要求や UDP パケットの処理を大幅に遅延させるという攻撃が成立してしまうのを回避するために、ネットワークの受信系の操作に対しては機能しないようになっています。</p>
1834
1835 <h3><a name="execute_handler">6.4 プログラムの実行可否をカーネルの外部で判断</a></h3>
1836
1837 <p>TOMOYO Linuxでは、原則としてポリシに従ってプログラムの実行可否を制御します。プログラム実行時のパラメータをチェックしたい場合には、<a href="#conditional_acl">条件付きアクセス許可の指定</a>で説明したようにexec.argvやexec.envpを使ってチェックを行うことができます。しかし、<a href="#conditional_acl">条件付きアクセス許可の指定</a>では、単純なパターンマッチしかサポートされておらず、また、どのようなプログラムの実行を許可するかを予め指定しておく必要があります。</p>
1838
1839 <p>そこで、TOMOYO Linux 1.6.0では<a href="#domain_policy_execute_handler">execute_handler</a>という仕組みが導入されました。この仕組みは、プログラムの実行可否をカーネルが判断するのではなく、<a href="#domain_policy_execute_handler">execute_handler</a>により指定されたプログラムが判断し、プログラムの実行を許可すべきと判断した場合には実際にプログラムを実行するという動作をします。</p>
1840
1841 <p>Linuxに於いては、プログラムを実行するという動作は、プログラムの実行を要求したプロセスを上書きするという動作であり、プログラムの実行に成功した場合にはプログラムの実行を要求したプロセスに制御が戻ることはありません。つまり、要求されたプログラムの実行に失敗した場合にしか、プログラムの実行を要求したプロセスに対して、要求されたプログラムが実行されなかったことが通知されません。<br>
1842 例えば、プログラムAとして動作しているプロセスがプログラムBの実行を要求する場合を考えてみます。<br>
1843 プログラムAとして動作しているプロセスがプログラムBの実行を要求すると、カーネルが「プログラムAとして動作しているプロセスからプログラムBを実行することは適切であるかどうか」をポリシを照合することで判断し、適切であると判断された場合には「プログラムAとして動作しているプロセスをプログラムBで上書き」し、適切では無いと判断された場合には「プログラムAとして動作しているプロセスにプログラムBの実行が認められていないことを通知」します。</p>
1844
1845 <p><a href="#domain_policy_execute_handler">execute_handler</a>を指定した場合、
1846 execute_handlerとして指定されたプログラムCがこの動作に介在します。<br>
1847 プログラムAとして動作しているプロセスがプログラムBの実行を要求すると、プログラムCに「プログラムAとして動作しているプロセスからプログラムBを実行することは適切であるかどうか」を判断してもらうために「プログラムAとして動作しているプロセスをプログラムCで上書き」します。プログラムCとして動作するようになったプロセスが「プログラムAとして動作していたプロセスからプログラムBを実行することは適切であるかどうか」を判断し、適切であると判断した場合には「プログラムCとして動作しているプロセスをプログラムBで上書き」し、適切では無いと判断された場合には「プログラムCとして動作しているプロセスをプログラムBで上書きせずに終了」します。</p>
1848
1849 <p>このように、プログラムBの実行を要求したプログラムAとして動作していたプロセスがに対して、プログラムBの実行に失敗したことを通知する手段を放棄することになるため、プログラムBの実行を要求したプログラムAとして動作していたプロセスが、プログラムBが実行されなかったという通知を受けることができなくなるという副作用が発生します。<br>
1850 しかし、たとえ<a href="#domain_policy_execute_handler">execute_handler</a>を指定していない場合であっても、「共有ライブラリの読み込みができなかった」「 KILL シグナルを受信した」「メモリ不足になり OOM killer によって強制終了させられた」など、様々な要因によって「実行には成功したが期待された動作を始める前に終了してしまった」という状況が起こりえます。つまり、「プログラムの実行が失敗しなかった」ということと「要求されたプログラムが期待した動作を始めた」ということの間には、不確定要素が存在します。<br>
1851 そう考えると、「プログラムの実行に失敗したという通知が無い限りプログラムは期待された動作を始める」という保証は最初から存在しないわけなので、<a href="#domain_policy_execute_handler">execute_handler</a>により指定されたプログラムCが、プログラムBの実行に失敗したことをプログラムBの実行を要求したプログラムAとして動作していたプロセスに通知できなかったという結果になったとしても、容認できる範囲であると言えると思います。</p>
1852
1853
1854 <p>TOMOYO Linux は、どのプログラムからどのプログラムを実行する必要があるかを事前に把握して、必要最小限のプログラムの実行のみを認めるというアプローチを採用しています。そのため、正常な動作をしている限り、ポリシで許可されていないプログラムの実行要求は起こらないはずだと仮定すると、全てのプログラムの実行要求をとりあえず受理して構わないと考えることができます。もしも受理すべきではないプログラムの実行要求が発生した場合、<a href="#domain_policy_denied_execute_handler">denied_execute_handler</a>の機能を使うことで要求を拒否する代わりにそのプロセスを強制終了させるなどの行動を起こすことができます。つまり、カーネルの内部でプログラムの実行可否の判断を行わなくても構わないということです。</p>
1855
1856 <p>そこで、ドメインに対して <a href="#domain_policy_execute_handler">execute_handler</a>キーワードを指定しておくことで、そのドメインから発生する全てのプログラムの実行可否の判断をカーネル外部のプログラムに委ねることができるようになります。</p>
1857 <p>カーネルの内部では利用可能なライブラリが少ない上に連続したメモリ領域の割り当てが失敗する可能性が高くなりますが、
1858 カーネルの外部であれば豊富なライブラリを使ってメモリ割り当ての限界を心配せずに詳細なチェックが可能になります。そこで、<a href="#domain_policy_execute_handler">execute_handler</a>で指定したプログラムにプログラム実行時のパラメータをチェックしてもらい、適切であればプログラムを実行してもらうようにすることができます。</p>
1859
1860 <p>この方式の副作用は、プログラムの実行を拒否すべきと判断した場合に、プログラムの実行を要求したプロセスに通知する方法が無い点です。しかし、自由にカスタマイズできるので、 ssh 等を用いて遠隔地のマシンに問い合わせをしながらしながら判断することも可能です。</p>
1861
1862 <p>この機能を使うには、以下のように指定します。</p>
1863
1864 <table border="1">
1865 <tr><td>/proc/ccs/domain_policy の例</td><td>意味</td></tr>
1866 <tr><td>execute_handler /usr/sbin/check-and-exec</td><td>このドメインに属しているプロセスがプログラムの実行を要求した場合、要求されたプログラムを実行する代わりに/usr/sbin/check-and-execを実行します。/usr/sbin/check-and-execはパラメータをチェックし、妥当と判断した場合には要求されたプログラムを実行します。</td></tr>
1867 </table>
1868
1869 <p>execute_handlerで指定されたプログラムは、以下のパラメータを受け取ります。<a href="#access_logs">アクセスログについて</a>で説明した、 allow_execute のログと比較してみてください。</p>
1870
1871 <ul>
1872 <li>argv[0] には、execute_handlerで指定されたプログラムのパス名が入っています。</li>
1873 <li>argv[1] には、プログラムの実行を要求したプロセスのドメイン名が入っています。</li>
1874 <li>argv[2] には、プログラムの実行を要求したプロセスのパス名が入っています。</li>
1875 <li>argv[3] には、プログラムの実行を要求したプロセスの情報が入っています。</li>
1876 <li>argv[4] には、実行が要求されたプログラムのパス名が入っています。</li>
1877 <li>argv[5] には、プログラム実行要求時の引数の数が入っています。</li>
1878 <li>argv[6] には、プログラム実行要求時の環境変数の数が入っています。</li>
1879 <li>argv[7] から argv[6 + argc] には、呼び出し元プロセスが渡した argv[] の内容が入っています。</li>
1880 <li>argv[7 + argc] から argv [6 + argc + envc] には、呼び出し元プロセスが渡した envp[] の内容が入っています。</li>
1881 <li>環境変数 envp[] は全てクリアされます。</li>
1882 <li>標準入出力などは呼び出し元プロセスのものを引き継ぎます。</li>
1883 </ul>
1884
1885 <p>この機能を使用する際には、以下の点に注意してください。</p>
1886
1887 <ul>
1888 <li>execute_handlerで指定されたプログラムに対して実行許可(<a href="#domain_policy_allow_execute">allow_execute</a>)を与える必要はありませんし、与えるべきではありません。</li>
1889 <li>プロセスがchroot内部の環境で動作している場合、execute_handlerで指定されたプログラムが見つからないために実行されない場合があります。これは、プロセスがchroot内部の環境で動作している場合に、chroot外部の環境にあるプログラムを実行できてしまうと危険なので、execute_handlerで指定されたプログラムは、プロセスの名前空間のルートディレクトリではなく、プロセスのルートディレクトリから検索するようになっているためです。</li>
1890 <li>execute_handlerで指定されたプログラムが動作するためのドメインが存在しない場合、実行されません。そのため、例えば&lt;kernel&gt;直下にexecute_handlerで指定されたプログラム用のドメインを作成して、そのプログラムを<a href="#exception_policy_initialize_domain">initialize_domain</a>キーワードで指定するなどの準備をしてください。</li>
1891 <li>execute_handlerで指定されたプログラムは環境変数の影響を受けるのを避けるため、全ての環境変数の内容をクリアした状態で起動されます。そのため、環境変数 PATH 等が設定されていないので、外部コマンドを呼び出す場合には注意してください。また、execute_handlerで指定されたプログラムが動作するドメインにも強制モード用のプロファイルを割り当てておくことを推奨します。</li>
1892 </ul>
1893
1894 <p>ccs-tools のソースパッケージには、 audit-exec-param.c というサンプルプログラムが入っています。ご自由に改造してお使いください。</p>
1895 <p>この機能は、機構を提供しているだけです。この機構を活用できるかどうかはあなた次第です。</p>
1896
1897 <h3><a name="denied_execute_handler">6.5 許可されていないプログラムの実行が要求された場合の代替処理指定</a></h3>
1898
1899 <p>TOMOYO Linux では、どのプログラムからどのプログラムを実行する必要があるかを事前に把握して、必要最小限のプログラムの実行のみを認めるというアプローチを採用しています。そのため、不要なプログラムの実行を拒否するという振る舞いだけでなく、それ以外の振る舞いを行うこともできます。</p>
1900
1901 <p>強制モードに於いて allow_execute 構文により許可されていないプログラムの実行が要求された場合、デフォルトではプログラムの実行を拒否します。しかし、あるプログラムからどのプログラムの実行を許可する必要があるかを把握済みであるという前提があれば、プロセスが正常な動作をしている限りに於いて許可されていないプログラムの実行が要求されることは無いので、許可されていないプログラムの実行が要求されたということはプロセスが正常な動作をしていない(つまり、プロセスにとっては制御を失った状態である)とみなすことができます。</p>
1902
1903 <p>攻撃者はバッファオーバーフローなどのセキュリティホールを攻撃することでプロセスの制御を奪い、シェルなどのコマンドの実行を要求してきます。もし、そのプロセスからシェルの実行を許可する必要が無い(すなわち allow_execute /bin/bash のようなアクセス許可を与える必要が無い)のであれば、シェルの実行が要求された時点で既にプロセスにとっては制御を失っていると考えることができます。</p>
1904
1905 <p>通常、許可されていないプログラムの実行が要求された場合は、その要求を拒否するだけです。しかし、制御を失っているプロセスから要求されたプログラムの実行要求を拒否したところで、そのプロセスの制御が取り戻される(つまり、正常な動作をするようになる)とは考えられません。しかし、プログラムを実行するということは、現在動作中のプロセスを新しいプログラムに置き換えることで、制御を新しいプログラムに譲渡することを意味します。つまり、あるプロセスがバッファオーバーフローなどにより制御を失っていたとしても、プログラムを実行することにより、そのプロセスの制御が取り戻されるわけです。</p>
1906
1907 <p>攻撃者の手によって制御を失ったプロセスからプログラムが実行された後の制御は、どのプログラムが実行されたかによって決まります。シェルが実行された場合には、シェルはユーザが要求したとおりに処理を実行してしまうため、プログラムの実行を要求したプロセスの所有者である攻撃者の手に委ねられてしまうわけです。しかし、何もせずに終了するようなプログラム(例えば /bin/true )が実行された場合には、プロセスの制御が攻撃者の手に委ねられてしまうことはありません。</p>
1908
1909 <p>このように、攻撃者の手によって本来許可する必要の無いプログラムの実行が要求されるという出来事は、見方を変えると、攻撃者自身が制御を取り戻すためのチャンスを与えてくれていると考えることができます。そこで、 TOMOYO Linux では、許可されていないプログラムの実行が要求された場合、その要求を拒否する代わりに他のプログラムを実行するための機構を提供しています。この機構を用いて何をするかはシステム管理者の自由です。</p>
1910
1911 <p>例えば、シェルの実行要求を /bin/true の実行要求に差し替えてしまうことで、そのプロセスを直ちに強制終了させることができます。</p>
1912
1913 <p>例えば、シェルの実行要求をハニーポットクライアントプログラムの実行要求に差し替えてしまうことで、攻撃者がどのようなリクエストを行うかを観察することができます。</p>
1914
1915 <p>例えば、そのログインセッションを強制終了させることができます。</p>
1916
1917 <p>例えば、要求されたコマンドがどのパッケージに含まれているかを教えてくれる Ubuntu の command-not-found パッケージのように、「You are not permitted to execute this program.」のような警告を表示することができます。</p>
1918
1919 <p>例えば、攻撃者の接続元IPアドレスを割り出して、ファイアウォールの設定を変更することができます。</p>
1920
1921 <p>この機能を使うには、以下のように指定します。</p>
1922
1923 <table border="1">
1924 <tr><td>/proc/ccs/profile の例</td><td>/proc/ccs/domain_policy の例</td><td>意味</td></tr>
1925 <tr><td>3-MAC_FOR_FILE=enforcing</td><td>use_profile 3<br>denied_execute_handler /bin/true</td><td>プロファイル 3 が割り当てられているドメインに属しているプロセスが、許可されていないプログラムの実行を要求した場合、代わりに /bin/true を実行します。</td></tr>
1926 </table>
1927
1928 <p>この機能を使用する際の注意事項は<a name="denied_execute_handler">許可されていないプログラムの実行が要求された場合の代替処理指定</a>と同じです。</p>
1929
1930 <hr>
1931 <p><a href="index.html#manual">目次へ戻る</a></p>
1932 <hr>
1933 <p><a href="http://sourceforge.jp/"><img src="http://sourceforge.jp/sflogo.php?group_id=1973" width="96" height="31" alt="SourceForge.jp"></a></p>
1934 </body>
1935 </html>

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26