Ubuntu8.04のApacheは、/var/www 以下でないとsuEXECが動かない。
# /usr/lib/apache2/suexec -V -D AP_DOC_ROOT="/var/www" -D AP_GID_MIN=100 -D AP_HTTPD_USER="www-data" -D AP_LOG_EXEC="/var/log/apache2/suexec.log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=100 -D AP_USERDIR_SUFFIX="public_html"
apache2-suexec-customパッケージがあれば、ドキュメントルートを簡単に変更できるが、Ubuntu8.04にはないので以下の方法を試す。
apache2.2-commonのビルド
suexecはapache2.2-commonパッケージに含まれている。
# dpkg -S /usr/lib/apache2/suexec apache2.2-common: /usr/lib/apache2/suexec
ビルドの準備。
$ sudo apt-get build-dep apache2.2-common $ apt-get source apache2.2-common $ cd apache2-2.2.8/
fakerootがないと、ビルドでエラーが出るのでインストールする。
$ sudo apt-get install fakeroot
suexec-docrootを変更する。ここでは/homeとした。
$ vi debian/rules
--with-suexec-docroot=/home \
ビルドする。
$ dpkg-buildpackage
できたパッケージをインストールする。今回はファイルだけコピーすることにする。
$ sudo cp debian/apache2.2-common/usr/lib/apache2/suexec /usr/lib/apache2/
確認
# /usr/lib/apache2/suexec -V -D AP_DOC_ROOT="/home" -D AP_GID_MIN=100 -D AP_HTTPD_USER="www-data" -D AP_LOG_EXEC="/var/log/apache2/suexec.log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=100 -D AP_USERDIR_SUFFIX="public_html"
バージョンアップ時に更新されないようにaptでholdする。
# echo apache2.2-common hold | dpkg --set-selections
「--bind」オプションをつけてmount
「--bind 」オプションをつけて/homeを/var/www/homeにマウントする。
# mkdir /var/www/home # mount --bind /home /var/www/home
apacheのDocumentRootを変更する。
# vi /etc/apache2/sites-available/default
<Directory /var/www/home/user/public_html>
DocumentRoot /var/www/home/user/public_html
再起動時にmountされるようにfstabに記入する。
# vi /etc/fstab /home /var/www/home none bind 0 0
バイナリエディタでsuexecを修正
バイナリエディタでsuexecのバイナリの値を変更する。
suexecをコピーする。
# cd /usr/lib/apache2/ # cp -p suexec suexec.test
バイナリエディタで「/var/www」を「/home...(nullを3つ)」に修正。vimのバイナリモードを使った。
# vi -b suexec.test
修正前
00019a0: 69 64 20 75 69 64 3a 20 28 25 6c 64 29 0a 00 2d id uid: (%ld)..- 00019b0: 56 00 77 77 77 2d 64 61 74 61 00 2f 76 61 72 2f V.www-data./var/ 00019c0: 77 77 77 00 20 2d 44 20 41 50 5f 44 4f 43 5f 52 www. -D AP_DOC_R 00019d0: 4f 4f 54 3d 22 25 73 22 0a 00 20 2d 44 20 41 50 OOT="%s".. -D AP
修正後
00019a0: 69 64 20 75 69 64 3a 20 28 25 6c 64 29 0a 00 2d id uid: (%ld)..- 00019b0: 56 00 77 77 77 2d 64 61 74 61 00 2f 68 6f 6d 65 V.www-data./home 00019c0: 00 00 00 00 20 2d 44 20 41 50 5f 44 4f 43 5f 52 .... -D AP_DOC_R 00019d0: 4f 4f 54 3d 22 25 73 22 0a 00 20 2d 44 20 41 50 OOT="%s".. -D AP
確認する。
# ./suexec.test -V -D AP_DOC_ROOT="/home" -D AP_GID_MIN=100 -D AP_HTTPD_USER="www-data" -D AP_LOG_EXEC="/var/log/apache2/suexec.log" -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin" -D AP_UID_MIN=100 -D AP_USERDIR_SUFFIX="public_html"
修正したsuexecと入れ替える。
# mv suexec suexec.orig # mv suexec.test suexec
トラックバックURL