| 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.conf | httpdの設定を行う |
| 基本的な設定 |
設定ファイル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ファイルを有効にする。 |
| ExecCGI | cgiを有効にする。 |
| 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権限をなくす事ができる。