HOME / コンピュータTips / Solaris / SolarisでWikiPlus用に(Linuxに似た)のSuExecを作る

Date: 2008/10/25 |  このエントリーをはてなブックマークに追加  |  Tags: OpenSolaris, Solaris, SuExec

OpenSolaris/SolarisでWikiPlus用(Linuxに似た)のSuExecを作る

SuExecはセキュリティの関係上、定数でデータが入っているため

  • OSのポリシーに深く依存する

ことは、昨日のブログで掲載したとおり。

WikiPlusのディレクトリポリシーは微妙にLinuxの流儀(RHELの流儀?)を継承していることもあり、SolarisではSuExecがうまく動きません。

そこで、SuExecをうまく動かすためには、Linuxと似たような設定で動くsuexecをコンパイルしなくてはならないことになります。

まずは。同一バージョンのapacheのソースコードを拾ってきて、どこかに展開します。

次に、Solarisに入ってるapacheのコンパイル環境をみます。これには、下記のファイルを参照すればOKです。

/usr/apache2/2.2/build/config.nice

これを元にビルド用のスクリプトを書くことになります。ところが、レイアウトの設定が配布されるApacheについておらず・・・

"--enable-layout=Solaris-Apache2"

そこで下記のファイルを見て、レイアウトを作ります。

/usr/apache2/2.2/build/config_vars.mk

作ったレイアウトはこんなかんじです。

#   Solaris 10 / OpenSolaris Layout
<Layout Solaris-Apache2>
    prefix:        /usr/apache2/2.2
    exec_prefix:   ${prefix}
    bindir:        ${exec_prefix}/bin
    sbindir:       ${exec_prefix}/bin
    libdir:        ${exec_prefix}/lib
    libexecdir:    ${exec_prefix}/libexec
    mandir:        ${exec_prefix}/man
    sysconfdir:    /etc/apache2/2.2
    datadir:       /var/apache2/2.2
    installbuilddir: ${exec_prefix}/build
    errordir:      ${datadir}/error
    iconsdir:      ${datadir}/icons
    htdocsdir:     ${datadir}/htdocs
    manualdir:     ${datadir}/manual
    cgidir:        ${datadir}/cgi-bin
    includedir:    ${exec_prefix}/include
    localstatedir: ${prefix}
    runtimedir:    /var/run/apache2/2.2
    logfiledir:    ${datadir}/logs
    proxycachedir: ${datadir}/proxy
</Layout>

これを、config.layoutの後ろに追加します。

BUILDには、先に、srclib/aprとsrclib/apr-utilをコンパイルする必要がありますが、ここでの目的は「Apacheをインストールする」ことではなくて、「suexecをインストールする」ことです。これに付随してapacheのコンパイルが必要になるため、仕方が無くコンパイルするだけです。

というわけで、ワークディレクトリにのみapr/apr-utilを入れればいいわけですから、結果的にこういうスクリプトになります。

#! /bin/sh
#
# Created by configure

CC="/opt/SUNWspro/bin/cc"; export CC
CFLAGS="-xO3 -xspace -Xa  -xildoff -xc99=all  -DSSL_EXPERIMENTAL -DSSL_ENGINE"; export CFLAGS
GREP=ggrep ;export GREP

PWD=`pwd`
WORKDIR={PWD}-worker
echo INSTALL TOOLS TO ${WORKDIR}
rm -rf ${WORKDIR}

cd srclib/apr
./configure --prefix=${WORKDIR}
gmake || exit
gmake install

echo ============================================
echo
echo Compiled  apr
echo 
echo ============================================

# Build and install apr-util 1.2
cd ../apr-util
./configure --prefix=${WORKDIR} --with-apr=${WORKDIR}
gmake || exit
echo ============================================
echo
echo Compiled  apr-util
echo 
echo ============================================



# Configure httpd
cd ../../
"./configure" \
"--prefix=/usr/apache2/2.2" \
"--enable-layout=Solaris-Apache2" \
"--enable-mods-shared=all" \
"--enable-so" \
"--enable-suexec" \
"--with-suexec-caller=webservd" \
"--with-suexec-userdir=htdocs" \
"--with-suexec-docroot=/var/www" \
"--with-suexec-uidmin=1000" \
"--with-suexec-gidmin=1000" \
"--enable-proxy" \
"--enable-proxy-connect" \
"--enable-proxy-ftp" \
"--enable-proxy-http" \
"--enable-proxy-ajp" \
"--enable-proxy-balancer" \
"--enable-cache" \
"--enable-file-cache" \
"--enable-disk-cache" \
"--enable-mem-cache" \
"--enable-deflate" \
"--enable-cgid" \
"--enable-cgi" \
"--enable-ssl" \
"--with-ssl=/usr/sfw" \
"--with-apr=srclib/apr" \
"--with-apr-util=srclib/apr-util" \
"--with-mpm=prefork" \
"CC=/opt/SUNWspro/bin/cc" \
"CFLAGS=-xO3 -xspace -Xa -xildoff -xc99=all -DSSL_EXPERIMENTAL -DSSL_ENGINE" \
"$@"

apacheをインストールする訳じゃないので、ldapに関しては削除(笑)今回はコンパイル環境を作るのが面倒だったため。

あとはBUILDスクリプトを実行し、

gmake

すれば、出来上がり。下記にsuexecがあります。

support/suexec

確認

./support/suexec -V
 -D AP_DOC_ROOT="/var/www"
 -D AP_GID_MIN=1000
 -D AP_HTTPD_USER="webservd"
 -D AP_LOG_EXEC="/var/apache2/2.2/logs/suexec_log"
 -D AP_SAFE_PATH="/usr/local/bin:/usr/bin:/bin"
 -D AP_UID_MIN=1000
 -D AP_USERDIR_SUFFIX="htdocs"

OKっぽいですね。

あとは/usr/apache2/2.2/binあたりにコピー。

cp support/suexec /usr/apache2/2.2/bin
chmod 4711/usr/apache2/2.2/bin/suexec

こんなになります。

# ls -l /usr/apache2/2.2/bin/suexec
-rws--x--x   1 root     bin        18540 Oct 25 01:52 /usr/apache2/2.2/bin/suexec

apacheは念のため、リスタートします。

動作チェックは、

error_log
suexec_log
ssl_request_log

あたりで何とかなるはずです。

インストールしている環境に何もないと、apacheコンパイル中、止まると思います。内容をよく見て

pkg search -r ファイル名

でやれば、インストールが必要なパッケージがわかるはずです。


コンピュータTips/Solaris

Recent Updates