Go to TOP Page
Google:


□Postgresql と ssl でバンバンしよう


○少しだけでも安全に

今更・・・っつー気がしなくもないでつが、Postgresql と ssl で Port:443 でバンバン する DB を作ってみようと言うものでつ。
どーせなら、 Security Update っつー事で、全部最新版にしてしまえって事で。

○install されていれば望ましいもの

httpd://www.sunfreewware.com/ アタリから pkg を ダウンしてきて pkgadd しちゃってください。
source から build してもおk。

./configure の option によっては、いらないものもあるので、そのアタリは 良きに計らってくらさい。

んで、本題の source は・・・・
2009/03/17 日現最新 & 必要な source は下記の通り。

GNU Readline があると、pgsql command のヒストリが使えるようになりまつ。
install しておいた方が良いでしょうってことで。ってゆーか、PostgreSQL では必須だそうだ(^^;。
gd と libintl は php で必須ラシイ。
php の configure 時に libintlso.8 がないよってゆわれたら、libintl を pkgadd とかしておいてね。

source を get したら、次は compile。
Build の順番に規則性があるよ。
順番にいってみようっ!


□Compile & Build


ライブラリの install

readline install

必須の readline(^^;)。
install は、

で、おk。

gd install

gd の install もカンタン。

で、おk。

libintl install

libintl の install もカンタン。
source から build しよーと思ったけど、pkgadd で済ませてしまいまつた。
pkgadd 中に "y" とか聞いてくるので、良きに答えてくだされ。

で、おk。


OpenSSL install

library を shared する option を付けたダケ。
default では、 /usr/local/ssl に install されるよ。

処理が終わったら /usr/local/ssl に install されていることを確認してくらさい。


PostgreSQL install

PostgreSQL 用 user の追加

PostgreSQL を起動 & 運用する専用の user & group が必要です。
/etc/passwd と /etc/shadow、/etc/group を vi で直接追加しても良いでつし、 /bin/useradd、 /bin/groupadd しても良いでしょう。
user と group は任意の名前でおk。
ウチでは、user:pgsql,group:pgsql にしていまつ。
user を作ったら、password の設定を忘れずにね。
install 先のレポジトリに /export/home/pgsql を指定しましたが、他のところでもおkでつ。
default だと、/usr/local/pgsql でつ。
shell も好みに応じて csh や bash でもおk。

PostgreSQL ユーザの環境設定

今回は pgsql ユーザの shell を /bin/sh にしまつたので、Born Shell 向けの 環境設定方法でつ。

pgsql 環境設定(Born shell)
PS1="`/usr/ucb/whoami`@`/usr/bin/hostname`% "
PGHOME=${HOME}
PGLIB=${PGHOME}/lib
PGDATA=${PGHOME}/data
MANPATH=${MANPATH}:${PGHOME}/man
PATH=/bin:/usr/local/bin:/usr/ccs/bin:/usr/ucb:${PGHOME}/bin

export PGHOME PGLIB PGDATA PATH MANPATH

最低限、こんなトコ。
あと、compiler とか、 make とか使うので、PATH にそーゆーコマンドの PATH 張ってありまつ。
このアタリは開発環境に合わせて変えてくらさい。
その他、PS1 でプロンプト設定しておりマス。
必要に応じて他の環境変数を設定して下され。
csh とか bash をご利用の場合は、Born shell の設定を参考に

そーゆー設定しておいて(^^;)

PostgreSQL の Build

pgsql ユーザで compile & install するので、 ${HOME} に postgresql-8.3.6.tar.gz を cp しておいて。
option の prefix=/export/home/pgsql で install 先のレポジトリを指定しているよ。

make が終わったらチェックしてみましょう。
current は、そのままで、

make 時のような表示 & チェックのメッセージが出て、数分後に

make check
=======================
All 114 tests passed.
=======================

とかってメッセージが出ればおk。
最後に install して、DataBase を格納する directory を作っておしまい。

DataBase 初期化

データベース初期化して、default charactor set と locale を指定します。

DataBase 初期化
The files belonging to this database system will be owned by user "pgsql".
This user must also own the server process.

The database cluster will be initialized with locale C.

creating directory locale=C ... ok
creating directory locale=C/global ... ok
creating directory locale=C/pg_xlog ... ok
creating directory locale=C/pg_xlog/archive_status ... ok
creating directory locale=C/pg_clog ... ok
creating directory locale=C/pg_subtrans ... ok
creating directory locale=C/pg_twophase ... ok
creating directory locale=C/pg_multixact/members ... ok
creating directory locale=C/pg_multixact/offsets ... ok
creating directory locale=C/base ... ok
creating directory locale=C/base/1 ... ok
creating directory locale=C/pg_tblspc ... ok
selecting default max_connections ... 100
selecting default shared_buffers ... 1000
creating configuration files ... ok
creating template1 database in locale=C/base/1 ... ok
initializing pg_authid ... ok
enabling unlimited row size for system tables ... ok
initializing dependencies ... ok
creating system views ... ok
loading pg_description ... ok
creating conversions ... ok
setting privileges on built-in objects ... ok
creating information schema ... ok
vacuuming database template1 ... ok
copying template1 to template0 ... ok
copying template1 to postgres ... ok

WARNING: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the -A option the
next time you run initdb.

Success. You can now start the database server using:

postmaster -D locale=C
or
pg_ctl -D locale=C -l logfile start

こんなメッセージが出ればおk。 起動スクリプトも作ってしまいましょう。

起動スクリプトの一例
#!/bin/sh
#
# Startup script for PostgreSQL
#
# description: postgresql
PGSQL=/export/home/pgsql
export PGSQL

if [ ! -d ${PGSQL} ]; then
    echo "not installed PostgreSQL\n"
    exit 0
fi

case "$1" in
    start)
        echo "Start PostgreSQL\n"
        su - pgsql -c "pg_ctl -o \"-S -i\" start"
        ;;

    stop)
        echo "Shutdown PostgreSQL\n"
        su - pgsql -c "pg_ctl stop"
        ;;

    restart)
        echo "Restart PostgreSQL\n"
        $0 stop
        $0 start
        ;;

    *)
        echo "Usage: $0 {start|stop|restart}"
        exit 1
esac
exit 0

中身は実際の環境に合わせて良さげに変更してくらさい。
んで、

アタリに cp されるが良かろう
Run Level は root の好みに応じて変更してくらさい。
Run Level ってなぁに?って場合は、

こっそりぐぐって。

スクリプトを cp したら起動しましょう。

んで、process を見てみると・・・
/usr/bin/postmaster -S -i アタリが動いているハヅ。
ps -ef | grep sql してみて。
手動で起動した場合は、 password を聞かれたけど、OS を reboot した場合は、パスワードは聞いてこないハヅだ。
一回、reboot して試してみて。

動作確認

ここまできたら、テーブルが見れるか確認してみよう。
初期化がきちんとできていれば、テンプレートができているハヅ。

こんなテーブルが見えませんか?

初期化直後の動作確認
      List of databases
   Name    | Owner | Encoding
-----------+-------+----------
 postgres  | pgsql | EUC_JP
template0 | pgsql | EUC_JP
template1 | pgsql | EUC_JP
(3 rows)

log の設定

./data/postgresql.conf に書き込まれています。
vi とかで開いてください。
書き換えたとこだけ抜粋しまつ。

log の設定
redirect_stderr = true
log_directory = 'log'
log_filename = 'postgresql-%Y%m%d.log'
log_rotation_age = 1440
log_rotation_size = 0

Apache2 install

事前の準備は特に必要ありません。
アーカイブ緩めて configure しちゃって下さい。

option は ssl を enable して、OpenSSL のlibrary を指定しただけ。
他に必要な option がある場合は、適宜追加して ./configure してね。
で、なにも問題なければ /usr/local/apache2 に install されマス。
install が終わったら、 /usr/local/apache2/conf/httpd.conf を書き換えて、 Web Server の設定をしておいて。

php install

apxs を指定して multibyte の option を設定しただけ。

% make test 中にこんなエラーメッセージが出た場合は・・・・

make test 中のエラー
Don't forget to run 'make test'.

ld.so.1: php: fatal: relocation error: file /tmp/php-5.2.9/sapi/cli/php: symbol xmlParserInputBufferCreateFilenameDefault: referenced symbol not found Killed
make: [test] Error 137 (ignored)

これ、ドツボにハマた(TT)
ハマたよ、ドツボに(TT:倒置法)

結論を先にゆっとくと、solaris10 にバンドル済みの libxml2 のライブラリが原因。
pkgadd した /usr/local/lib にある xml ライブラリを call してくれれば問題ないんだけれども、 /usr/lib/libxml2.so.2 アタリを先に call しちゃうのが原因。 手っ取り早い解決策は、

手っ取り早い解決策
LD_LIBRARU_PATH=/usr/local/lib:/usr/lib:

的なことをして /usr/local/lib を優先的に見に行くようにしてくらさい。

install が終わったら /usr/local/lib/php.ini のチューニング。
php を install しただけでは存在しません。なので、

してファイルを cp してくらさい。
あとは vi で必要なトコを書き換えましょう。
書き換えておいたほーが良い気がするトコは・・・・

php.ini 設定
output_handler = mb_output_handler
mbstring.language = Japanese
mbstring.internal_encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none;
mbstring.func_overload = 0

あとは、仕様設計の事情とか、諸般の事情がイロイロと出てくると思いまつので、 manual 見ながら必要な設定をしていってくらさい。

○php load module in apache2

最後に php の module を apache2 に load させるようにして、php のスクリプトを AddType しておしまい。
php がきちんと install できていれば、 /usr/local/apache2/modules/libphp5.so って module があるハズ。 確認してみてくだされ。
module の load は /usr/local/apache2/conf/httpd.conf の LoadModule ディレクティブ に libphp5.so を書いてくだされ。
AddType は httpd.conf の下の方に既定の定義が書き込んである部分があるので、その近辺 に書き込めばおk。

httpd.conf 設定
LoadModule php5_module        modules/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

httpd.conf の修正が終わったら、

して、 httpd の daemon を動かしてみてくらさい。

○ここまでの動作確認

カンタンな php のスクリプトを書いて実験してみませう。


test.php
<?php
   phpinfo();
?>

で、 test.php を DocumentRoot の htdocs に置いてくらさい。
cgi-bin に置きたくなる衝動に駆られると思うのですが、それなりの設定をしないと、 perl のスクリプトだと思い込まれて php で処理してくれません。
なので、 DocumentRoot に取りあえず置いてね。
あとは、ブラウザで表示させてみるダケ。
URL に httpp://localhost/test.php とかして表示させてみて。
特に問題なければ、こんな Web が表示されるハヅ。

php resolt

一部、抜粋でつ。
ホントは、下のほうにもっといっぱいイロイロと表示されてまつ。
ここまでくれば、 apache2 と php の最低限の設定はおしまい。


□SSL の証明書をつくる。


○ジャイアニヅム・シグネチャーでおK。

ベリサインとかから配布される証明書を使うのがスジってことは既にご存知のハヅ。
でも、 ssl のコマンドで作れるよ。
証明書を取り込んだブラウザが

信用ならねぇぜ

とゆってきまつが。
俺様証明書の作り方は、俺様証明書を作る。を 参照してくらさい。



□ssl 証明書を apache に install する。


○証明書の copy

server.crt と server.key が作られたと思いまつ。
どこのレポジトリでも良いのでつが、取りあえず、 /etc/ssl.key とかってディレクトリを 作って cp しておいてくらさい。

○httpd.conf の 修正

/usr/local/apache2/conf/httpd.conf の下のほうに、conf/extra/httpd-ssl.conf の行が コメントアウトされているところがあるので探してくらさい。


httpd.conf
編集前 編集後
# Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf

コメント消したら、 conf/extra/httpd-ssl.conf に実際の設定を書いていきまつ。
最低限、書き換えないとダメなとこは、


httpd.conf
編集前 編集後
#SSLCertificateFile /usr/local/apache2/conf/server-dsa.crt
#SSLCertificateKeyFile /usr/local/apache2/conf/server-dsa.key
SSLCertificateFile /etc/ssl.key/server.crt
SSLCertificateKeyFile /etc/ssl.key/server.key

必要に応じて log や、 ssl 用の DocumentRoot の設定なんかもしておいてね。
書き換えが終わったら、

で、 httpd dasemon を再起動してみてくらさい。
で、今度は、先ほどの test.php を、ブラウザで見てみましょう。

スキームの "s" を忘れないよーに。
http のまんまだと、暗号化されないからね。

https だよっ!httpsっ!

これで先ほどと同じ test.php の内容が表示されればおK。
ココから先は、

アナタ次第




go back    next
Copyright(c) ORATORIO-TANGRAM.com 2001-2007 All Rights Reserved.
Total:counter