August 04, 2006

Apache2.2でSuexec設定

あまり真面目に設定したことがなかったSuExecをApache2.2で使ってみたメモ。

・パス
 /home/username/public_html

・URL
 http://IPアドレスorドメイン/~username/
 http://ドメイン/

バーチャルドメインがなくとも利用できるように、パスとURLの関連は上記のようにした。
バーチャルドメイン用のユーザのuidは10001〜、gidは10000とする。グループ名は「user」。
/~username/でのアクセスはは、特定のドメインでのみ許可するものとする。(特定ドメイン以外はUserDir disabled)


Apache2をSuExec付きで再インストール。
# cp /usr/local/etc/apache22/ (書き間違い。MItukasaさんのご指摘で修正。8/4)
# cd /usr/ports/www/apache22/
# make show-options
# make clean
# make deinstall
# make WITH_PROXY_MODULES=yes WITH_SUEXEC=yes SUEXEC_DOCROOT=/home
# make reinstall


SuExecを有効にする。
# vi /usr/local/etc/apache22/httpd.conf
追加
LoadModule suexec_module libexec/apache22/mod_suexec.so


ユーザディレクトリ(/home/*/public_html)へのアクセス設定を有効にする。
# vi /usr/local/etc/apache22/httpd.conf
↓コメントアウトを外す
Include etc/apache22/extra/httpd-userdir.conf

これで下記へのアクセスが可能となる。
http://ドメイン/~username/xx.html


SuExec用にグループ作成
# vi /etc/group
user:*:10000:

こんな感じで追加。SeExecのMIN GIDはデフォルト(1000)なので1000以上であれば良い。

対象ユーザのGROUP IDを変更
# vipw
username:xxxxx:10001:10000::0:0:User &:/home/username:/bin/sh


public_htmlの権限調整
# chown username:user /home/username/public_html


いろいろ設定。
# vi /usr/local/etc/apache22/extra/httpd-userdir.conf
↓下記変更
AllowOverride All
Options ExecCGI MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec


バーチャルディレクティブ用のファイルを作る。
(httpd.confに「Include etc/apache22/Includes/*.conf」があれば勝手に読み込まれます)
# vi /usr/local/etc/apache22/Includes/virtual.conf
<VirtualHost *:80>
SuexecUserGroup username user
ServerName test.example.com
UserDir disabled
ServerAdmin admin@test.example.com
DocumentRoot /home/username/public_html
ErrorLog /var/log/httpd-test.example.com-error.log
CustomLog /var/log/httpd-test.example.com-access.log combined
</VirtualHost>


httpd.conf読み直し。
# /usr/local/sbin/apachectl graceful



※httpd.confのデフォルト設定では「/」へのアクセスがdenyされているため、
 UserDir(/usr/local/etc/apache22/extra/httpd-userdir.conf)にて、
 「/home/*/public_html」に対するアクセス設定を許可しているわけですが、
 VirtualHostディクティブに「DocumentRoot 、/usr/home/username/public_html」
 などと書くと、パスが違うと見なされて動作しません。

 当初これに気づかなかったため、何日もerror-logの
 client denied by server configuration:を眺めることになりました。orz


参考
http://www.fkimura.com/apache10.html
http://www.dadd9.com/tech/networkadmin_01.html
http://www.aconus.com/~oyaji/www/apache_linux_suexec.htm
http://www.toshikazu.org/archives/000009.html
http://mm.apache.or.jp/pipermail/newbie/2003-September/004011.html



■その他Apacheの設定。

エラー表示を有効にしておく。
# vi /usr/local/etc/apache22/httpd.conf
↓コメントアウトを外す
Include etc/apache22/extra/httpd-multilang-errordoc.conf


Apache情報の隠蔽
# vi /usr/local/etc/apache22/extra/httpd-userdir.conf
↓コメントアウトを外す
Include etc/apache22/extra/httpd-default.conf

# vi /usr/local/etc/apache22/extra/httpd-default.conf
#ServerTokens Full
ServerTokens Minimal



この記事へのトラックバックURL

http://app.blog.livedoor.jp/cpiblog00035/tb.cgi/50534970
この記事へのコメント
一番最初の
> cp /usr/local/etc/apache22/
は、
 cd /usr/ports/www/apache22/
のような気がする……。

2.0と2.2でやっぱり設定とか違うような感じですね。
いまだに2.0使ってますが、Includeなんて使った記憶ないです。
Posted by Mitukasa at August 05, 2006 11:11
みつさん、コメントありがとうございます。
ご指摘の通り間違いですねw。たぶんコピペミスです。修正しました。ありがとうございます^^

普段は1.3系を使っているので少し新鮮です。
2.2では、httpd.confは小さめになっていて、
様々な設定がextraディレクトリ以下の別ファイルに切り出されていました。
これらのファイルをIncludeで読み込む記述をコメントアウトしたり外したりすることで簡単に設定を切り替えられるようになっているようです。

慣れれば使いやすそうです。
Posted by Launcelot at August 05, 2006 16:21