|
|
Webサーバーの構築
|
WebサーバーについてApacheの構成と設定の準備全般的な動作環境の設定コンテナディレクティブの形式コンテナディレクティブの設定ドキュメントルートの設定等ユーザーディレクトリの設定バーチャルホストの設定CGIの実行許可の設定ユーザー認証機能の設定httpdのコントロールhttpdの動作チェックポートフォワーディングの設定 |
ローカルユーザーにコンテンツスペースを提供Apache は、 WBEL や CentOS の ユーザーアカウント 管理の仕組みと連動していて、システム上のローカルユーザーに、簡単な手続きで コンテンツ を公開させる仕組みを持っています。 通常この仕組みによって提供される URL は、
"http://www.obenri.com/~suzuki/"
というスタイルをとります。 このサービスは一般に、 ISP がユーザーに対して、メールアドレスなどと同様の付加サービスとして提供する場合に多く用いられますので、こういう形式のURLをご覧になったことはあると思います。 従ってこの方法によるコンテンツスペースの提供は、 「大勢のユーザーに手間なくコンテンツスペースを提供すること」 を目的とし、設計されていますので、本格的な運用を目的としたコンテンツのスペースを提供するような場合は不向きのように思われがちです。
しかし、ユーザーディレクトリは
バーチャルホスト
の設定
ユーザーディレクトリ公開のためのhttpdの設定この ユーザーディレクトリの公開web機能 は、Apacheのモジュール "mod_userdir.c" として提供されています。 もちろん、 WBEL や CentOS を インストール するときに、普通に Webサーバー を選択しておけば、 Apache とともに"mod_userdir.c"はインストールされています。 |
|||||||||||||||||
|
|
"mod_userdir.c"の設定は、 httpd の主設定ファイル "/etc/httpd/conf/httpd.conf" で行います。
"mod_userdir.c"モジュールの有効化WBEL3 及び CentOS3 では 355行目〜 、WBEL4及びCentOS4では 333行目〜 、CentOS5では 349行目〜 あたりに記述があります。 デフォルト のモジュールコンテナは、
となっています。コメント文を除くと以下のようになります。
"UserDir disable" 、つまり「ユーザーディレクトリ機能を無効にする」という設定が有効になっていますので、デフォルトではユーザーディレクトリは機能していません。 これを以下のように修正します。
この設定によって、各 ユーザーアカウント の ホームディレクトリ の中に "public_html" というディレクトリを作成すると、それが各々のユーザー用の コンテンツ スペースのドキュメントルートになります。 "public_html"というディレクトリ名は変更しても構いませんが、他の ディレクティブ がこのディレクトリ名を参照することがありますので、強いて変更する必要がなければそのままにしておきましょう。
|
|||||||||||||||||
ユーザーディレクトリの設定WBEL3 及び CentOS3 では 371行目〜 、WBEL4及びCentOS4では 354行目〜 、CentOS5では 370行目〜 あたりに記述があります。 すべてのユーザーディレクトリ "/home/[ ユーザーアカウント ]/public_html" に共通した設定を行う部分です。 デフォルト では、
となっていて、"/home/*/public_html"、つまり「すべての ホームディレクトリ 以下の "public_html" に対する共通設定」となっていますが、全文がコメントアウトされています。 |
||||||||||||||||||
|
|
本来ならば、このまま全文がコメントアウトされたままでも、ユーザーディレクトリは公開可能のはずです。
なぜならもともとデフォルトの
"/(ルート)"
ディレクトリの設定は、
「すべての
ノード
からのアクセスを許可する。」
となっていたわけですから
しかしながら既に セキュリティ 確保のために、"/(ルート)"ディレクトリに対しては 「すべてのノードからのアクセスを拒否する。」 に設定変更を行っているはずですので、当然このユーザーディレクトリに対して明示的にアクセス許可の設定を行う必要があるというわけです。 Apache提供のユーザーディレクトリのデフォルト設定予め準備されている設定を、そのまま全部有効化します。
つまり"/home/*/public_html"について、
"AllowOverride"
ディレクティブ
「ファイルの表示とユーザー認証、及びアクセス制御の各設定をユーザーに譲渡。」
"Options"
ディレクティブ
「インデックスファイルの自動検索、ディレクトリ表示、 アカウント 一致の場合の シンボリックリンク の参照許可、外部プログラムを利用しない SSI の実行許可。」 がそれぞれ有効に設定されています。 要するにこれは、 「 セキュリティ 上の致命的な問題の起こらない、ぎりぎりいっぱいの許可をユーザーに与える。」 というレベルの設定ということです。
また、
HTTPメソッド
の種類による制御は
<Limit GET POST OPTIONS>
と
<LimitExcept GET POST OPTIONS>
で設定されていますから
「GET、POST、OPTIONSの各HTTPメソッドはすべての ノード からのアクセスを許可し、それ以外のHTTPメソッドはすべてのノードからのアクセスを拒否する。」 という意味になります。 これは、 httpd にとって自身の制御範囲外のHTTPメソッドの利用を禁止し、セキュリティを維持するための設定です。 もちろん一般的な コンテンツ では、GET、POST、OPTIONS以外のHTTPメソッド以外はまず必要ありませんから、この設定によって利用するユーザーが不自由になるということはまずないでしょう。 セキュリティ重視のユーザーディレクトリ設定上で説明したのは Apache 推奨のユーザーディレクトリの設定ですが、これは コンテンツ 作成者が httpd の仕組みや設定に関してかなり詳しく、一応のモラルをもって利用することが前提になっています。 現実にはそういうケースはむしろ稀です。 プロのクリエーターがあなたの 構築中のLinuxサーバー の「貸しスペース」を使うことはまず考えられません。普通は家族や友人などの 「身の回りにいる初心者レベルのユーザー」 が貸し出しの対象になるはずです。 ということは、下手にアクセスファイルを利用させたり SSI の実行を許可したりすると、間違えた設定によって サーバー の動作負荷に影響を与えるようなケースが起こらないとは限りません。 |
|||||||||||||||||
|
|
従って、こういった不具合を未然に防ぐには、最初から許可を与えすぎないに越したことはありません。以下のように設定するのがベターです。
つまり"/home/*/public_html"について、 「アクセスファイルの利用を禁止し、 アカウント 一致の場合の シンボリックリンク の参照のみを許可する。」 という設定を行うことになります。
シンボリックリンクの参照を一部許可しているのは、サーバー負荷の軽減のためです
このようにユーザーディレクトリに対する設定は、Apache推奨の設定のように最初から目いっぱいの許可を与えるのではなく、まずはこの「セキュリティ重視」の設定で運用を開始しておいて、必要に応じて許可範囲を広げていく、というのが望ましいといえるでしょう。
|
|||||||||||||||||
コンテンツの公開に必要なその他の設定httpd の設定ファイル "/etc/httpd/conf/httpd.conf" 上の、 ユーザーディレクトリでの コンテンツ の公開設定はこれでOKです。 ただし、実際にコンテンツを公開可能にするには、他にもう少し設定が必要になります。 |
||||||||||||||||||
| Apache に限らず、どんな アプリケーション でもOSのパーミッションを無視してアクセス許可を出すことはできません。この原則に例外はありません。 |
まず、公開を許可する ユーザーアカウント の ホームディレクトリ に対して、所有者以外からアクセスが可能な パーミッション を、 OS レベルで設定する必要があります。
通常
useradd
で作成されたユーザーアカウントのホームディレクトリは、パーミッション
"700"
で作成されますから、そのままでは
HTTP
で接続してくる
クライアント
の
システムアカウント
である
"apache"
従って、公開を許可するユーザーアカウントのホームディレクトリに対し、次のように操作してパーミッションを "755" に変更してください。 また、公開用のディレクトリとして、ホームディレクトリ以下に "public_html" というディレクトリを作成する必要があります。 |
|||||||||||||||||
| 一般のユーザーアカウントからディレクトリを作成するときは、自動的にパーミッションは "775" になります。別にそのままでも構いませんが、後々のことを考えて "755" にしておきましょう。 |
パーミッションは同じく "755" にしておきます。 rootアカウントからディレクトリ作成を実行すると、 デフォルト のパーミッション "755" で作成されます。 ただし、rootアカウントで作成したディレクトリは所有者と所有グループが"root"になってしまいますので、ここままでは"suzuki"からの FTPクライアント によるデータの アップロード やパーミッション操作を行うことができませんから、 chown コマンドで所有者を変更する必要があります。 「ユーザーアカウントを作るたびに、こういう設定をするのは面倒。」 |
|||||||||||||||||
の説明に従って、予め
"/etc/skel"
以下に、ディレクトリ
"public_html"
を作成しておけば、ユーザーアカウント作成と同時にフォルダが作成されるようになります。
頻繁にホームページの公開スペースを提供するような場合は、この方法をお勧めします。 |
と思われるかもしれませんが、実はこの二つの作業は大抵 FTPクライアント から行うことができますから、仕組みからいえばこれらの作業はクライアント自身に行わせることができます。 FTPクライアントで 構築中のLinuxサーバー にローカルユーザーで接続すれば自分のホームディレクトリの中は自由に操作できますから、ここに"public_html"をパーミッション"755"で作成するのは簡単です。この点は特に説明の必要はないでしょう。
またホームディレクトリ自身は、
vsftpd
の設定で、ローカルユーザーが自分のホームディレクトリより上位のディレクトリを参照できないようになっている場合
|
|||||||||||||||||
|
|
ただ、FTPクライアント アプリケーション の多くは、 FTPサーバー に FTP コマンド を送信して実行する機能を持っていますから、その機能を呼び出して、 "site chmod 755 .." 、と実行することでホームディレクトリ自身のパーミッションを変更することができます。
↓
これらの設定作業は、どちらにしても最初の一度だけで済みますから、クライアントにこういう特殊な操作の説明をするくらいならば、自分でやってしまったほうが簡単かもしれません。 ただ、大量のクライアントを抱えてコンテンツスペースを提供するような運営(例えば商業利用や、学校内などの実習など)を行う場合、操作マニュアルを作ってクライアント自身に行ってもらうほうが良いかもしれません。
|
|
|
ドキュメントルートの設定等
<<Previous
|
Next>>
バーチャルホストの設定
|
| このサイトは既に更新を終了していますが、今のところ店じまいの予定はありません。 リンクフリー ですので、趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。 |
| ”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。 |