]> granicus.if.org Git - apache/blob - docs/manual/suexec.xml.ja
Help doc writer to spot places where:
[apache] / docs / manual / suexec.xml.ja
1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.ja.xsl"?>
4 <!-- English Revision: 655869:1673945 (outdated) -->
5
6 <!--
7  Licensed to the Apache Software Foundation (ASF) under one or more
8  contributor license agreements.  See the NOTICE file distributed with
9  this work for additional information regarding copyright ownership.
10  The ASF licenses this file to You under the Apache License, Version 2.0
11  (the "License"); you may not use this file except in compliance with
12  the License.  You may obtain a copy of the License at
13
14      http://www.apache.org/licenses/LICENSE-2.0
15
16  Unless required by applicable law or agreed to in writing, software
17  distributed under the License is distributed on an "AS IS" BASIS,
18  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
19  See the License for the specific language governing permissions and
20  limitations under the License.
21 -->
22
23 <manualpage metafile="suexec.xml.meta">
24
25   <title>suEXEC サポート</title>
26
27   <summary>
28     <p><strong>suEXEC</strong>
29     機能により、Apache ユーザは Web サーバを実行しているユーザ ID とは
30     異なるユーザ ID で <strong>CGI</strong> プログラムや <strong>SSI</strong> 
31     プログラムを実行することができます。CGI プログラムまたは SSI
32     プログラムを実行する場合、通常は web サーバと同じユーザで実行されます。
33     </p>
34
35     <p>適切に使用すると、この機能によりユーザが個別の CGI
36     や SSI プログラムを開発し実行することで生じるセキュリティ上の危険を、
37     かなり減らすことができます。しかし、suEXEC の設定が不適切だと、
38     多くの問題が生じ、あなたのコンピュータに新しいセキュリティホールを
39     作ってしまう可能性があります。あなたが <em>setuid root</em>
40     されたプログラムと、それらから生じるセキュリティ上の問題の管理に
41     詳しくないようなら、suEXEC の使用を検討しないように強く推奨します。
42     </p>
43   </summary>
44
45   <section id="before"><title>始める前に</title>
46
47     <p>この文書の先頭に飛ぶ前に、Apache
48     グループとこの文書での仮定を知っておくべきでしょう。
49     </p>
50
51     <p>第 1 に、あなたが <strong>setuid</strong> と
52     <strong>setgid</strong> 操作が可能な UNIX
53     由来のオペレーティングシステムを使っていることを想定しています。
54     これは、すべてのコマンド例にあてはまります。
55     その他のプラットホームでは、もし suEXEC
56     がサポートされていたとしても設定は異なるかもしれません。</p>
57
58     <p>第 2 に、あなたが使用中のコンピュータの
59     セキュリティに関する基本的な概念と、それらの管理について詳しいことを
60     想定しています。これは、<strong>setuid/setgid</strong>
61     操作、あなたのシステム上でのその操作による様々な効果、
62     セキュリティレベルについてあなたが理解しているということを含みます。
63     </p>
64
65     <p>第 3 に、<strong>改造されていない</strong> suEXEC
66     コードの使用を想定しています。suEXEC のコードは、
67     多くのベータテスタだけでなく、開発者によっても注意深く精査され
68     テストされています。それらの注意により、簡潔で信頼できる安全な
69     コードの基盤が保証されます。このコードを改変することで、
70     予期されない問題や新しいセキュリティ上の危険が生じることがあります。
71     セキュリティプログラミングの詳細に通じていて、
72     今後の検討のために成果を Apache
73     グループと共有しようと思うのでなければ、suEXEC
74     コードは変えないことを <strong>強く</strong>推奨します。</p>
75
76     <p>第 4 に、これが最後ですが、suEXEC を Apache
77     のデフォルトインストールには<strong>含めない</strong>ことが
78     Apache グループで決定されています。これは、suEXEC
79     の設定には管理者の詳細にわたる慎重な注意が必要だからです。
80     suEXEC の様々な設定について検討が終われば、管理者は suEXEC
81     を通常のインストール方法でインストールすることができます。
82     これらの設定値は、suEXEC
83     機能の使用中にシステムセキュリティを適切に保つために、
84     管理者によって慎重に決定され指定されることが必要です。
85     この詳細な手順により、Apache グループは、suEXEC
86     のインストールについて、注意深く十分に検討してそれを使用することを
87     決定した場合に限っていただきたいと考えています。
88     </p>
89
90     <p>それでも進みますか? よろしい。では、先へ進みましょう!</p>
91   </section>
92
93   <section id="model"><title>suEXEC セキュリティモデル</title>
94
95     <p>suEXEC の設定とインストールを始める前に、
96     まず実装しようとしているセキュリティモデルについて論じておきます。
97     それには、suEXEC の内部で行なわれていること、
98     システムのセキュリティを保証するために警告されることを
99     よく理解しておいた方がよいでしょう。</p>
100
101     <p><strong>suEXEC</strong> は、Apache web
102     サーバから呼び出される setuid された "wrapper"
103     プログラムが基本となっています。設計した CGI、または SSI
104     プログラムへの HTTP リクエストがあると、この wrapper
105     が呼び出されます。このようなリクエストがあると、Apache
106     はそのプログラムが実行される際のプログラム名とユーザ ID とグループ
107     ID を指定して suEXEC wrapper を実行します。
108     </p>
109
110     <p>それから、wrapper は成功または失敗を決定するため
111     以下の処理を行ないます。これらの状態のうち一つでも失敗した場合、
112     プログラムは失敗をログに記録してエラーで終了します。
113     そうでなければ、後の処理が続けられます。</p>
114
115     <ol>
116       <li>
117         <strong>wrapper
118         を実行しているユーザはこのシステムの正当なユーザか?</strong>
119
120         <p class="indent">
121           これは、wrapper を実行しているユーザが
122           本当にシステムの利用者であることを保証するためです。
123         </p>
124       </li>
125
126
127      <li>
128         <strong>wrapper が適切な数の引数で呼び出されたか?</strong>
129
130
131         <p class="indent">
132           wrapper は適切な数の引数が与えられた場合にのみ実行されます。
133           適切な引数のフォーマットは Apache Web サーバに解釈されます。
134           適切な数の引数を受け取らなければ、攻撃をされたか
135           あなたの Apache バイナリの suEXEC の部分が
136           どこかおかしい可能性があります。
137         </p>
138       </li>
139
140       <li>
141         <strong>この正当なユーザは wrapper
142         の実行を許可されているか?</strong>
143
144         <p class="indent">
145           このユーザは wrapper 実行を許可されたユーザですか?
146           ただ一人のユーザ (Apache ユーザ) だけが、
147           このプログラムの実行を許可されます。
148         </p>
149       </li>
150
151       <li>
152         <strong>対象の CGI, SSI プログラムが安全でない階層の参照をしているか?
153         </strong>
154
155         <p class="indent">
156           対象の CGI, SSI プログラムが '/' から始まる、または
157           '..' による参照を行なっていますか? これらは許可されません。
158           対象のプログラムは suEXEC のドキュメントルート
159           (下記の <code>--with-suexec-docroot=<em>DIR</em></code> を参照)
160           内に存在しなければなりません。
161         </p>
162       </li>
163
164       <li>
165         <strong>対象となるユーザ名は正当なものか?</strong>
166
167         <p class="indent">
168           対象となるユーザ名は存在していますか?
169         </p>
170       </li>
171
172       <li>
173         <strong>対象となるグループ名は正当なものか?</strong>
174
175         <p class="indent">
176           対象となるグループ名は存在していますか?
177         </p>
178       </li>
179
180       <li>
181         <strong>目的のユーザはスーパーユーザでは<em>ない</em>か?
182         </strong>
183
184         <p class="indent">
185           今のところ、suEXEC は <code><em>root</em></code> による CGI/SSI
186           プログラムの実行を許可していません。
187         </p>
188       </li>
189
190       <li>
191         <strong>対象となるユーザ ID は、最小の ID
192         番号よりも<em>大きい</em>か?  </strong>
193
194         <p class="indent">
195           最小ユーザ ID 番号は設定時に指定されます。これは、
196           CGI/SSI プログラム実行を許可されるユーザ ID
197           のとりうる最小値です。これは
198           "system" 用のアカウントを閉め出すのに有効です。
199         </p>
200       </li>
201
202       <li>
203         <strong>対象となるグループはスーパーユーザのグループでは
204         <em>ない</em>か?</strong>
205
206         <p class="indent">
207          今のところ、suEXEC は 'root' グループによる CGI/SSI
208          プログラムの実行を許可していません。
209         </p>
210       </li>
211
212       <li>
213         <strong>対象となるグループ ID は最小の ID
214           番号よりも<em>大きい</em>か?</strong>
215
216         <p class="indent">
217           最小グループ ID 番号は設定時に指定されます。これは、
218           CGI/SSI プログラム実行を許可されるグループ
219           ID のとりうる最小値です。
220           これは "system" 用のグループを閉め出すのに有効です。
221         </p>
222       </li>
223
224       <li>
225         <strong>wrapper が正常に対象となるユーザとグループになれるか?
226         </strong>
227
228         <p class="indent">
229           ここで、setuid と setgid
230           の起動によりプログラムは対象となるユーザとグループになります。
231           グループアクセスリストは、
232           ユーザが属しているすべてのグループで初期化されます。
233         </p>
234       </li>
235
236       <li>
237         <strong>CGI/SSI プログラムが置かれているディレクトリに移動
238         (change directory) できるか?</strong>
239
240         <p class="indent">
241           ディレクトリが存在しないなら、そのファイルも存在しないかもしれません。
242           ディレクトリに移動できないのであれば、おそらく存在もしないでしょう。
243         </p>
244       </li>
245
246       <li>
247         <strong>ディレクトリが Apache のドキュメントツリー内にあるか?
248         </strong>
249
250         <p class="indent">
251           リクエストがサーバ内のものであれば、
252           要求されたディレクトリが suEXEC のドキュメントルート配下にありますか?
253           リクエストが UserDir のものであれば、要求されたディレクトリが suEXEC 
254           のユーザのドキュメントルート配下にありますか?
255           (<a href="#install">suEXEC 設定オプション</a> 参照)
256         </p>
257       </li>
258
259       <li>
260         <strong>ディレクトリを他のユーザが書き込めるようになって
261         <em>いない</em>か?</strong>
262
263         <p class="indent">
264           ディレクトリを他ユーザに開放しないようにします。
265           所有ユーザだけがこのディレクトリの内容を改変できるようにします。
266         </p>
267       </li>
268
269
270       <li>
271         <strong>対象となる CGI/SSI プログラムは存在するか?</strong>
272
273         <p class="indent">
274           存在しなければ実行できません。
275         </p>
276       </li>
277
278       <li>
279         <strong>対象となる CGI/SSI プログラムファイルが他アカウントから
280         書き込めるようになって<em>いない</em>か?</strong>
281
282         <p class="indent">
283           所有者以外には CGI/SSI プログラムを変更する権限は与えられません。
284         </p>
285       </li>
286
287
288       <li>
289         <strong>対象となる CGI/SSI プログラムが setuid または setgid 
290         されて<em>いない</em>か?</strong>
291
292         <p class="indent">
293           UID/GID を再度変更してのプログラム実行はしません
294         </p>
295       </li>
296
297
298       <li>
299         <strong>対象となるユーザ/グループがプログラムの
300         ユーザ/グループと同じか?</strong>
301
302         <p class="indent">
303           ユーザがそのファイルの所有者ですか?
304         </p>
305       </li>
306
307       <li>
308         <strong>安全な動作を保証するための環境変数クリアが可能か?
309         </strong>
310
311         <p class="indent">
312           suEXEC は、安全な環境変数のリスト
313           (これらは設定時に作成されます) 内の変数として渡される安全な
314           PATH 変数 (設定時に指定されます) を設定することで、
315           プロセスの環境変数をクリアします。
316         </p>
317       </li>
318
319
320       <li>
321         <strong>対象となる CGI/SSI プログラムを exec して実行できるか?</strong>
322
323
324         <p class="indent">
325           ここで suEXEC が終了し、対象となるプログラムが開始されます。
326         </p>
327       </li>
328     </ol>
329
330     <p>ここまでが suEXEC の wrapper
331     におけるセキュリティモデルの標準的な動作です。もう少し厳重に
332     CGI/SSI 設計についての新しい制限や規定を取り入れることもできますが、
333     suEXEC はセキュリティに注意して慎重に少しずつ開発されてきました。
334     </p>
335
336     <p>このセキュリティモデルを用いて
337     サーバ設定時にどのように許すことを制限するか、また、suEXEC
338     を適切に設定するとどのようなセキュリティ上の危険を避けられるかに
339     関するより詳しい情報については、<a href="#jabberwock">"とかげに注意"
340     (Beware the Jabberwock)</a> の章を参照してください。
341     </p>
342   </section>
343
344   <section id="install"><title>suEXEC
345     の設定とインストール</title>
346
347     <p>ここから楽しくなります。</p>
348
349     <p><strong>suEXEC
350     設定オプション</strong><br />
351     </p>
352
353     <dl>
354       <dt><code>--enable-suexec</code></dt>
355
356       <dd>このオプションは、デフォルトではインストールされず、
357       有効にはならない suEXEC 機能を有効にします。
358       suEXEC を使うように APACI に要求するには、<code>--enable-suexec</code>
359       オプションにあわせて少なくとも一つは <code>--with-suexec-xxxxx</code>
360       オプションが指定されなければなりません。</dd>
361
362       <dt><code>--with-suexec-bin=<em>PATH</em></code></dt>
363
364       <dd>セキュリティ上の理由により、<code>suexec</code> バイナリのパスはサーバに
365       ハードコードされている必要があります。デフォルトのパスを
366       変えたいときはこのオプションを使ってください。<em>例えば</em>、
367       <code>--with-suexec-bin=/usr/sbin/suexec</code> のように。</dd>
368
369       <dt><code>--with-suexec-caller=<em>UID</em></code></dt>
370
371       <dd>Apache を通常動作させる<a
372       href="mod/mpm_common.html#user">ユーザ名</a>を指定します。
373       このユーザだけが suexec の実行を許可されたユーザになります。</dd>
374
375       <dt><code>--with-suexec-userdir=<em>DIR</em></code></dt>
376
377       <dd>suEXEC がアクセスを許されるユーザホームディレクトリ配下の
378       サブディレクトリを指定します。
379       このディレクトリ以下の全実行ファイルは、"安全な"プログラムになるよう、
380       suEXEC がそのユーザとして実行できるようにします。
381       "単純な" UserDir ディレクティブを使っている場合 
382       (すなわち "*" を含まないもの)、これと同じ値を設定すべきです。
383       Userdir ディレクティブがそのユーザのパスワードファイル内の
384       ホームディレクトリと同じ場所を指していなければ、
385       suEXEC は適切に動作しません。デフォルトは "public_html" です。
386       <br />
387       各 UserDir が異なった仮想ホストを設定している場合、
388       それらを全て一つの親ディレクトリに含めて、
389       その親ディレクトリの名前をここで指定する必要があります。
390       <strong>このように指定されなければ "~userdir" cgi
391       へのリクエストが動作しません。</strong></dd>
392
393       <dt><code>--with-suexec-docroot=<em>DIR</em></code></dt>
394
395       <dd>Apache のドキュメントルートを設定します。これが suEXEC
396       の動作で使用する唯一のディレクトリ階層になります (UserDir
397       の指定は別)。デフォルトでは <code>--datedir</code> に "/htdocs"
398       というサフィックスをつけたものです。
399       "<code>--datadir=/home/apache</code>" として設定すると、
400       suEXEC wrapper にとって "/home/apache/htdocs"
401       がドキュメントルートとして使われます。</dd>
402
403       <dt><code>--with-suexec-uidmin=<em>UID</em></code></dt>
404
405       <dd>suEXEC の対象ユーザとして許される UID の最小値を指定します。
406       大抵のシステムでは 500 か 100 が一般的です。
407       デフォルト値は 100 です。</dd>
408
409       <dt><code>--with-suexec-gidmin=<em>GID</em></code></dt>
410
411       <dd>suEXEC の対象グループとして許される GID
412       の最小値を指定します。大抵のシステムでは 100 が一般的なので、
413       デフォルト値としても 100 が使われています。</dd>
414
415       <dt><code>--with-suexec-logfile=<em>FILE</em></code></dt>
416
417       <dd>suEXEC の処理とエラーが記録されるファイル名を指定します。
418       (監査やデバッグ目的に有用)
419       デフォルトではログファイルは "suexec_log" という名前で、
420       標準のログファイルディレクトリ (<code>--logfiledir</code>) に置かれます。
421       </dd>
422
423       <dt><code>--with-suexec-safepath=<em>PATH</em></code></dt>
424
425       <dd>CGI 実行ファイルに渡される安全な PATH 環境変数です。
426       デフォルト値は "/usr/local/bin:/usr/bin:/bin" です。
427       </dd>
428     </dl>
429
430     <p><strong>suEXEC wrapper
431     のコンパイルとインストール</strong><br />
432     <code>--enable-suexec</code> オプションで suEXEC 機能を有効にすると、
433     "make" コマンドを実行した時に <code>suexec</code> のバイナリ (Apache 自体も)
434     が自動的に作成されます。
435     <br />
436     すべての構成要素が作成されると、それらのインストールには
437     <code>make install</code> コマンドが実行できます。バイナリイメージの <code>suexec</code>
438     は <code>--sbindir</code> オプションで指定されたディレクトリにインストールされます。
439     デフォルトの場所は "/usr/local/apache/bin/suexec" です。<br />
440     インストール時には <strong><em>root</em></strong>
441     権限が必要なので注意してください。wrapper がユーザ ID
442     を設定するために、所有者 <code><em>root</em></code>
443     でのセットユーザ ID
444     ビットをそのファイルのモードに設定しなければなりません。
445     </p>
446
447     <p><strong>安全なパーミッションを設定する</strong><br />
448     suEXEC ラッパーは、<code>--with-suexec-caller</code> <program>configure</program> 
449     オプションで指定した正しいユーザで起動されていることを確認しますが、
450     システム上でこのチェックが行なわれる前に、
451     suEXEC が呼ぶシステムやライブラリが脆弱である可能性は残ります。対抗策として、
452     一般に良い習慣ともされいますが、
453     ファイルシステムパーミッションを使って
454     Apache の実行時のグループのみが suEXEC を実行できるように
455     するのが良いでしょう。</p>
456
457     <p>たとえば、次のようにサーバが設定されていたとします。</p>
458
459 <example>
460     User www<br />
461     Group webgroup<br />
462 </example>
463
464     <p><program>suexec</program> が "/usr/local/apache2/bin/suexec" 
465     にインストールされていた場合、次のように設定する必要があります。</p>
466
467 <example>
468     chgrp webgroup /usr/local/apache2/bin/suexec<br />
469     chmod 4750 /usr/local/apache2/bin/suexec<br />
470 </example>
471
472     <p>これで Apache が実行されるグループのみが 
473     suEXEC ラッパーを実行できるということを
474     確証します。</p>
475   </section>
476
477   <section id="enable"><title>suEXEC
478     の有効化と無効化</title>
479
480     <p>起動時に、Apache は <code>--sbindir</code>
481     オプションで設定されたディレクトリで
482     <code>suexec</code> を探します
483     (デフォルトは "/usr/local/apache/sbin/suexec") 。
484     適切に設定された suEXEC がみつかると、
485     エラーログに以下のメッセージが出力されます。</p>
486
487 <example>
488     [notice] suEXEC mechanism enabled (wrapper: <var>/path/to/suexec</var>)
489 </example>
490
491     <p>サーバ起動時にこのメッセージが出ない場合、
492     大抵はサーバが想定した場所で wrapper プログラムが見つからなかったか、
493     <em>setuid root</em> としてインストールされていないかです。</p>
494
495     <p>suEXEC の仕組みを使用するのが初めてで、Apache が既に動作中であれば、
496     Apache を kill して、再起動しなければなりません。HUP シグナルや
497     USR1 シグナルによる単純な再起動では不十分です。</p>
498     <p>suEXEC を無効にする場合は、<code>suexec</code> ファイルを削除してから
499     Apache を kill して再起動します。
500     </p>
501   </section>
502
503   <section id="usage"><title>suEXEC の使用</title>
504
505     <p>CGI プログラムへのリクエストが suEXEC ラッパーを呼ぶのは、
506     <directive module="mod_suexec">SuexecUserGroup</directive> ディレクティブを
507     含むバーチャルホストへのリクエストか、<module>mod_userdir</module> により
508     処理されたリクエストの場合に限ります。</p>
509
510     <p><strong>仮想ホスト:</strong><br />
511     suEXEC wrapper の使い方として、
512     <directive module="core">VirtualHost</directive> 設定での
513     <directive module="mod_suexec">SuexecUserGroup</directive>
514     ディレクティブを通したものがあります。
515     このディレクティブをメインサーバのユーザ ID
516     と異なるものにすると、CGI リソースへのすべてのリクエストは、その
517     <directive module="core"
518     type="section">VirtualHost</directive> で指定された <em>User</em> と
519     <em>Group</em> として実行されます。<directive module="core"
520     type="section">VirtualHost</directive>
521     でこのディレクティブが指定されていない場合、
522     メインサーバのユーザ ID が想定されます。</p>
523
524     <p><strong>ユーザディレクトリ:</strong><br />
525     <module>mod_userdir</module> により処理されたリクエストは
526     リクエストされたユーザディレクトリのユーザ ID で CGI プログラムを
527     実行するために suEXEC ラッパーを呼びます。
528     この機能を動作させるために必要なことは、CGI
529     をそのユーザで実行できること、そのスクリプトが上記の<a
530     href="#model">セキュリティ検査</a>をパスできることです。
531     <a href="#install">コンパイル
532      時のオプション</a> <code>--with-suexec-userdir</code> も参照してください。</p>
533   </section>
534
535   <section id="debug"><title>suEXEC のデバッグ</title>
536
537     <p>suEXEC wrapper は、上記で述べた <code>--with-suexec-logfile</code>
538     オプションで指定されたファイルにログ情報を記録します。
539     wrapper を適切に設定、インストールできていると思う場合、
540     どこで迷っているか見ようとするならこのログとサーバの
541     エラーログを見るとよいでしょう。</p>
542   </section>
543
544   <section id="jabberwock"><title>とかげに注意: 警告と事例</title>
545
546     <p><strong>注意!</strong>
547     この章は完全ではありません。この章の最新改訂版については、
548     Apache グループの<a href="http://httpd.apache.org/docs/&httpd.docs;/suexec.html">
549     オンラインドキュメント</a>版を参照してください。
550     </p>
551
552     <p>サーバの設定に制限をもうける wrapper について、
553     いくつか興味深い点があります。suEXEC に関する "バグ"
554     を報告する前にこれらを確認してください。</p>
555
556     <ul>
557       <li><strong>suEXEC の興味深い点</strong></li>
558
559       <li>階層構造の制限
560
561
562         <p class="indent">
563           セキュリティと効率の理由から、<code>suEXEC</code> の全てのリクエストは
564           仮想ホストへのリクエストにおける最上位のドキュメントルート内か、
565           ユーザディレクトリへのリクエストにおける個々のユーザの最上位の
566           ドキュメントルート内に残らなければなりません。
567           例えば、四つの仮想ホストを設定している場合、
568           仮想ホストの suEXEC に有利なように、メインの Apache
569           ドキュメント階層の外側に全ての仮想ホストのドキュメントルートを
570           構築する必要があります。(例は後日記載)
571         </p>
572       </li>
573
574       <li>suEXEC の PATH 環境変数
575
576
577         <p class="indent">
578           これを変更するのは危険です。この指定に含まれる各パスが
579           <strong>信頼できる</strong>
580           ディレクトリであることを確認してください。
581           世界からのアクセスにより、誰かがホスト上でトロイの木馬
582           を実行できるようにはしたくないでしょう。
583         </p>
584       </li>
585
586       <li>suEXEC コードの改造
587
588
589         <p class="indent">
590           繰り返しますが、何をやろうとしているか把握せずにこれをやると
591           <strong>大きな問題</strong>を引き起こしかねません。
592           可能な限り避けてください。
593         </p>
594       </li>
595     </ul>
596 </section>
597
598 </manualpage>