方針
- パッケージを使って構築する
- 研究室共用ページはドキュメントルートに
- 個々人のページは/home/USER/public_html以下に
- CGIをSuExecで許す
- SSIも許す
Apache2のインストール
apache2-suexecだとドキュメントルートとユーザディレクトリを変更できない。そこで、apache2-suexec-customを利用する(参考:うまいぼうblog:debian apache2 suexec package)
% sudo aptitude install apache2 apache2-suexec-custom
/etc/apache2/suexec/www-data を編集し、ドキュメントルートとユーザディレクトリを変更する。
% cd /etc/apache2/suexec/ % sudo cp -p www-data www-data.org % sudo vi www-data
編集結果は以下のとおり
% diff www-data.org www-data 2c2 < public_html/cgi-bin --- >public_html
ユーザディレクトリの部分を変更。
SuExecを有効にする。
% sudo a2enmod suexec % sudo /etc/init.d/apache2 restart
DebianやUbuntuのApacheの設定
/etc/apache2で設定する。各種設定ファイルが sites-avaiable か mods-avaiable にあり、これを a2ensite, a2enmod, a2dissite, a2dismodのコマンドでこれらの設定ファイルを sites-enabledかmodts-enabled にシンボリックリンクする。これにより、選択された設定がApacheへ反映される。
設定ファイルを変更したり、siteやmodを付け加えた場合はApacheを再起動する。
% sudo /etc/init.d/apache2 restart
DocumentRootの設定
/etc/apache2/sites-available/default を編集する。
% cd /etc/apache2/sites-available/ % sudo cp -p default default.org % sudo vi default
編集結果は以下のとおり
% diff default.org default < Options Indexes FollowSymLinks MultiViews < AllowOverride None --- > Options ExecCGI MultiViews SymLinksIfOwnerMatch IncludesNoExec > AllowOverride All 16,22c16,22 < ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ < <Directory "/usr/lib/cgi-bin"> < AllowOverride None < Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch < Order allow,deny < Allow from all < </Directory> --- > #ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ > #<Directory "/usr/lib/cgi-bin"> > # AllowOverride None > # Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch > # Order allow,deny > # Allow from all > #</Directory>
方針
- DocumentRootは管理者しかいじらないので、.htaccessでの設定はすべて許可に(AllowOverride All)
- CGIやSSIもDocumentRootで使うのでcgi-binの設定はコメントアウト
- DocumentRootのOptionsは以下のとおり(参考:Apache2.2ドキュメントOptions)
- Indexesは外す(ディレクトリの中身が見えるのは良くない)
- CGI許可:ExecCGI
- MultiViews
- シンボリックリンクはオーナーが一緒の場合だけ許す:SymLinksIfOwnerMatch
- SSIを#exec コマンド と #exec CGI を除き許可: IncludesNoExec
% sudo a2enmod includes % sudo /etc/init.d/apache2 restart
ユーザディレクトリ
/etc/apache2/mods-available/userdir.confを編集
% cd /etc/apache2/mods-available/ % sudo cp -p userdir.conf userdir.conf.org % sudo vi userdir.conf
編集結果は以下のとおり。
% diff userdir.conf.org userdir.conf 7,15c7 < 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> --- > Options ExecCGI MultiViews SymLinksIfOwnerMatch IncludesNoExec
- AllowOverrideはデフォルトのまま(「FileInfo AuthConfig Limit Indexes」の上書きOK。Optionsの上書きは許さない)
- Limitは別にしなくて良いと思ったので削除(各自でやればよい)
- OptionsはIndexesを外し、ExecCGIを追加
% sudo a2enmod userdir % sudo /etc/init.d/apache2 restart
.cgiの拡張子でCGIスクリプトが動くようにする
/etc/apache2/mods-available/mime.conf を編集する。
% cd /etc/apache2/mods-available/ % sudo cp -p userdir.conf userdir.conf.org % sudo vi userdir.conf
編集結果は以下のとおり。
# diff mime.conf.org mime.conf 218c218 < #AddHandler cgi-script .cgi --- > AddHandler cgi-script .cgi 244c244 < AddOutputFilter INCLUDES .shtml --- > AddOutputFilter INCLUDES .shtml .html
- 拡張子が.cgiならばCGIスクリプトとして処理する
- SSIを有効にする拡張子として、.shtml と .htmlを指定する