[PR]

[PR]

はじめに

このページでは、httpdサービス(apache)を異なる設定で複数起動させる方法を紹介する。また、serviceやchkconfigに対応し、通常のapacheと同様の手順で起動/停止が行える簡単な設定方法も紹介する。OSはCentOS6.3を前提にしている。

背景

番組予約システムepgrecでは、apacheにシェルのコマンド実行権限を与える必要があり*1、セキュリティが低下する*2
公開サーバーでepgrecを導入する場合、このセキュリティの低下を回避する対策が必要となる。

対策方法

公開サーバーのセキュリティを確保しつつ、epgrecを導入するにはいくつかの方法がある。

  1. 公開サーバーと録画サーバーを分ける
  2. epgrecを仮想サーバーで運用する
  3. apacheを異なる権限で複数起動する

1はシンプルな方法で、2台目サーバーの調達コストや電気代が必要になり、また、管理の手間も増えるし、これができるならば何も悩む必要はない。2は低コストだが、epgrecのためだけに仮想サーバー1台分のメモリとディスクを消費することになるため、少しもったいない。
3は公開用apacheの他に、もう1つプライベート用apacheを起動させる。設定をいくつか書き換えるだけで比較的簡単で、なおかつ必要なリソースはほんの少しのメモリで済むため、ここでは3の方法について説明する。

プライベート用apacheを起動する方法

CENTOSでは、apacheの起動に以下の設定ファイルが関係している。

  • /etc/init.d/httpd
  • /etc/sysconfig/httpd
  • /usr/sbin/apachectl
  • /etc/httpd(ディレクトリ配下。httpd.conf等)

ここから、それぞれのファイルの設定手順を説明する。 以下、rootで作業する

$su -

init.d内の設定ファイルの作成

#cp -p /etc/init.d/httpd /etc/init.d/phttpd

phttpdを編集する。

if [ -f /etc/sysconfig/phttpd ]; then <httpdをphttpdに>
        . /etc/sysconfig/phttpd    <httpdをphttpdに>
fi

apachectl=/usr/local/sbin/apachectl </usr/sbinを/usr/local/sbinに>
httpd=${HTTPD-/usr/sbin/httpd}
prog=phttpd             <httpdをphttpdに>
pidfile=${PIDFILE-/var/run/httpd/phttpd.pid} <httpdをphttpdに>
lockfile=${LOCKFILE-/var/lock/subsys/phttpd} <httpdをphttpdに>
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}

sysconfig内の設定ファイルの作成

#cp -p /etc/sysconfig/httpd /etc/sysconfig/phttpd

phttpdを2ヶ所編集する。

OPTIONS="-f /etc/httpd/conf/phttpd.conf"
PIDFILE=/var/run/httpd/phttpd.pid

apachectlの作成

apachectlを/usr/local/sbinにコピーする。

#cp -p /usr/sbin/apachectl /usr/local/sbin/

コピーしたapachectlを編集する。

STATUSURL="http://localhost:8080/server-status" <":8080"を追加>
if [ -r /etc/sysconfig/phttpd ]; then <httpdをphttpdに>
   . /etc/sysconfig/phttpd <httpdをphttpdに>
fi

httpd.confの作成

#cp -p /etc/httpd/conf/httpd.conf /etc/httpd/conf/phttpd.conf

phttpd.confは使用者によって様々な設定になるので、ここではepgrecに関する項目だけピックアップする。

PidFile run/phttpd.pid
Listen 8080 <ポートは公開用apacheと違う番号に設定する>
Include conf.d/php.conf <不要な設定ファイルは読み込まず、php.confだけを指定>
User jack <ここで一般のログインユーザーを指定する。無い場合はユーザーを作る>
Group jack
DocumentRoot "/var/www/phtml" <外部用apacheと異なるフォルダを指定する>
ErrorLog logs/error2_log     <ログファイルの名前を変える>
CustomLog logs/access2_log   <ログファイルの名前を変える>
#epgrecファイルの設定
<Directory "/var/www/phtml/epgrec">
   #AuthType Basic <パスワードをかける場合はこの4行の#を消す。公開用サーバーでは必ずパスワードをかける事>
   #AuthName "Private"
   #AuthUserFile /etc/httpd/conf/htpasswd
   #Require valid-user
   AddHandler php5-script .php <phpファイルの動作を指定>
   AddType text/html .php <phpファイルの動作を指定>
   DirectoryIndex index.php
   Options FollowSymLinks
   AllowOverride None
</Directory>

これでapacheの設定は完了した。

ついでにphpのセキュリティも高くする

CENTOSのデフォルト設定ではWebで公開している全ディレクトリに対して、PHPファイルの実行を許可している。PHPが必要なディレクトリで個別の設定が必要になるが、セキュリティを確保するためPHPの実行を制限する。

#vi /etc/httpd/conf.d/php.conf
#AddHandler php5-script .php <この3行をコメントアウトする>
#AddType text/html .php
#DirectoryIndex index.php

apacheの試運転

これまでの設定で問題が無いかどうかの確認のため、プライベート用apache(phttpd)を起動してみる。

#service phttpd configtest
Syntax OK <これが表示されたらphttpd.confはOK>
#service phttpd start
phttpdを起動中:     [OK]

試しに、クライアントマシンからブラウザでサーバーに接続してみる。
接続先URL:http://192.168.1.2:8080/server-status (IPアドレスはサーバーのローカルIP)
ブラウザにApache Statusが表示されれば、サーバーは正常に稼働している。
停止させる場合は

#service phttpd stop
phttpdを停止中:     [OK]

自動起動設定

init.dの中にphttpdを作ったので、自動起動にも対応可能となっている。必要に応じて自動起動の設定をしておく。

#chkconfig phttpd on

epgrecの配置

apacheの設定が完了したので、この環境に沿ってepgrecを配置する。 phttpd.confに指定したとおりの場所にepgrecを配置させる。

#mkdir /var/www/phtml

これまでepgrecを運用していた場合は、epgrecをフォルダごと移動させる。

#mv /var/www/html/epgrec /var/www/phtml/

epgrecフォルダの所有者を設定する。

#chown -r jack:jack /var/www/phtml/epgrec

これからepgrecを構築する場合は、phtmlフォルダ配下にepgrec環境を構築させる。番組取得用cronの更新も忘れずに。

これでapacheを異なる設定で複数起動させることができる。


コメント欄

最新の10件を表示しています。 コメントページを参照

  • 1 -- 1?
  • 1 -- 1?
お名前:

*1 タイマー予約にatコマンドを使用するため
*2 PHPやCGIの脆弱性を突かれた場合、コマンド実行権限が簡単に奪取されてしまうため

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2014-04-02 (水) 00:28:44 (3685d)