Webサーバ(Apache)

言わずと知れたWebサーバの設定です。 なかでもフリーな上に非常に有名なのがApacheです。 本家英語のサイトがapacheにあ ります。 また、日本語のJAPAN APACHE USERS GROUPEというのもあります。

このサーバの基本的な方針は、ユーザにはcgi ssi可能、ディレクトリを 指定して来た場合は、Indexを表示しない。今のところは、ユーザによる 設定は有効にする。というものです。

また、ユーザのドキュメントは全て

/home/htdocs/

に置くと言うものです。

もどる

ダウンロードとインストール

2001.08.13現在の最新バージョンは、1.3.20である。 上記サイトのダウンロードからソースをゲットするといいでしょう。 Vine Linux2.1では、1.3.20が、RedHat Linux7.1では1.3.19-5がインストール されている。 設定自体はそれほど変わらない。 情報を収集して、セキュリティ的にも一番あたらしいものを使うのがいい でしょう。

apacheでは、インストールにlayoutファイルを使う。 config.layoutを参考にして、書くことができる。 VineはもともとRedHat系なのでVineの場合でもRedHatで良い。 さらに、自分なりのlayoutにしたい場合は、config.layoutのRedhatの部 分を変更する。

$ cd /usr/local/src
$ gtar xvfz /usr/local/src/apache_1.3.20.tar.gz
$ cd apache_1.3.20
$ ./configure --with-layout=RedHat --enable-module=so
$ make
$ su
Passward: XXXXXX
# make install
	

これで出来上がり。

/usr/sbin/apachectlを使ってapacheの起動等を行います。

/usr/sbin/apachectl start

/usr/sbin/apachectl stop

/usr/sbin/apachectl restart

等。

ただし、ソースからコンパイルした場合は、 packageの管理とかが面倒くさいので RPMをどこからか拾ってくるのがよいでしょう。 rpmの探し方を見てみましょう。

関連ファイル

RedHatのlayoutでインストールした場合は、/etc/httpd/confの下に 設定ファイルがある。

/etc/httpd/conf/httpd.confhttpdの設定を行う
基本的な設定

設定ファイルhttpd.confの基本的な設定部分を見ていく。

#
# inetモードとstandaloneモードがある。
# inetがinetデーモン経由で起動で、standaloneが自分がdaemonとなる。
ServerType standalone

#
# サーバの設定ファイルやログファイルのルートディレクトリ。
#
ServerRoot "/etc/httpd"

# oLockファイルの場所指定する
LockFile /var/run/httpd.lock

# プロセスIDを記録するファイルを指定する。
PidFile /var/run/httpd.pid

# 接続の待ち時間を指定する。
Timeout 300

# 接続を維持するかどうかを決める
KeepAlive Off

# 接続維持のリクエストを受けるクライアント数
MaxKeepAliveRequests 100

# 接続維持するときの時間
KeepAliveTimeout 15

# リクエスト待ちの子プロセスの数
MinSpareServers 5
MaxSpareServers 20

# スタート時の子プロセスの数
StartServers 8

# 接続するクライアント数の最大
MaxClients 150

# 1回の接続での子プロセスがリクエストできる最大値
MaxRequestsPerChild 1000

# ポート番号
Port 80

# 子プロセスを起動するときのユーザ名
User apache
Group apache

# 管理者のメールアドレス
ServerAdmin root@localhost

# Documentのルートディレクトリ
# ルートを要求されたときに見るところ
DocumentRoot "/home/htdocs/html"

# ログに書き込むときにdomain名で書く
# OffだとIPで書く。Onだといちいちnameサーバに尋ねるので
# パフォーマンスが悪くなる。(と思う。)
HostnameLookups Off

# エラーログファイル
ErrorLog logs/error_log

# ログレベルを指定する
# 指定できるもの: debug, info, notice, warn, error, crit,
LogLevel warn
	
ディレクトリ毎の設定
○ ユーザディレクトリの設定

ユーザのディレクトリを1箇所にまとめる場合は、 httpd.confのだいたい372行目にあるDocumentRootを変更する。

DocumentRoot /home/htdocs
	
○ ユーザディレクトリのオプションの設定

上記で設定したユーザディレクトリのオプションの設定を行う。 httpd.confのだいたい390行目にある<Directory /home/httpd/html> から</Directory>を変更する。

<Directory /home/htdocs >
・
・
Options Includes SymLinksIfOwnerMatch ExecCGI
・
AllowOverride  All
・
・
</Directory>
	

optionの内容は以下の中から選択するか"All" "None"を指定する。

Includes ssiを有効にする。
FollowSymLinks linkファイルを有効にする。
SymLinksIfOwnerMatch ownerが一緒のファイルだけlinkファイルを有効にする。
ExecCGIcgiを有効にする。
MultiViews
Indexes ディレクトリを指定されて、後述のDirectoryIndexに書かれ ているファイルが無い場合はディレクトリのファイルリスト表示する。

○ ディレクトリのデフォルトファイル

ディレクトリを直接指定された場合のデフォルトのファイルを指定する。 最初にあるほうが優先順位が高くなる。あまり多いとサーチするのに時間 がかかり、レスポンスが悪くなる。

DirectoryIndex index.html index.htm index.shtml index.cgi

	
○ ユーザのホームディレクトリを表示する

ユーザのホームディレクトリ毎の設定する場合は、

UserDir public_html
	

の部分を変更する。さらに

#<Directory /home/*/public_html>
#    AllowOverride FileInfo AuthConfig Limit
#    Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
#    <Limit GET POST OPTIONS PROPFIND>
#        Order allow,deny
#        Allow from all
#    </Limit>
#    <Limit PUT DELETE PATCH PROPPATCH MKCOL COPY MOVE LOCK UNLOCK>
#        Order deny,allow
#        Deny from all
#    </Limit>
#</Directory>
	

の部分のコメントを削除し、設定を変更する。

ユーザのディレクトリにはotherに対するpermissionが必要である。 もちろん、public_htmlにもpermissionが必要である。

$ chmod o+rx ~user/
$ chmod o+rx ~user/public_html/
	
ユーザディレクトリでCGIを実行する時の注意

どのバージョンからかはわかりませんが、新しいapacheではセキュリティ機能が強化されている。 ユーザディレクトリ(つまり~****でアクセスするディレクトリ)で cgiを実行する時はユーザ権限で実行される。 また、group、otherにwrite権限があるとInternal Server Errorとなる。 (ログファイル(例えば、/var/log/httpd/error_log)には、Premature end of script headersとでているはず。) これはsuexecという厳しいチェックを行なっていてそれをクリアできなければすべて Internal Server Errorになるようになっているからである。 (エラー内容はsuexec_logにでている。) なので、ディレクトリのパーミッションは755でcgiスクリプトも755で設定しておかなければならない。

つまり、group、otherにpermissionがあってもいい事がないので 下記のようにしてすべてwrite permissionをとってしまうとよい。

$ chmod -R og-w ~user/public_html
	

こうしておけば、public_html以下のすべてのファイルとディレクトリで other,groupのwrite権限をなくす事ができる。

もどる


Kenji Ohmori
Last modified: Tue May 31 01:56:38 JST 2005