suexecの実行可能なディレクトリ制限って鬱陶しくない?
suexec使うからにはセキュリティ上必要な機能だっていうのはわかるんだけど、特にCentOSのhttpdパッケージに含まれるsuexecは「–with-suexec-docroot=/var/www」なんかでコンパイルしてあるもんだから、CentOSの流儀ではsuexecを使用する場合、DocumentRootを/var/www以下に設定しないといけない。
パッケージ如きにディレクトリ・レイアウトを強制されるのもムカつくのだが、じゃあ、最初からパッケージ使わずにソースからインストールすればいいじゃん?というのはごもっともなのだが、やっぱメンテナンス性を考えるとパッケージの利便性を選択してしまう。(昔は何かよくわからずにとりあえず最新を追いかけたかったからソースインストールばかりしてたけど)
だったら、せめてSRPMから再ビルドすれば?って話なのだが、もちょっとお手軽(?)に件の設定を変更したい。所詮、設定値なのだから。
ということで、ちょっと強引な方法を紹介する。
用意するものは
- suexec
- emacs
そう、
emacsをバイナリエディタとして使用して、バイナリに含まれる値を変更してしまおう。
具体的なやり方は以下の通りである。なお、もちろん動作については一切保証しないので自己責任で試してね。
まずは何か問題が発生してもすぐに切り戻せるようにsuexecをバックアップしよう。
# rpm -ql httpd | grep suexec
/usr/sbin/suexec
※suexecのバックアップ
# cd /usr/sbin
# cp -p suexec suexec.bk
suexecの現在の設定値を確認する。
-D AP_DOC_ROOT=”/var/www”
-D AP_GID_MIN=100
-D AP_HTTPD_USER=”apache”
-D AP_LOG_EXEC=”/var/log/httpd/suexec.log”
-D AP_SAFE_PATH=”/usr/local/bin:/usr/bin:/bin”
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX=”public_html”
#
そして、emacs登場。
# emacs suexec.bk

バイナリエディタとして使用するために「hexl-mode」としよう。
emacs上で「M-x hexl-mode」とする。

こんな感じ

CGI実行可能なトップディレクトリのパス(今回は /var/www)を検索する

カーソルを合わせて(画像の中の緑色の部分)

今回 /var/www を /home へ変更するとして、「/home」と入力

画像の例だと、/homewww となっているので、wwwの部分はnullにしよう。
emacs上で「M-x hexl-insert-hex-string」として

nullにしたい各文字毎に「00」を入力、
※ 画像中では www を null に変えたいので 「000000」と入力した

「/var/www」が「/home…」となったことを確認して保存( C-c C-s )すると下記のように聞かれるので「y」すると

conding systemを選べとか言われるので、バカヤロー、バイナリだこのやろーということで「no-conversion」と入力

無事保存出来たらemacsを終了しよう。

さて、動作確認のために以下のコマンドを実行すると
-D AP_DOC_ROOT=”/home”
-D AP_GID_MIN=100
-D AP_HTTPD_USER=”apache”
-D AP_LOG_EXEC=”/var/log/httpd/suexec.log”
-D AP_SAFE_PATH=”/usr/local/bin:/usr/bin:/bin”
-D AP_UID_MIN=500
-D AP_USERDIR_SUFFIX=”public_html”
あとは
# mv suexec suexec.orig
# mv suexec.bk suexec
# service httpd start
上記のようにsuexecを差し替えて適当に動作確認して下さい。suexecのログもちゃんと確認してね!




