www.suzu841.com | mrs.suzu841.com

../images/neko1sa.gifApacheUserDir の設定


CentOS 5.2 上で、自分が編集したwebページなどの動作確認をするために Apache2.2のUserDirの設定をして、 ブラウザでの表示確認ができるようにローカル環境を構築してみました。

2008年11月現在の私の Linux マシンのバージョンです。
OS : CentOS 5.2 (Kernel 2-6-18-92.1.18.el5 on an i686)

Xampp のようなツールを使っての設定もありますが、せっかくLinux環境をもっているのですから、ここは、それらのツールを使わずに ApacheのUserDirの設定だけで簡単なローカル環境を構築してみたいと思います。
なお、Apache のインストールは Linuxインストール時に「webサーバ」を選択して、同時にインストールしてしまうのが普通ですが、 OSインストール時に「webサーバ」を選択しなかった場合は、後から「パーケージの追加」で「webサーバ」を追加することができます。 このときインストールメディアを要求されますので、前もってインストール時に使ったCD-ROMなどを用意しておいてください。
また、インストールメディアに入っている Apache はバージョンが古いと思いますので、 パッケージの追加後には最新版へのアップデートをお忘れなく ( mrs.suzu841.com サイト内での Apache のインストールについては Apache 導入 phpMyAdminの設置 に記述があります )。





square1.png DocumentRoot

これらの作業は設定ファイルの編集が必要ですので rootユーザで行います。


Apache ウェブサーバでは、自分が編集した html ファイルなどを置く場所を DocumentRoot と呼びます。
この DocumentRoot は、CentOS5.2の初期状態では、 Apache の設定ファイル httpd.conf の276行目付近に 以下のように記述されています。
#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html"
一番下の行に DocumentRoot "/var/www/html" とあります。

images/var-www-html.png

つまり、ファイルを置く場所は /var/www/html の中という事になりますが、 複数のユーザのためにコンテンツを配置するディレクトリを 作成した場合、ユーザが増えるに従って管理者の負担が大きくなります。 また、デフォルトのまま使うのは安全ではありませんので、各ユーザごとのhomeディレクトリーの中へファイルを置く場所を 構築していきたいと思います。

ここでは hoge というユーザを使用します。


作業を始める前に、hogeユーザの home に public_html というディレクトリを作成しておきます。
各ユーザの home ディレクトリは、それぞれのユーザ名で作成されますので、hoge ユーザの home とは、 hoge と名前のついているディレクトリになります。
ユーザディレクトリのパーミッションはデフォルトでは 700 ですが、UserDir の設定を行う場合は、711 にする必要があります。
ユーザディレクトリ自体に実行権限がないと、Forbidden エラーが発生しますのでご注意ください。


# ll


上記のようにl(エル)l(エル)と入力して、Enter キーを押 すとパーミッションが表示されます。

images/chmod.png

hoge のところには drwx--x--x と表示されていますので、この説明を簡単にします。
d は directory のことであり、
r は readable 、 読み込み
w は writable 、 書き込み
x は executable 、 実行

表示されているところは、その権限があるということです。ないところは、 - (ハイフン)で表示されます。
この場合、hoge のパーミッションを数字で表すと 711 となります。

このパーミッションの値を変更したい時には、 chmod コマンドを使います。

例えば、パーミッションを 755 と変更したい時などには、以下のようにします。


# chmod 755 hoge


images/chmod-755.png
drwx--x--x ではなく、 drwx-xr--x となりました。


square1.png httpd.conf

hoge ユーザの home に public_html を作成しましたが、このままではただ作成しただけで、まだ Apache に知らせていません。 Apache の設定ファイルである httpd.conf がある /etc/httpd/conf/ まで cd コマンドで移動します。


# cd /etc/httpd/conf/


本来なら上のように入力するべきところなのですが、うっかりと


# cd /etc/httpd/

と入力したところで Enter キーを押してしまいましたので、以下のように表示されてしまいました。

images/cd-etc-httpd.png

足りないところを続けて入力し、Enter キーを押します。
images/cd-conf.png
conf/ の中に何があるのかを ls コマンドで確認してみました。
httpd.conf というファイルは、現在使用中の、編集した apache の 設定ファイルです。
httpd.conf.org というファイルは編集する前の、元の httpd.confファイルを初期状態のまま、名前を変えて保存したものです。 httpd.conf.orgと言うファイル名に使った org は、オリジナル( original )の頭3文字です。 こうしておけば、万が一があった時には、いつでも元に戻す事ができますから。
magic というファイルは、 mime の設定ファイルです。


今回使うのは、 httpd.conf ファイルですので、これを less コマンドで開いてみます。


# less httpd.conf


images/less-httpdconf.png


以下のように開かれました。
images/httpdconf-1.png




square1.png UserDir

開いた httpd.conf ファイルの中から UserDir と書かれている場所を検索します。

less で開いたままの httpd.confファイルのページ内検索をします。
カーソルは多分、端末の一番下にあると思いますので、そのままキーボードを半角英数字モードで、スラッシュ( / )を入力し、 その後へ UserDir と続けて入力し、Enter キーを押します。
この時に最初に入力するスラッシュ( / )は上から下への検索コマンドで、下から上への検索コマンドは クエスチョンマーク( ? )になります。 検索文字列を次へ移動するときには、"次" と云う言葉である next のエヌ( n )のキーを叩きます。

images/search-userdir-1.png


見つかった検索文字列は黒く反転して表示されます。 images/search-userdir-2.png

編集する場所は350行目前後の以下のように記述されているところです。

<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>

#
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
#<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>

これを赤い文字で書かれたところだけを書き加えていきます。
(ここでは、デフォルトの文字列はシャープ( # )でコメントアウトしてあります。)

<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
    UserDir enabled hoge

    #
    # 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
    UserDir public_html
</IfModule>

#
# Control access to UserDir directories. The following is an example
# for a site where these directories are restricted to read-only.
#
#<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>

<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>




変更した箇所の説明を簡単にしていきます。
まず1番目の変更箇所である UserDir enabled hoge は、hogeユーザに ユーザディレクトリの使用を許可する、という事になります。ここでは hoge というユーザ名を用いましたので、 この名前は各環境のユーザ名にあわせて変更をお願いいたします。

2番目の変更箇所、UserDir public_html は、 ユーザのディレクトリは public_html  ということになります。このユーザのディレクトリ名などの設定については、 Apacheモジュール mod_aliasをごらんくださいますように。
(このサイト内では CentOS 5.2 に phpMyAdmin を設置 Apache Aliasの設定のところにも記述があります。)

3番目の<Directory /home/*/public_html> から始まる箇所は、
■ apache ユーザディレクトリの設定について
■ Directory ディレクティブ ⇒ 引数で指定するディレクトリの制御を行うための宣言
■ Limit ディレクティブ⇒ 引数で指定したメソッドの制御を行うための宣言
■ LimitExcept ディレクティブ ⇒ 引数で指定した「以外の」メソッドの制御を行うための宣言
などの設定になります。

以上、簡単に述べてみました。 ここで説明していることよりもう少し詳しくまとめた資料はこちらにあります。
詳細については、本家Apacheの http://httpd.apache.org/docs/2.2/ja/mod/core.html#limitexcept にある、<LimitExcept> ディレクティブ をどうぞ。


ここでは、なんの変更もせずに、ただ頭の # だけを取り除いてあります。
以上で UserDire の設定は終了です。


※ これはあくまでもローカル環境での検証用環境ですので、これをそのまま公開することはとても危険です。
公開するにはApacheの設定ファイルをもっと洗練されたものにする必要がありますし、 アクセス制限や認証などについても考慮しなければなりません。
ここでは自分のマシンの環境を使っての検証用としか考えていないので、そういったものには何も触れておりません。
ご承知おき下さいますよう。


参考リンク: The Apache Software Foundation 日本のApache | ユーザ毎のウェブディレクトリ

square1.png 設定後の確認

変更した書式が間違えていないかどうかを確認するために、下のように入力し、Enterキーを押します。


# httpd -t


Syntax OK と表示されれば、間違いないことになります。

images/syntax.png


次に、変更した設定を反映させるために apache を再起動させます。以下のように入力し、Enter キーを押します。


# service httpd restart


images/httpd-restart1.png

そして最後にブラウザで表示してみます。
CentOS5.2 上で、ブラウザ のアドレスバーへ http://localhost/~hoge/ と入力して、 Enterキーを押します。
http://localhost/~hoge/ の ~ は、チルダです。
半角英数字モードで、Shift + ひらがなの"へ"と書かれたキーを押すと表示されます。
ここでは、hoge という名前を使いましたが、この名前はそれぞれの環境にあわせて変更されてくださいますように。

images/hoge-public-html.png
無事に表示されました。


square1.png Alias の設定

初期状態のままのアドレスでは、http://localhost/~hoge/ となっています。
これをこのまま ~hoge で表示をすると hoge というユーザがいるとわかってしまいアタックの元となったりして、 セキュリティ上好ましくありません。
そこで、この ~hoge を geho という別の名前で表示するようにしたいと思います。
このように別の名前で表示させることを Apache の Alias をふる といいます。


#
# Aliases: Add here as many aliases as you need (with no limit). The format is
# Alias fakename realname
#
# Note that if you include a trailing / on fakename then the server will
# require it to be present in the URL. So "/icons" isn't aliased in this
# example, only "/icons/". If the fakename is slash-terminated, then the
# realname must also be slash terminated, and if the fakename omits the
# trailing slash, the realname must also omit it.
#
# We include the /icons/ alias for FancyIndexed directory listings. If you
# do not use FancyIndexing, you may comment this out.
#
Alias /icons/ "/var/www/icons/"

<Directory "/var/www/icons">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
</Directory>

#

上記のような httpd.conf の Alias の設定をするところへ自分がブラウザのアドレス欄へ表示したい名前とその場所を書き加えます。

今回の例では、hogeユーザのhomeにpublic_html というユーザディレクトリを作成してあり、そのpublic_htmlを gehoとして表示したいわけですから、以下のサンプルの赤い文字のようにします。
(なお、#Alias for gehoの行は書かなくてもかまいません。これは自分で編集した事を示すために書き加えているだけですから。)
#
#Alias for geho
#
Alias /geho "/home/hoge/public_html"   ← 大事なのはこの1行だけ。

下の画像では緑色の線で囲まれた緑色の矢印のところは、 phpMyAdmin を設定する時に施した設定です。
今回は赤い矢印の赤い枠線のところを書き加えます。
images/alias.png

この時にここでは、ディレクトリの末尾にわざとスラッシュを入れていません。
末尾のスラッシュについてはウェブ サーバーによって異なります。
詳細については、 Apacheモジュール mod_dir Apacheモジュール mod_alias のところを参照してくださいますように。


次に、変更した書式が間違えていないかどうかを確認するために下のように入力し、Enter キーを押します。


# httpd -t


Syntax OK と表示されれば、間違いないことになります。

images/syntax.png


次に、変更した設定を反映させるために apache を再起動させます。以下のように入力し、Enter キーを押します。


# service httpd restart


そして最後にブラウザで表示してみます。
CentOS5.2 上で、ブラウザ のアドレスバーへ http://localhost/geho と入力して、Enter キーを押します。
ここでは、geho という名前を使いましたが、この名前はそれぞれの環境にあわせて変更されてくださいますように。

images/alias-firefox.png
無事に表示されました。



今度は我が家のネットワークで繋がっている別のWindowsホストで、Microsoftさんの IE から接続してみたいと思います。 私のWindowsマシンにはXamppが入っていますから、http://localhost 云々は使えません。 これを使うとWindows側のXamppで設定してあるlocalhostが起動してきてしまいますから。

ドメイン名を hogehoge.local と仮定し、ホスト名は hoge だとすると、URLアドレス欄に入力するのは http://hoge.hogehoge.local/geho となります。
images/ie.png
これも無事にブラウザで表示させることができました。




square1.png ステータスの確認

もしも、ブラウザで表示されなかったり、 apache で何かエラーが表示されるようであれば、 apacheのステータスを確認してみます。

httpd が動いているかどうかのステータス( status )を確認します。端末に以下のように入力します。

# service httpd status


httpd が起動していれば、 実行中 という文字が表示されます。


もし、起動していなければ、以下のように端末に入力して起動させます。

# service httpd start



これだけですが、この記述方法ですと、毎回コンピュータを起動させたときにこれをすることになります。
それでは面倒だ。ローカルだし、自分しか使わないのだから、Apache は、コンピュータが起動するときに自動的に起動するようにしたい、 と言われるのであれば、chkconfigの設定をする事になります。以下のように端末に入力します。

# chkconfig httpd on


次回の起動時から有効になります。なお、この設定は RedHat 系だけのものです。

上記のような操作をしてもなおかつ、 Apache が起動してくれないような場合には、いろいろな原因が考えられます。 特に CentOS5.2 では nss.confの設定が必要となりましたので、参考までにこのサイト内の CentOS5.2 に phpMyAdmin を設置してみる Apache nss.confの設定などをご覧ください。
nss.confの設定は、それ以降のバージョンでは必要なくなったようですが、いつから必要なくなったのかは定かではありません。 あれ?と気が付いた CentOS5.4 では必要なくなっていました。



※ このページの設定はあくまでも編集したwebページを公開する前の、ローカル環境での検証用環境の設定です。
これをそのまま公開することは前提としていませんし、とても危険です。ご理解くださいますよう。