・パス
/home/username/public_html
・URL
http://IPアドレスorドメイン/~username/
http://ドメイン/
バーチャルドメインがなくとも利用できるように、パスとURLの関連は上記のようにした。
バーチャルドメイン用のユーザのuidは10001〜、gidは10000とする。グループ名は「user」。
/~username/でのアクセスはは、特定のドメインでのみ許可するものとする。(特定ドメイン以外はUserDir disabled)
Apache2をSuExec付きで再インストール。
# 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
追加
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
↓コメントアウトを外す
Include etc/apache22/extra/httpd-userdir.conf
これで下記へのアクセスが可能となる。
http://ドメイン/~username/xx.html
SuExec用にグループ作成
# vi /etc/group
user:*:10000:
user:*:10000:
こんな感じで追加。SeExecのMIN GIDはデフォルト(1000)なので1000以上であれば良い。
対象ユーザのGROUP IDを変更
# vipw
username:xxxxx:10001:10000::0:0:User &:/home/username:/bin/sh
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
↓下記変更
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>
<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
↓コメントアウトを外す
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
↓コメントアウトを外す
Include etc/apache22/extra/httpd-default.conf
# vi /usr/local/etc/apache22/extra/httpd-default.conf
#ServerTokens Full
ServerTokens Minimal