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/にアクセス
確認方法
- プロセスの起動状況確認
# 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を正常に動かすためには、次の方法かのうちどれかを選択する必要がある。
- suEXECの--suEXEC-userdir=public_html を変更
→コンパイルやmake…見送ります(ソースからのインストールは避けたいのと、suEXECの様な機能を素人の僕には弄れません)
- suEXECを実行させないようにする
→mv /usr/lib/apache/suexec /usr/lib/apache/suexec.bak 等としてsuexecをリネームしてロードさせないようにする(折角のsuEXECの機能を捨てるのか・・・?)
- 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>
- 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プログラムより下の階層にある必要がある」ようです(多分…)
エラーに関して
パーミッションの設定
- suEXEC環境でのパーミッションの設定
suEXEC環境のCGIやSSIは、そのドキュメントのオーナー(~user)の権限でアクセス、実行されるので基本的にオーナーに権限を与えれば良い…はず
現在確認中ですが…数字の入っているものは確認済みです(ただし、僕のローカルの環境)
用途 | MIN | MAX | コメント |
htmlディレクトリ | *01 | 701 | なぜhtmlフォルダに実行権限が必要なのか…勉強不足で解りませんが、「ディレクトリの実行権限=そのディレクトリに下りると言う意味」なのかしら?とおもわれ…実際、読み取り権限無くてもアクセス可能です。 |
CGIディレクトリ | *01 | 701 | 下の階層がまったく見えなくなるしオーナーが編集出来ないのも不便なので |
htmlファイル | *04 | 604 | こちらは、読み取りできればOK |
CGI実行ファイル | 500 | 704 | よく見ると Permission denied: mod_mime_magic: can't read `/home/user/public_html/cgi-bin/test.cgi'のエラーがerror.logに出力されているので実際には 504 |
実行されないCGIライブラリ | | |
読み込まれるだけのデータファイル | | |
読み書きされるデータ | | |
実行されるPHPスクリプト | | 604 | xを与えなくても動いた。そういうものらしい… |
SSIを含むhtmlファイル(shtml) | | 604 | 基本的にhtmlファイルと同じ。但し <!--#include file="../filename.html" -->は不可でした(←suExec) 勘違いしてしまいそうですがSSI以外の…例えば<img src="../images...">は問題ないです |
SSIでincludeされるhtmlファイル等 | *04 | 604 | オーナー以外の読み出し権限はずしたら駄目でした。 |
この辺りの「パーミッションの意味」については
こちらにまとめてみました。
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 公式サイト
[an error occurred while processing this directive]


