当サイトはプロモーションが含まれています。

ApacheをRebuildしてRPMパッケージを作成する

サーバー

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のような動作にできるので)