suEXECを使用したいのですが、CentOSのApacheではデフォルトのドキュメントルートと同じ、/var/www
がsuEXECの実行可能なディレクトリ階層になります。
ただ、複数サイトもしくは複数ユーザーがいる場合、/home
以下をドキュメントルートにすることが多く、このままではsuEXECが動作しません。
バイナリを弄ったり、マウント機能で/var/www
以下と結びつけたり、ApacheをSourceからインストールするなど幾つか方法がありますが、今回は「RebuildしてRPMパッケージを作成、インストール」という方法にしました。
目次
環境
- CentOS 7.3(1611)※さくらのクラウド
- IUS版Apache 2.4.25
準備
以下の記事を参考にして、Rpmbuild(とその環境)とIUSリポジトリの追加を行います。
手順
1.yumdownloaderでApacheのSRPMをダウンロード、展開します。
注意
ダウンロード以降、Rebuild完了までは可能な限り一般ユーザー権限で行うことをオススメします。
cd ~/rpmbuild/SRPMS/
yumdownloader --source --enablerepo=ius httpd24u
rpm -ivh httpd24u-2.4.25-2.ius.centos7.src.rpm
※yumdownloaderコマンドは、CentOS 7では「yum-utils」パッケージに含まれています。
2.SPECファイルを変更します。
全体のドキュメントルートを/home
にするか、suEXEC用のドキュメントルートを用意します。
今回、影響を最小限にするためにsuEXEC用ドキュメントルートを用意しました。
cd ../SPECS/
vi httpd24u.spec
# 追記
%define suexec_docroot /home
# 書換
--with-suexec-docroot=%{suexec_docroot} \
3.Rebuildするのに足りないパッケージをインストールします。
環境によっても異なりますが、ほぼデフォルト状態の筆者環境では以下のものが必要でした。
# 足りないパッケージ
sudo yum --enablerepo=epel,ius install apr15u-devel apr15u-util-devel autoconf xmlto zlib-devel libselinux-devel lua-devel pcre-devel libnghttp2-devel systemd-devel openssl-devel libxml2-devel
# Rebuild実行時に必要
sudo yum install gcc
このままRebuildを実行しても以下のようなエラー(コメントのエラー?)が出ますので、epel-rpm-macrosをインストールします。
ファイルの処理中: httpd24u-devel-2.4.25-2.ius.el7.centos.x86_64
エラー: ファイルは "/" から始まらなければなりません: %{rpmmacrodir}/macros.httpd
%{rpmmacrodir}/macros.httpd
- Use correct macros directory via %%rpmmacrodir (from epel-rpm-macros)
sudo yum --enablerepo=epel install epel-rpm-macros
4.Rebuild開始
rpmbuild -bb --clean httpd24u.spec
まとめ
以上でsuEXECが/home
以下で動作するApacheのRPMパッケージが作成できました。
ただ、それ以前にsuEXECを/home
以下で動作可能にするのがいいことなのか、いいことだとしても上記方法でいいのかという疑問点もあります。
なので、お試しいただく場合には自己責任ということでお願いしますm(_ _)m
補足
CGI(Perl)を使用しない(PHP Only)ならsuEXEC自体を無効化してもいいかなと思います。
(PHPはphp-fpm経由にすれば、suEXECのような動作にできるので)
(PHPはphp-fpm経由にすれば、suEXECのような動作にできるので)