このページではLinux上でApache/httpdを使ってWebサーバー構築するために必要なユーザーディレクトリの利用設定について解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
Webサーバーの構築

Webサーバーについて

Apacheの構成と設定の準備

全般的な動作環境の設定

コンテナディレクティブの形式

コンテナディレクティブの設定

ドキュメントルートの設定等

ユーザーディレクトリの設定

バーチャルホストの設定

CGIの実行許可の設定

ユーザー認証機能の設定

httpdのコントロール

httpdの動作チェック

ポートフォワーディングの設定

Ubuntu 10.04 LTS デスクトップ版のススメへようこそ

ローカルユーザーにコンテンツスペースを提供

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" で行います。

NEC「得選街」

"mod_userdir.c"モジュールの有効化

WBEL3 及び CentOS3 では 355行目〜 、WBEL4及びCentOS4では 333行目〜 、CentOS5では 349行目〜 あたりに記述があります。

デフォルト のモジュールコンテナは、

<IfModule mod_userdir.c>
  #
  # UserDir is disabled by default since it can confirm the presence
  # of a username on the system (depending on home directory
  # permissions).
  #
  UserDir disable

  #
  # To enable requests to /~user/ to serve the user's public_html
  # directory, remove the "UserDir disable" line above, and uncomment
  # the following line instead:
  #
  #UserDir public_html

</IfModule>

となっています。コメント文を除くと以下のようになります。

<IfModule mod_userdir.c>
  UserDir disable
  #UserDir public_html
</IfModule>

"UserDir disable" 、つまり「ユーザーディレクトリ機能を無効にする」という設定が有効になっていますので、デフォルトではユーザーディレクトリは機能していません。

これを以下のように修正します。

<IfModule mod_userdir.c>
  #UserDir disable
  UserDir public_html
</IfModule>

この設定によって、各 ユーザーアカウント ホームディレクトリ の中に "public_html" というディレクトリを作成すると、それが各々のユーザー用の コンテンツ スペースのドキュメントルートになります。

"public_html"というディレクトリ名は変更しても構いませんが、他の ディレクティブ がこのディレクトリ名を参照することがありますので、強いて変更する必要がなければそのままにしておきましょう。

NEC「得選街」
このページの先頭へ↑

ユーザーディレクトリの設定

WBEL3 及び CentOS3 では 371行目〜 、WBEL4及びCentOS4では 354行目〜 、CentOS5では 370行目〜 あたりに記述があります。

すべてのユーザーディレクトリ "/home/[ ユーザーアカウント ]/public_html" に共通した設定を行う部分です。

デフォルト では、

#<Directory /home/*/public_html>
#  AllowOverride FileInfo AuthConfig Limit
#  Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#  <Limit GET POST OPTIONS>
#    Order allow,deny
#    Allow from all
#  </Limit>
#  <LimitExcept GET POST OPTIONS>
#    Order deny,allow
#    Deny from all
#  </LimitExcept>
#</Directory>

となっていて、"/home/*/public_html"、つまり「すべての ホームディレクトリ 以下の "public_html" に対する共通設定」となっていますが、全文がコメントアウトされています。

本来ならば、このまま全文がコメントアウトされたままでも、ユーザーディレクトリは公開可能のはずです。

なぜならもともとデフォルトの "/(ルート)" ディレクトリの設定は、 「すべての ノード からのアクセスを許可する。」 となっていたわけですから /(ルート)ディレクトリコンテナの設定 、このディレクトリは本来その設定を引き継いでいるはずだからです。

しかしながら既に セキュリティ 確保のために、"/(ルート)"ディレクトリに対しては 「すべてのノードからのアクセスを拒否する。」 に設定変更を行っているはずですので、当然このユーザーディレクトリに対して明示的にアクセス許可の設定を行う必要があるというわけです。

Apache提供のユーザーディレクトリのデフォルト設定

予め準備されている設定を、そのまま全部有効化します。

<Directory /home/*/public_html>
  AllowOverride FileInfo AuthConfig Limit
  Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
  <Limit GET POST OPTIONS>
    Order allow,deny
    Allow from all
  </Limit>
  <LimitExcept GET POST OPTIONS>
    Order deny,allow
    Deny from all
  </LimitExcept>
</Directory>

つまり"/home/*/public_html"について、 "AllowOverride" ディレクティブ AllowOverrideディレクティブについて で、

「ファイルの表示とユーザー認証、及びアクセス制御の各設定をユーザーに譲渡。」

"Options" ディレクティブ Optionsディレクティブについて で、

「インデックスファイルの自動検索、ディレクトリ表示、 アカウント 一致の場合の シンボリックリンク の参照許可、外部プログラムを利用しない SSI の実行許可。」

がそれぞれ有効に設定されています。

要するにこれは、

セキュリティ 上の致命的な問題の起こらない、ぎりぎりいっぱいの許可をユーザーに与える。」

というレベルの設定ということです。

また、 HTTPメソッド の種類による制御は <Limit GET POST OPTIONS> <LimitExcept GET POST OPTIONS> で設定されていますから HTTPメソッド指定型コンテナについて

「GET、POST、OPTIONSの各HTTPメソッドはすべての ノード からのアクセスを許可し、それ以外のHTTPメソッドはすべてのノードからのアクセスを拒否する。」

という意味になります。

これは、 httpd にとって自身の制御範囲外のHTTPメソッドの利用を禁止し、セキュリティを維持するための設定です。

もちろん一般的な コンテンツ では、GET、POST、OPTIONS以外のHTTPメソッド以外はまず必要ありませんから、この設定によって利用するユーザーが不自由になるということはまずないでしょう。

セキュリティ重視のユーザーディレクトリ設定

上で説明したのは Apache 推奨のユーザーディレクトリの設定ですが、これは コンテンツ 作成者が httpd の仕組みや設定に関してかなり詳しく、一応のモラルをもって利用することが前提になっています。

現実にはそういうケースはむしろ稀です。

プロのクリエーターがあなたの 構築中のLinuxサーバー の「貸しスペース」を使うことはまず考えられません。普通は家族や友人などの 「身の回りにいる初心者レベルのユーザー」 が貸し出しの対象になるはずです。

ということは、下手にアクセスファイルを利用させたり SSI の実行を許可したりすると、間違えた設定によって サーバー の動作負荷に影響を与えるようなケースが起こらないとは限りません。

従って、こういった不具合を未然に防ぐには、最初から許可を与えすぎないに越したことはありません。以下のように設定するのがベターです。

<Directory /home/*/public_html>
  AllowOverride None
  Options SymLinksIfOwnerMatch

  <Limit GET POST OPTIONS>
    Order allow,deny
    Allow from all
  </Limit>
  <LimitExcept GET POST OPTIONS>
    Order deny,allow
    Deny from all
  </LimitExcept>
</Directory>

つまり"/home/*/public_html"について、

「アクセスファイルの利用を禁止し、 アカウント 一致の場合の シンボリックリンク の参照のみを許可する。」

という設定を行うことになります。

シンボリックリンクの参照を一部許可しているのは、サーバー負荷の軽減のためです SymLinksIfOwnerMatchオプションについて

このようにユーザーディレクトリに対する設定は、Apache推奨の設定のように最初から目いっぱいの許可を与えるのではなく、まずはこの「セキュリティ重視」の設定で運用を開始しておいて、必要に応じて許可範囲を広げていく、というのが望ましいといえるでしょう。

NEC「得選街」
このページの先頭へ↑

コンテンツの公開に必要なその他の設定

httpd の設定ファイル "/etc/httpd/conf/httpd.conf" 上の、 ユーザーディレクトリでの コンテンツ の公開設定はこれでOKです。

ただし、実際にコンテンツを公開可能にするには、他にもう少し設定が必要になります。

Apache に限らず、どんな アプリケーション でもOSのパーミッションを無視してアクセス許可を出すことはできません。この原則に例外はありません。

まず、公開を許可する ユーザーアカウント ホームディレクトリ に対して、所有者以外からアクセスが可能な パーミッション を、 OS レベルで設定する必要があります。

通常 useradd で作成されたユーザーアカウントのホームディレクトリは、パーミッション "700" で作成されますから、そのままでは HTTP で接続してくる クライアント システムアカウント である "apache" Userディレクティブについて でその内容を参照することはできません。

従って、公開を許可するユーザーアカウントのホームディレクトリに対し、次のように操作してパーミッションを "755" に変更してください。

[root@web1 ~]# cd /home/Enter cdコマンドについて ..について
[root@web1 home]# ls -lEnter lsコマンドについて
合計 28
drwx------  2 root   root    16384 7月 21 23:06 lost+found
drwx------  3 suzuki  suzuki    4096 1月 1 16:17 suzuki
drwx------  16 tanaka  tanaka    4096 1月 3 03:17 tanaka
drwx------  3 yamada  yamada    4096 1月 1 16:22 yamada
[root@web1 home]# chmod 755 suzuki/Enter chmodコマンドについて
[root@web1 home]# ls -lEnter
合計 28
drwx------  2 root   root    16384 7月 21 23:06 lost+found
drwxr-xr-x  3 suzuki  suzuki    4096 1月 1 16:17 suzuki  ←"755"に変更。
drwx------  16 tanaka  tanaka    4096 1月 3 03:17 tanaka
drwx------  3 yamada  yamada    4096 1月 1 16:22 yamada
[root@web1 home]#

また、公開用のディレクトリとして、ホームディレクトリ以下に "public_html" というディレクトリを作成する必要があります。

一般のユーザーアカウントからディレクトリを作成するときは、自動的にパーミッションは "775" になります。別にそのままでも構いませんが、後々のことを考えて "755" にしておきましょう。

パーミッションは同じく "755" にしておきます。

rootアカウントからディレクトリ作成を実行すると、 デフォルト のパーミッション "755" で作成されます。

ただし、rootアカウントで作成したディレクトリは所有者と所有グループが"root"になってしまいますので、ここままでは"suzuki"からの FTPクライアント によるデータの アップロード やパーミッション操作を行うことができませんから、 chown コマンドで所有者を変更する必要があります。

[root@web1 home]# cd suzuki/Enter
[root@web1 suzuki]# mkdir public_htmlEnter mkdirコマンドについて
[root@web1 suzuki]# chown suzuki.suzuki public_htmlEnter mkdirコマンドについて
[root@web1 suzuki]# ls -lEnter
合計 4
drwxr-xr-x  2 suzuki  suzuki    4096 1月 6 02:11 public_html
[root@web1 suzuki]#

「ユーザーアカウントを作るたびに、こういう設定をするのは面倒。」

/etc/skelの利用について の説明に従って、予め "/etc/skel" 以下に、ディレクトリ "public_html" を作成しておけば、ユーザーアカウント作成と同時にフォルダが作成されるようになります。
頻繁にホームページの公開スペースを提供するような場合は、この方法をお勧めします。

と思われるかもしれませんが、実はこの二つの作業は大抵 FTPクライアント から行うことができますから、仕組みからいえばこれらの作業はクライアント自身に行わせることができます。

FTPクライアントで 構築中のLinuxサーバー にローカルユーザーで接続すれば自分のホームディレクトリの中は自由に操作できますから、ここに"public_html"をパーミッション"755"で作成するのは簡単です。この点は特に説明の必要はないでしょう。

またホームディレクトリ自身は、 vsftpd の設定で、ローカルユーザーが自分のホームディレクトリより上位のディレクトリを参照できないようになっている場合 vsftpdの上位ディレクトリ参照許可の設定 、普通の操作ではパーミッションの変更はできません。

ただ、FTPクライアント アプリケーション の多くは、 FTPサーバー FTP コマンド を送信して実行する機能を持っていますから、その機能を呼び出して、 "site chmod 755 .." 、と実行することでホームディレクトリ自身のパーミッションを変更することができます。



これらの設定作業は、どちらにしても最初の一度だけで済みますから、クライアントにこういう特殊な操作の説明をするくらいならば、自分でやってしまったほうが簡単かもしれません。

ただ、大量のクライアントを抱えてコンテンツスペースを提供するような運営(例えば商業利用や、学校内などの実習など)を行う場合、操作マニュアルを作ってクライアント自身に行ってもらうほうが良いかもしれません。

NEC「得選街」
このサイトに対するご意見、ご要望、苦情、泣き言、献上品、資金援助などがございましたら こちら からお寄せください(お返事できなかったらごめんなさい)。もちろん リンクフリー です。趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。また、本サイトの更新情報をメールで知らせてほしい方は ここ からご登録ください。
Powered by Apache
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。
www.centos.org - The Community ENTerprise Operating System