Last Modifide Monday, 14-Feb-2005 16:32:34 JST

玄箱/HG(KURO-BOX/HG) - Webサーバの立ち上げ(apache)

webサーバ apacheを導入します。

apache

パッケージの導入

# apt-get install apache apache-doc

基本的な設定

mod_mime_magic対策

※mod_mime_magicモジュールをサンプルから持ってくる
# mkdir /etc/apache/share
# cd /etc/apache/share
# cp /usr/share/doc/apache/examples/magic.gz .
# gunzip magic.gz
# /etc/init.d/apache reload

文字化け対策(apacheが出力するDefaultCharsetを抑制する)

# vi /etc/apache/httpd.conf
※AddDefaultCharset onをコメントアウトする(または AddDefaultCharset off)

apacheの再起動

更新を反映させるためにapacheの再起動
# /etc/init.d/apache reload

確認

※ブラウザから http://kuro-box/にアクセス

確認方法

参考サイトIwatani Erectronics
  • プロセスの起動状況確認
    # ps ax | grep apache ←文字列apacheを含むプロセスのリスト
  • ポートの状態確認
    # netstat --tcp --all --program | grep www
  • telnetでの接続確認
    # telnet hostname http ←telnetで接続
    # HEAD / HTTP/1.0 ←ヘッダの要求
  • LOGの確認
    # cd /var/log/apache/
    # ls -l ←タイムスタンプの確認
    # tail access.log ←アクセスログの最後のほうの確認
    # tail error.log ←エラーログの最後のほうの確認

そのほかの設定

webmin用管理モジュールの追加

# apt-get install webmin-apache

アクセスログのワーム対策(/var/log/apache/access.log)

認証

Apacheでユーザ認証を行う方法

BASIC認証

  • .htaccessファイルを用いた認証を行う場合には、/etc/apache/httpd.confの対象となる<Directory>〜</Directory>ディレクティブ内に以下を追加
    AllowOverride Limit AuthConfig ←AccessFileName=.htaccess による上書きを許可
  • .htaccessファイルまたは上記の<Directory>〜</Directory>内に
    # AuthType Basic ←認証タイプはBasic
    # AuthUserFile .htpasswd ←IDとパスワードが設定されているファイル
    # AuthName "Authorised User Only" ←ダイアログの名前
    # require valid-user ←AuthUserFileのファイルにあるユーザーのみ許可
    # <Files ~ "^.(htpasswd|htaccess)$"> ←.htpasswdと.htaccessを…
    # deny from all ←誰からも見られないように設定しておく
    # </Files>
  • パスワードファイルを作成(最初のユーザー登録)
    # /usr/bin/htpasswd -c 〜/.htpasswd username
    # passwd
  • パスワードを追加
    # /usr/bin/htpasswd 〜/.htpasswd username
    # passwd
    パスワードファイルは各ディレクトリのオーナーがディレクトリ毎に設置する場合などは対象ディレクトリの.htpasswd等
    サイト全体の認証などは・・・
    パスワードはデフォルトでは CRYPT でハッシュされる。-m:MD5 -s:SHA -p:プレーンテキスト
    オプション -cはファイルの作成 -bはパスワードを含む場合 -bが無いときは対話式でパスワードを聞かれる。

Webサイトの構成

Webサーバの構成と関連情報

ディレクトリ構成

Debian(woody)環境下で apt-get installしたapacheはデフォルトで以下のディレクトリ構成となる。
ディレクトリURL設定ファイル
/var/www/http://host/サイト全体のドキュメントルート
/usr/lib/cgi-bin/http://host/cgi-bin/サイト全体のCGIディレクトリ
/home/user/public_html/http://host/~user/ユーザ毎のドキュメントルート
/home/user/public_html/cgi-bin/http://host/~user/cgi-bin/ユーザ毎のCGIを認める場合。追加の設定が必要
/etc/apache/httpd.conf設定ファイル
/usr/bin/htpasswdパスワードファイル生成プログラム
/var/log/apache/ログファイル

ユーザディレクトリ

  • ユーザーごとのCGIのディレクトリ(デフォルト)
    各ユーザーのドキュメントルートが /home/user/public_html/ になっている場合、その場所へのアクセスが http://yourdomain/~user/となる。そのため、特別な設定を行わない限り htmlでのリンク http://yourdomain/~user/cgi-bin/etc.cgiは、/home/user/public_html/cgi-bin/etc.cgi となる。

  • ユーザーごとのCGIのディレクトリを/home/user/cgi-bin/にする方法 参考サイト:パソコンおやじTips
    ScriptAliasMatch ^/~([a-zA-Z0-9_-]+)/cgi-bin/(.+) /home/$1/cgi-bin/$2
    <Directory /home/*/cgi-bin/>
      Options ExecCGI
      AddHandler cgi-script .cgi
    </Directory>

suEXEC に関して( Debian / apache / cgi-bin / suEXEC ) ※重要

  • Debianでapt-get installした apacheは、デフォルトで suEXEC環境で実行される。
  • CGIを設置するディレクトリを上記の様に設定すると(/home/user/cgi-bin/)デフォルトのドキュメントルート(/home/user/public_html)の配下ではなくなるため http://domain/~user/cgi-bin/etc.cgiのようなアクセス方法では suEXECのセキュリティポリシーによって実行できなくなる。詳しくはマニュアルの13を参照
  • 上記の問題を解決しapacheでユーザー毎のCGIを正常に動かすためには、次の方法かのうちどれかを選択する必要がある。
    1. suEXECの--suEXEC-userdir=public_html を変更
      →コンパイルやmake…見送ります(ソースからのインストールは避けたいのと、suEXECの様な機能を素人の僕には弄れません)
    2. suEXECを実行させないようにする
      →mv /usr/lib/apache/suexec /usr/lib/apache/suexec.bak 等としてsuexecをリネームしてロードさせないようにする(折角のsuEXECの機能を捨てるのか・・・?)
    3. cgi-binを素直にpublic_htmlの配下に置く
      →上のユーザードキュメントルートの変更を行わない(デフォルト)ただし、ドキュメントルート配下にCGI関連のファイルも置くことになるので、パーミッションの設定を誤るとブラウズ出来てしまったり…(上の項目と、どちらをとるかという問題です。)
      →またこの場合には /home/user/public_html/cgi-bin/以下でCGIを実行することを httpd.confに書く必要があるかも。。
      <Directory /home/*/public_html/cgi-bin/>
        Options ExecCGI
        Order allow,deny
        Allow from all
      </Directory>
    4. suEXECでの設定/home/user/public_html/より下の階層にapacheで参照されるドキュメントルートを置く(んな事ができるのか?(^-^; )
      →httpd.confのユーザーのドキュメントルートを例えば /home/user/public_html/html/等に変えてもCGIが動けば吉。suEXECが同じモノを参照しているようなら無意味。←この辺りは良くわかりません…
      →駄目ならAliasMatchで半ば強引にhttp://domain/~user/へのアクセスでcgi-bin/以外を/home/user/public_html/html/以下に導く…とか?
      →どちらにしても、cgi-bin/etc.cgiからHTMLディレクトリを(内部pathで)参照するような場合に"../htm/〜"等の指定になる(サーバで環境変数 HOME等に /home/user/public_html が代入されていれば、$ENV{'HOME'}/html/〜等になるのかな)が suEXEC環境下では '/(root)' からの参照や '..' による参照が認められないので…無理ですね。よって…CGIで参照されるデータは「そのCGIプログラムより下の階層にある必要がある」ようです(多分…)

エラーに関して

  • 500-Internal Server Error(サーバ内部エラー)
    suEXEC関連の問題を残したままでブラウズしようとすると500-Internal Server Errorが表示され、error.log にはPremature end of script headers: /home/user/cgi-bin/test.cgiが出力されます。
    ちなみに、このエラーは本来、「スクリプト・ヘッダーの時期尚早の終了」で、CGIから出力されるヘッダに異常がある場合などに出力されます(例として…スクリプトの改行コードがCR+LFになっている、スクリプト先頭の#!/usr/bin/perlなどのパスが違う、スクリプトとして実行される前に何かを出力している…などの場合に発生)が、それ以外の幾つかのエラーの場合でもこのエラーが出力されてしまうようです。
    suEXEC環境下で、パーミッションの設定が甘すぎる場合などにも、このエラーは出力されるようです。

パーミッションの設定

  1. suEXEC環境でのパーミッションの設定
    suEXEC環境のCGIやSSIは、そのドキュメントのオーナー(~user)の権限でアクセス、実行されるので基本的にオーナーに権限を与えれば良い…はず
    現在確認中ですが…数字の入っているものは確認済みです(ただし、僕のローカルの環境)
    用途MINMAXコメント
    htmlディレクトリ*01701なぜhtmlフォルダに実行権限が必要なのか…勉強不足で解りませんが、「ディレクトリの実行権限=そのディレクトリに下りると言う意味」なのかしら?とおもわれ…実際、読み取り権限無くてもアクセス可能です。
    CGIディレクトリ*01701下の階層がまったく見えなくなるしオーナーが編集出来ないのも不便なので
    htmlファイル*04604こちらは、読み取りできればOK
    CGI実行ファイル500704よく見ると Permission denied: mod_mime_magic: can't read `/home/user/public_html/cgi-bin/test.cgi'のエラーがerror.logに出力されているので実際には 504
    実行されないCGIライブラリ  
    読み込まれるだけのデータファイル  
    読み書きされるデータ  
    実行されるPHPスクリプト 604xを与えなくても動いた。そういうものらしい…
    SSIを含むhtmlファイル(shtml) 604基本的にhtmlファイルと同じ。但し <!--#include file="../filename.html" -->は不可でした(←suExec)
    勘違いしてしまいそうですがSSI以外の…例えば<img src="../images...">は問題ないです
    SSIでincludeされるhtmlファイル等*04604オーナー以外の読み出し権限はずしたら駄目でした。
    この辺りの「パーミッションの意味」についてはこちらにまとめてみました。

SSIを使用できるように設定

設定ファイルのOptionsにIncludesNoExecを追加する
# vi /etc/apache/httpd.conf
<Directory /home/*/public_html>ディレクティブの中あたりに Options IncludesNoExec ←追加 AllowOverride ・・・ ← Options を取り除く </Directory>
AddType text/html .shtml AddHandler server-parsed .shtml LoadModule includes_module /usr/lib/apache/1.3/mod_include.so ←コメントアウトをはずす

参考リンク

apache インストール

Apache 公式サイト

玄箱全般

Debian GNU/Linux 公式サイト

(C)2005 青山葵 (Aoi AoYama) / Blue Hibiscus Web Pages

[ 自宅サーバーWebRing |ID=265 前後5表示乱移動サイト一覧 ]