QNAP NASのマルチメディアステーションのページを非公開にする

QNAP NASのWebサーバ構築で躓いたメモです。

QNAP NASにはapacheが入っており、
管理画面のボタンクリックでWebサーバを開設できます。
面倒な設定ファイルの書換えが不要なところが魅力です。

しかし、高機能が故にやや不便なところもあります。
たとえば、自分のホームページを外部に公開したいとき、

 http://自分のドメイン

みたいなURLで設置すると思います。
QNAP NASはデフォルトで以下ページが有効になっています。

 http://自分のドメイン/msv2
 http://自分のドメイン/musicstation
 http://自分のドメイン/photo
 http://自分のドメイン/photostation
 http://自分のドメイン/video

実際にこれらのページにアクセスすると、
以下のようなログインページが表示されます。

photo-login

認証をかけているとはいえ、公の場にログイン画面を晒すのは
セキュリティ上好ましくありません。
このログイン画面はマルチメディアステーションを無効にすることで
表示されなくなります。

ms-disablechk

しかし、今度は「無効だよ!」というページが表示されてしまいます。

photo-disable

はて、どうすれば良いのでしょうか・・・

上記の画面は、/etc/config/apache/extra下の
apache-msv2.conf、apache-musicstation.conf、apache-photo.conf、apache-video.confに
エイリアスとして定義されています。

<IfModule alias_module>
        Alias /photostation "/mnt/ext/opt/photostation_pub"
        <Directory "/mnt/ext/opt/photostation_pub">
                AllowOverride All
                Order allow,deny
                Allow from all

これらのファイルは、/etc/config/apache/apache.confの
最後でインクルードされています。

Include /etc/config/apache/extra/apache-msv2.conf
Include /etc/config/apache/extra/apache-musicstation.conf
Include /etc/config/apache/extra/apache-photo.conf
Include /etc/config/apache/extra/apache-video.conf

したがって、これらのインクルード行をコメントアウトすれば
エイリアスで定義したページは表示されなくなります。

#Include /etc/config/apache/extra/apache-msv2.conf
#Include /etc/config/apache/extra/apache-musicstation.conf
#Include /etc/config/apache/extra/apache-photo.conf
#Include /etc/config/apache/extra/apache-video.conf

apacheの再起動は、/etc/init.d/Qthttpd.shをrestartすることで行います。

/etc/init.d/Qthttpd.sh restart

しかし、そうすると/etc/config/apache/apache.confの末尾に
インクルード行が自動で追加されてしまうのです。

#Include /etc/config/apache/extra/apache-msv2.conf
#Include /etc/config/apache/extra/apache-musicstation.conf
#Include /etc/config/apache/extra/apache-photo.conf
#Include /etc/config/apache/extra/apache-video.conf
Include /etc/config/apache/extra/apache-msv2.conf
Include /etc/config/apache/extra/apache-musicstation.conf
Include /etc/config/apache/extra/apache-photo.conf
Include /etc/config/apache/extra/apache-video.conf

上記は/etc/init.d/Qthttpd.sh内でインクルード行がなかったら
自動で追加する処理が実行されるためです。

そこで、この処理を強制的に無効にします。
Qthttpd.sh自身は起動時にどこからもなく
デフォルトのファイルに戻ってしまうので、
必要なら起動時に修正を加えたQthttpd.shで上書きします。

前置きが長くなってしまいましたが手順をまとめます。

1.apache.confの書換え
万一に備え、まずapache.confのバックアップを取ります。

cp -p /etc/config/apache/apache.conf /etc/config/apache/apache.conf.bak

/etc/config/apache/apache.confを開き、

vi /etc/config/apache/apache.conf

末尾のhttpd-vhosts-user.conf以外のInclude~の行をコメントアウトします。

Include /etc/config/apache/extra/httpd-vhosts-user.conf
#Include /etc/config/apache/extra/apache-msv2.conf
#Include /etc/config/apache/extra/apache-musicstation.conf
#Include /etc/config/apache/extra/apache-photo.conf
#Include /etc/config/apache/extra/apache-video.conf

2.Qthttpd.shの書換え
これも念のためバックアップを取ります。

cp -p /etc/init.d/Qthttpd.sh /etc/init.d/Qthttpd.sh.bak

そして、Qthttpd.sh内の以下行をコメントアウトします。

        if [ "x${MSV2_SUPPORT}" = xTRUE ] && [ -f /usr/bin/ffmpeg ]; then
                /bin/grep ffmpeg.so ${PHP_INI} 1>>/dev/null 2>>/dev/null
                [ $? != 0 ] || /bin/sed -i "/extension = ffmpeg.so/d" ${PHP_INI} 2>/dev/null 1>/dev/null
#               /bin/grep "^Include" ${APACHE_CONF} | /bin/grep "apache-msv2.conf" 1>>/dev/null 2>>/dev/null
#               if [ $? != 0 ] && [ -f /etc/config/apache/extra/apache-msv2.conf ]; then
#                       /bin/echo "" >> ${APACHE_CONF}
#                       /bin/echo "Include /etc/config/apache/extra/apache-msv2.conf" >> ${APACHE_CONF}
#               fi
#               [ -f /etc/config/apache/extra/apache-msv2.conf ] || /bin/sed -i "/^Include.*apache-msv2.conf/d" ${APACHE_CONF} 2>/dev/null 1>/dev/null
#               /bin/grep "^Include" ${APACHE_CONF} | /bin/grep "apache-musicstation.conf" 1>>/dev/null 2>>/dev/null
#               if [ $? != 0 ] && [ -f /etc/config/apache/extra/apache-musicstation.conf ]; then
#                       /bin/echo "Include /etc/config/apache/extra/apache-musicstation.conf" >> ${APACHE_CONF}
#               fi

#               /bin/grep "^Include" ${APACHE_CONF} | /bin/grep "apache-photo.conf" 1>>/dev/null 2>>/dev/null
#               if [ $? != 0 ] && [ -f /etc/config/apache/extra/apache-photo.conf ]; then
#                       /bin/echo "Include /etc/config/apache/extra/apache-photo.conf" >> ${APACHE_CONF}
#               fi
        if [ x"$VS_QPKG" = xTRUE ]; then
                /bin/grep "^Include" ${APACHE_CONF} | /bin/grep "apache-video.conf" 1>>/dev/null 2>>/dev/null
#               if [ $? != 0 ] && [ -f /etc/config/apache/extra/apache-video.conf ]; then
#                       /bin/echo "" >> ${APACHE_CONF}
#                       /bin/echo "Include /etc/config/apache/extra/apache-video.conf" >> ${APACHE_CONF}
#               fi

3.apacheの再起動
Qthttpd.shをリスタートします。

/etc/init.d/Qthttpd.sh restart

これでマルチメディアステーションのページが表示されなくなります。
再起動後もこの設定を保ちたい場合は
以降の手順を実行します。

4.ファイルをHDDに退避する
Qthttpd.shをHDD側にコピーします。
コピー先はHDD上のディレクトリであればどこでも構いません。

cp -p /etc/init.d/Qthttpd.sh /share/MD0_DATA/.qpkg/autorun/Qthttpd.sh

5.起動時の設定
起動時に実行されるシェルに以下処理を追加します。

vi /share/MD0_DATA/.qpkg/autorun/autorun.sh
cp -p /share/MD0_DATA/.qpkg/autorun/Qthttpd.sh /etc/init.d/
/etc/init.d/Qthttpd.sh restart

これで、OSの再起動後も設定が有効になります。
実際にマルチメディアステーションのページにアクセスすると・・・

photo-notfound

このように非表示になることが確認できます。
ひとまず目的は達成されました。

他にもっといい方法があるかもしれませんが、
ご参考にしていただければ幸いです。

■参考文献
Apache / QTHTTPD issues on TS209