|Home|私のLinux活用記録-Home-|

私のLinux活用記録

-Page19-

項目

kh19-01[php-4.3.X セキュリティ対応 RPM パッケージ作成]
kh19-02[Apache, OpenSSL, PHP, PostgreSQL の設定]

 

[php-4.3.X セキュリティ対応 RPM パッケージ作成]

作成:2004年08月04日
更新:2004年12月25日

2004年12月15日、php-4.3.9 以前に重大なセキュリティ問題があると発表されました。php-4.3.10 へのアップグレードが強く推奨されています。緊急対応として、Vine 2.6 および Vine 3.1 用の自作 RPM を作成しメンテナンスしています。

以下に RPM パッケージの作成要領を掲載しました。また、限定された条件での RPM パッケージですが、もし同じ条件で使われる方がおられたらと思い、自作 RPM パッケージを掲載 しています(自己責任にて御利用ください)。

パッケージ作成条件
・apache-1.3.X のモジュールとしてインストールします。
・データベース用モジュールは、PostgreSQL を指定しています。
 MySQL 用モジュールを組み込むには、./configure で指定できます(以下に記載しています)
・CGI モジュールはインストールしません。
・インストール条件については、以下を参考にしました。
 http://www.php.net/manual/ja/install.apache.php

RPM パッケージの作成方法に関する参考ドキュメント
http://vinelinux.org/MakingRPM/index.html
http://www.linux.or.jp/JF/JFdocs/RPM-HOWTO.txt
http://www.linux.or.jp/JF/JFdocs/archive/RPM-BUILD-HOWTO.txt

RPM 作成環境
Vine 3.1 の /usr/share/doc/php/php-4.3.9/INSTALL に、インストールに必要なパッケージがリストされています。私の Vine 環境での関係しそうなパッケージですが、必要十分かどうかは ? です。

Program Vine 2.6 パッケージ Vine 3.1 パッケージ
apache apache-1.3.27-0vl9
apache-devel-1.3.27-0vl9 [*1]
apache-1.3.33-0vl2
apache-devel-1.3.33-0vl2
postgresql postgresql-7.2.3-0vl3
postgresql-server-7.2.3-0vl3
postgresql-devel-7.2.3-0vl3
postgresql-libs-7.2.3-0vl3
postgresql-7.4.6-0vl2
postgresql-server-7.4.6-0vl2
postgresql-devel-7.4.6-0vl2 [*1]
postgresql-libs-7.4.6-0vl2
gcc gcc-2.95.3-2vl22
gcc-cpp-2.95.3-2vl22
gcc-3.3.2-0vl8
gcc-cpp-3.3.2-0vl8
make make-3.79.1-5vl1 make-3.80-0vl3
flex flex-2.5.4a-13vl1 [*1] flex-2.5.4a-30vl1
bison bison-1.35-2vl1 [*1] bison-1.875-6vl1
m4 m4-1.4.1-3vl1 m4-1.4.1-12vl2
autoconf autoconf-2.13-10vl0 [*2] autoconf-2.59-2vl3
automake automake-1.4p4-2vl0 [*2] automake-1.8.5-0vl1
perl perl-5.6.1-0vl13
perl-File-MMagic-1.12-0vl3
perl-5.8.2-0vl4
perl-File-MMagic-1.22-0vl1
gzip gzip-1.3.2-2vl1 gzip-1.3.2-2vl3
tar tar-1.13.25-8vl3 tar-1.14-0vl1
GNU sed sed-3.02_mb1.09-0vl1 sed-4.1.2-0vl1

[注]
[*1]:コンフィグレーション時にエラーが発生したので、追加インストールしたパッケージ。
[*2]:なくても、問題の起こらなかったパッケージ。

準備
/home/USER_NAME/ 配下に rpm/BUILD, rpm/RPMS/i386, rpm/SOURCES, rpm/SPECS, rpm/SRPMS を作成しておく必要があります。普通は、デフォルトで作成されていますが、ない場合は、http://vinelinux.org/MakingRPM/node6.html を参考にして作成します。
RPM パッケージ作成は、安全のためにユーザー権限でユーザーのディレクトリ配下で行います。

RPM 作成手順
source:php-4.3.10.tar.gz
download from http://jp2.php.net/get/php-4.3.10.tar.gz/from/a/mirror
put php-4.3.10.tar.gz on /home/USER_NAME/temp/

$ cd /home/USER_NAME/temp/
$ cp php-4.3.10.tar.gz ../rpm/BUILD/
$ cd ../rpm/BUILD/
$ tar zxvf php-4.3.10.tar.gz
$ mv php-4.3.10 php-4.3.10.org
$ tar zxvf php-4.3.10.tar.gz
$ mv php-4.3.10.tzr.gz ../SOURCES/
$ cd php-4.3.10/
$ ./configure --with-apxs --with-pgsql --enable-mbstring --enable-magic-quotes →
→--with-config-file-path=/etc

[注]configuration のオプションについて
configuration のオプションは、./configure --help で確認できます
■ --with-apxs
Apache 用共有ライブラリ libphp4.so を作成します。Apache の httpd.conf ファイルにおいて LoadModule を使用して Apache にこのライブラリをロードすることが可能です。
■ --with-pgsql
PostgreSQL サポートが Apache 用共有ライブラリ libphp4.so に埋め込まれます。
MySQL を使う場合は、--with-pgsql を --with-mysql に置き換えてください。
■ --enable-mbstring
マルチバイト処理の機能を採り入れます。
■ --enable-magic-quotes
特殊文字 ['], ["], [\], [NULL] などにに対するエスケープ処理の機能を採り入れます。
■ --with-config-file-path=/etc
php.ini は /etc/ 配下にインストールされますが、php.ini のロケーションは、/usr/local/lib/ 配下に指定されるので、php.ini を /usr/local/lib/ 配下にコピーする必要があります。このオプションで php.ini のロケーションを /etc/ 配下に指定することができます。

configuration でエラーが出ていないことを確認し、
/home/USER_NAME/rpm/BUILD/php-4.3.10/ 配下に生成した Makefile を編集します。
prefix = /home/USER_NAME/temp

$ make
エラーが出ていないことを確認します。

$ make clean
$ cd ../
$ diff -uNr php-4.3.10.org/ php-4.3.10/ > php-4.3.10.patch
$ mv php-4.3.10.patch ../SOURCES/

次に、spec file を作成します(以下、php-4.3.10-st_vine2_6 の場合)
/home/USER_NAME/rpm/BUILD/php-4.3.10/ 配下の makerpm を参考に php4.spec を作成しました。

-------------------------------- php4.spec ----------------------------------
Summary: PHP 4 - A powerful scripting language
Name: php
Version: 4.3.10
Release: st_vine2_6
Group: Networking/Daemons
Source0: http://www.php.net/distributions/php-4.3.10.tar.gz
Copyright: PHP License
BuildRoot: %{_tmppath}/%{name}-%{version}
Patch: php-4.3.10.patch
Requires: apache

%description
省略

%changelog
省略

%prep
rm -rf $RPM_BUILD_ROOT

%setup

%patch -p1

%build
make

%install
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT%{_libdir}/apache
install -m 0755 .libs/libphp4.so $RPM_BUILD_ROOT%{_libdir}/apache
mkdir -p $RPM_BUILD_ROOT%{_bindir}
install -m 0755 sapi/cli/php $RPM_BUILD_ROOT%{_bindir}
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
install -m 0755 sapi/cli/php.1 $RPM_BUILD_ROOT%{_mandir}/man1
mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}
install -m 0755 php.ini-recommended $RPM_BUILD_ROOT%{_sysconfdir}/php.ini

%clean
rm -rf $RPM_BUILD_ROOT

%files
%defattr(-,root,root)
%{_libdir}/apache/libphp4.so
%{_bindir}/php
%{_mandir}/man1/php.1*
%{_sysconfdir}/php.ini

%doc TODO CODING_STANDARDS CREDITS LICENSE NEWS
-------------------------------- php4.spec ----------------------------------
php4.spec を /home/USER_NAME/rpm/SPECS/ 配下に置きます。

$ cd /home/USER_NAME/rpm/SPECS/
$ rpm -bi php4.spec (rpm 作成テスト)
エラーが出なければ
$ rpm -ba php4.spec (rpm & srpm 作成)

以上で、php-4.3.10-st_vine2_6.i386.rpm 及び php-4.3.10-st_vine2_6.src.rpm が作成されます。

パッケージの所在
/home/USER_NAME/rpm/RPMS/i386/php-4.3.10-st_vine2_6.i386.rpm
/home/USER_NAME/rpm/SRPMS/php-4.3.10-st_vine2_6.src.rpm

後始末
$ cd /home/USER_NAME/rpm/BUILD/php-4.3.10/
$ make clean
念のため、/var/tmp/ 配下及び /home/USER_NAME/temp 配下に残骸があれば削除します。

php-4.3.10-st_vine2_6.i386.rpm のインストールと設定
既存の /etc/php.ini のバックアップをとります。次いで、既存の php パッケージをすべて削除します。
# rpm -e php-パッケージ名
または
# apt-get remove php-パッケージ名
あとは、
# rpm -ivh php-4.3.10-st_vine2_6.i386.rpm
でインストールします。
次いで、バックアップを取った /etc/php.ini を元に戻します。php.ini の設定については、こちら を参照してください。最後に、
# /etc/rc.d/init.d/httpd restart
で apache を再起動すれば、すべて完了です。

自作パッケージ (2009年04月15日)
PHP4.3 はすでに古くなっており、パッケージを公開する意味もあまりないので、ダウンロードのリンクを削除しました。RPMパッケージの作成方法のみ参考にしていただければと思います。

Vine 2.6 用 Vine 3.1 用
php-4.3.10-st_vine2_6.i386.rpm (3.9MB)
php-4.3.10-st_vine2_6.src.rpm (5.0MB)
php-4.3.10-st_vine3_1.i386.rpm (4.5MB)
php-4.3.10-st_vine3_1.src.rpm (5.0MB)

戻る

[Apache, OpenSSL, PHP, PostgreSQL の設定]

作成:2004年08月08日
更新:2004年10月31日

暗号化通信とデータベースを用いて、PHP による動的 Web コンテンツ作成を試みました。暗号化通信は OpenSSL、データベースには PostgreSQL を使用しました。PHP は、HTML 埋め込み型のプログラム言語で、PostgreSQL はもちろん、MySQL など多くのデータベースシステムを操作する関数をサポートしており、私のような初心者にも非常に使いやすい言語です。ここでは、当ホームページの [フリー登録リンク] ページを作成した手順をもとに、要点を整理しました。

[参考資料]
■ Open SSL
http://www.linux.or.jp/JF/JFdocs/SSL-RedHat-HOWTO.txt
http://www.linux.or.jp/JF/JFdocs/SSL-Certificates-HOWTO.txt
■ PHP 日本語マニュアル
http://www.php.net/manual/ja/
■ PHP4徹底攻略PDF版
http://www.geocities.jp/rui_hirokawa/php/
■ PostgreSQL 日本語マニュアル
http://www.postgresql.jp/document/pg721doc/index.html

kh19-02.01 サーバー&ネットワークの構成と iptables の設定
kh19-02.02 OpenSSL のインストールと設定
kh19-02.03 PHP のインストールと設定
kh19-02.04 PostgreSQL のインストールと設定

戻る

サーバー&ネットワークの構成と iptables の設定

サーバー&ネットワークの構成図
    │
internet│panna.zive.net 192.168.1.3            192.168.1.2
    │  ppp0     eth0               eth0
    │  ┏━━━━━━━┓               ┏━━━━━━┓
    │  ┃  ┌────╂←──────C───────╂──←──┐┃
    │  ┃  │┌──→╂───────C──────→╂────┐│┃
    │  ┃  ││   ┃ ┌─────D───────╂←┐  ││┃
    │  ┃  ││   ┃  │┌────D──────→╂┐│  ││┃
    │  ┃  ││   ┃ ││ 192.168.1.1      ┃││  ││┃
    │  ┃  ││   ┃ ││ eth0         ┠┼┼──┼┼┨
    │  ┃  ││   ┃ ││ ┏━━━━━━┓   ┃↓↑  ↓↑┃
    │  ┃  ││   ┃ │└─╂←────┐┃   ┃      ┃
    │  ┃  ││   ┃ └─→╂────┐│┃   ┃Local Client┃
←A──┼←─╂←┐││┌──╂←─B─╂←┐  ││┃   ┗━━━━━━┛
─A─→┼─→╂┐││││┌→╂──B→╂┐│  ││┃      gw350
    │  ┃↓│↓│││ ┃    ┃↓│  ↓│┃    Linux & Window
    │  ┠┼┼┼┼┼┼─┨    ┠┼┼──┼┼┨
    │  ┃│↑│↑↓↑ ┃    ┃│↑  │↑┃
    │  ┃└┘└┘   ┃    ┃└┘  └┘┃
    │  ┃ Web Server ┃    ┃ PostgreSQL ┃
    │  ┃   PHP   ┃    ┃      ┃
    │  ┃  OpenSSL  ┃    ┃      ┃
    │  ┗━━━━━━━┛    ┗━━━━━━┛
    │  ppp0     eth0    eth0
    │panna.zive.net 192.168.1.3 192.168.1.1
    │
    │     ibm133          ph700
    │   Vine Linux2.6      Vine Linux2.6

各ルートの説明

■ Aルート
インターネットからの Web Sever(panna.zive.net) へのアクセスと応答のルート

■ Bルート
Web Sever で PHP が実行され、PostgreSQL サーバーへのアクセスが行われるときのルート。PostgreSQL サーバーから見たとき、Web Server はローカルネットワーク内のクライアントホストとして扱います

■ Cルート
ローカルクライアントからの Web Server(panna.zive.net) へのアクセスと応答のルート

■ Dルート
ローカルクライアントから、PostgreSQL サーバーへの直接のアクセスルート

iptables の設定

OpenSSL による暗号化通信を使用するには、Web Server の port 443 を開放する必要があります。また、PostgreSQL サーバーへのアクセスを許可するために、port 5432 を介するパケットの出し側、受け側の許可が必要です。それぞれのサーバーの ipatables に以下を追加します。

■ Web Server(ibm133)
以下を iptables に追加します。
/sbin/iptables -A INPUT -i eth0  -s 192.168.1.0/29 -p tcp --dport 443 →
                               →-m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i ppp0  -p tcp --dport 443 →
                               →-m state --state NEW -j ACCEPT
/sbin/iptables -A OUTPUT -o eth0 -d 192.168.1.1 -p tcp --dport 5432 →
                               →-m state --state NEW -j ACCEPT
/sbin/iptables -A OUTPUT -o eth0 -d 192.168.1.1 -p udp --dport 5432 →
                               →-m state --state NEW -j ACCEPT

■ PostgreSQL サーバー(ph700)
以下を iptables に追加します。
/sbin/iptables -A INPUT -i eth0  -s 192.168.1.0/29 -p tcp --dport 5432 →
                               →-m state --state NEW -j ACCEPT
/sbin/iptables -A INPUT -i eth0  -s 192.168.1.0/29 -p udp --dport 5432 →
                               →-m state --state NEW -j ACCEPT

戻る

OpenSSL のインストールと設定(ibm133)

PKI(Public Key Infrastructure)

PKI は、狭義には公開鍵による暗号化と秘密鍵による復号を利用した暗号化通信の技術ですが、広義には、デジタル証明書によって保証された公開鍵を配布するシステムのことを言います。

今、AとBの間の通信を想定した場合、Aは秘密鍵(A) と公開鍵(A) を作成します。Aは、公開鍵(A) をデジタル証明書を付けてBに送付します。Bは、デジタル証明書によって、公開鍵(A) が間違いなくAのものであることを認証します。次いでBは、公開鍵(A) を用いて情報を暗号化しAに送ります。Aは、秘密鍵(A) を用いて情報を復号します。Bから送られた暗号化された情報は、秘密鍵(A) を使わなければ復号できないので、他の第三者がこの情報を盗み見ることは不可能です。
同様に、Bも秘密鍵(B) と公開鍵(B) を作成し、デジタル証明書を付けて公開鍵(B) をAに送れば、相互に認証し合って暗号化通信ができます。

SSL(Secure Sockets Layer)

SSL は、Netscape 社によって作られた、Web Server と Web ブラウザーの間の安全な通信を保証するプロトコルで、上述の PKI の技術に基づいています。以下、通信の仕組の概略です。

  • ブラウザーが、https:// によってセキュアなページを要求します
  • Web Server は自分のデジタル証明書と公開鍵をブラウザーに送ります。
  • ブラウザーはそのデジタル証明書が信用のおける認証局が発行し、有効期間以内のものであり、接続している Web サイトに関係付けられたものであることをチェックします。
  • 次いで、ブラウザーはランダムに選んだ対称鍵を作成し、送られた公開鍵を用いて対称鍵を暗号化します。同時に、送信する URL と http データを対称鍵で暗号化し、それらをWeb Server に送ります。
  • Web Server は自分の秘密鍵で対称鍵を復号し、その対称鍵で URL と http データを復号します。
  • 次いで、Web Server は要求された html ドキュメントと http データを対称鍵で暗号化し、ブラウザーに送ります。
  • ブラウザーは送られた http データと html ドキュメントを対称鍵で復号し、その情報を表示します。
[注]
対称鍵は共通鍵とも言われ、非対称鍵(秘密鍵と公開鍵)に比べ、効率的な通信ができます。いったん公開鍵の正統性が認証された後は、対称鍵を用いて通信するのが SSL の特徴です。

必要な RPM パッケージ

openssl-0.9.6m-0vl0.26.i386.rpm
mod_ssl-2.8.14-0vl7.i386.rpm

サーバーの秘密鍵作成

openssl コマンドでサーバーの秘密鍵を作成します。デフォルトでは、秘密鍵を配置するディレクトリは、/etc/httpd/conf/ssl.key/ に設定されており、ここに server.key という秘密鍵が配置されています。以下のコマンドで新しい秘密鍵を作成し、同じディレクトリに同名の秘密鍵を配置します。

# cd /etc/httpd/conf/ssl.key/
# openssl genrsa -out server.key_new 1024
# mv server.key server.key_bk
# mv server.key_new server.key

[openssl コマンドオプションの説明]
■ 1024
1024 bit の鍵を作るオプションです。指定しない場合は、デフォルトの 512 bit の鍵が作成されます。
■ -des3
秘密鍵作成コマンド # openssl genrsa -out server.key_new 1024 は、パスフレーズの入力を要求しません。SSL Sever をコールドスタートする時もパスフレーズの入力を要求しません。より安全な秘密鍵を作成する場合は、トリプル DES 暗号標準を使った秘密鍵の作成が推奨されています。この場合は、秘密鍵作成時、SSL Server コールドスタート時ともにパスフレーズの入力が要求されます。秘密鍵作成コマンドは以下のようになります。
# openssl genrsa -des3 -out server.key_new 1024

サーバーの自己署名証明書作成

サーバーが配布する証明書(公開鍵とセット)は、本来、信頼された認証局によってデジタル署名された証明書であるべきです。それによって、そのデジタル証明書の記載内容と公開鍵が信頼できることが保証されます。

しかし、SSL による暗号化通信を行うだけの目的であれば、自己署名によるデジタル証明書を発行することができます。この場合、ブラウザーはそのデジタル証明書が信頼できるものではないという警告を出しますが、デジタル証明書が一時的に受け入れられれば、ブラウザーと Web Server 間の暗号化通信が可能になります。

デフォルトでは、デジタル証明書の配置ディレクトリは、/etc/httpd/conf/ssl.crt/ で、server.crt というデジタル証明書が配置されています。以下のコマンドで新しい自己署名によるデジタル証明書を作成し、同じディレクトリに同名のデジタル証明書を配置します。

# cd /etc/httpd/conf/ssl.crt/
# openssl req -new -days 365 -key ../ssl.key/server.key -x509 -out server.crt_new

  以下の項目について入力が要求されます。入力値はサンプルです。
  Country Name: JP
  State or Province Name: kanagawa
  Locality Name: yokohama
  Organization Name: shuji tamura's home page
  Organizational Unit Name: shuji tamura
  Common Name: panna.zive.net <== Server のホスト名.ドメイン名
  Email Address: atamuras@jb3.so-net.ne.jp
# mv sever.crt server.crt_bk
# mv server.crt_new server.crt

[openssl コマンドオプションの説明]
■ -days 365
証明書の有効期間を 365日に設定します。デフォルトでは、有効期間が1ヵ月となります。
■ -x509
証明書の書式&仕様を X.509 に指定します。

apache の設定

OpenSSL を使う場合、通常の http:// でアクセスするサイトとは別に、https:// (port 443) でアクセスする別のバーチャルホストを立てることが推奨されています。
私の場合は、https:// 用のバーチャルホストとして panna.zive.net/~php/ を立てています。
以下、その作成方法の概略です。

■ /home/php/public_html/ の作成
# adduser php
# passwd php
# su - php
$ mkdir public_html
$ chmod 755 public_html
$ cd ../
$ chmod 755 php

■ OpenSSL 対応 /etc/httpd/conf/httpd.conf の設定
□ line 1061 の編集
Listen 443

□ バーチャルホスト panna.zive.net/~php/ の設定
NameVirtualHost panna.zive.net/~php
<VirtualHost panna.zive.net/~php:443>
ServerName panna.zive.net/~php
DocumentRoot /home/php/public_html
SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
</VirtualHost>
[注]
SSLCertificateFile 及び SSLCertificateKeyFile で、自己署名証明書と秘密鍵の所在を指定します。

■ httpd の再起動
# /etc/rc.d/init.d/httpd restart

戻る

PHP のインストールと設定(ibm133)

php のインストール

cyrus-sasl-1.5.27-17vl1.i386.rpm
ld.so-1.9.5-13.i386.rpm
libexpat-1.95.2-0vl3.i386.rpm
libsablotron0-0.90-1vl1.i386.rpm
libxml2-2.4.21-1vl1.i386.rpm
libxslt-1.0.17-1vl1.i386.rpm
openldap-2.1.22-0vl1.1.i386.rpm
openldap-servers-2.1.22-0vl1.1.i386.rpm
unixODBC-2.2.3-0vl2.i386.rpm
php-4.2.3-0vl5.i386.rpm
php-devel-4.2.3-0vl5.i386.rpm
php-imap-4.2.3-0vl5.i386.rpm
php-ldap-4.2.3-0vl5.i386.rpm
php-manual-4.2.3-0vl5.i386.rpm
php-odbc-4.2.3-0vl5.i386.rpm
php-pgsql-4.2.3-0vl5.i386.rpm

/etc/php.ini の編集

php の設定ファイルは、/etc/php.ini です。デフォルトの設定から、以下の3点について変更しました。

■ line 333
magic_quotes_gpc = On ==> magic_quotes_gpc = Off
[注]
magic_quotes_gpc = On の場合、GET, POST, Cokkie からの入力値中の ['], ["], [\], [NULL] に対して自動的に [\] を付けてエスケープします。従って、データベースへの書き込み時に特別なエスケープ処理を必要としません。
しかし、GET, POST, Cokkie からの入力値を表示した場合、[\] が付加されて表示されてしまいます。これを避けるためには、magic_quotes_gpc = Off にします。データベース書き込み時には、string addslashes() 関数を用いて、個別データに対してエスケープします。

■ line 870
mbstring.http_output = SJIS ==> mbstring.http_output = EUC-JP
PHP スクリプトが http コードを出力するときの時のエンコーディングを、EUC-JP に設定します。

■ php-4.3.7 以前のバージョンの memory_limit セキュリティ−ホール対応
php-4.3.8 または、php-5.0.0 へのアップデートが推奨されています。Vine Linux では、php-4.3.8 が Vine Seed Plus に掲載されていますが、Vine Plus の方のアップデートバージョンが出る気配がなく、緊急対応として以下の設定を行いました。
line 210
memory_limit = 8M ==> memory_limit = -1
しかし、この対応では POST 等でデータを受ける場合の DoS 攻撃を防ぐことができなくなるため、php-4.3.8 へのバージョンアップは必須です。php-4.3.X のセキュリティ対応アップグレードについては、kh19-01[php-4.3.X セキュリティ対応 RPM パッケージ作成] を参照してください。

apache の設定と再起動

PHP のモジュールを apache にロードするための httpd.conf の設定が必要ですが、デフォルトで設定されているので、特に追加/変更はありません。
設定の詳細は、http://www.php.net/manual/ja/installation.php に詳しく記載されています。

/etc/php.ini の設定変更を有効にするために、apache を再起動します。
# /etc/rc.d/init.d/httpd restart

戻る

PostgreSQL のインストールと設定(ph700)

修正:2005年03月26日
修正:2008年01月26日

PostgreSQL のインストール

postgresql-7.4.10-0vl1
postgresql-devel-7.4.10-0vl1
postgresql-libs-7.4.10-0vl1
postgresql-server-7.4.10-0vl1

PostgreSQL の設定

内容の記述順を再変更しました。(2005.09.26)

■ デフォルトのデータベース用ディレクトリ作成
まずは、デフォルトのままで PostgreSQL を起動します。

# /etc/rc.d/init.d/postgresql start

Postgresql が初めて起動すると、自動的にデータベース用ディレクトリと設定ファイルが作成されます。

□ データベース用ディレクトリ /var/lib/pgsql/data/

□ 環境設定ファイル /var/lib/pgsql/data/postgresql.conf
特別な追加設定はしていません。

□ アクセス制御ファイル /var/lib/pgsql/data/pg_hba.conf の設定
local all all trust
host DB_NAME all 192.168.1.0 255.255.255.248 trust

[注]
サーバー内のユーザーに対しては、全てのデータベースへのアクセスを許可します。また、192.168.1.0/29 のローカルクライアントに対しては、DB_NMAE で指定したデータベースへのアクセスを許可します。DB_NAME には、後で作成するデータベース名 USER_NAME を記述します。

■ pg_hba.conf に記述するアクセス制御の書式とパラメーター

□ 書式
local      DATABASE  USER  METHOD  [OPTION]
host       DATABASE  USER  IP-ADDRESS  IP-MASK   METHOD  [OPTION]
hostssl    DATABASE  USER  IP-ADDRESS  IP-MASK   METHOD  [OPTION]

□ パラメータ
local     : Unix ドメインソケット越しの接続
host      : TCP/IP ネットワーク越しの接続
            (サーバーが -i オプションで起動されていること)
hostssl   : TCP/IP 越しの SSL を使った接続

DATABASE の値
all       : ホスト上の全てのデータベースを指定
sameuser  : 接続ユーザーと同じ名前の database を指定
samegroup : 接続グループと同じ名前の database を指定
DB_NAME   : データベース名を直接指定

USER の値
all       : 全てのユーザー
user      : 個別ユーザ名
+group    : ユーザグループ名

METHOD の値
trust     : 無条件許可
reject    : 無条件拒否
password  : パスワードを要求
crypt     : パスワードを要求(暗号化)
krb4      : Kerberos V4 によるユーザー認証、TCP/IP でのみ可
krb5      : Kerberos V5 によるユーザー認証、TCP/IP でのみ可
ident     : ユーザーの身元をクライアントホストの ident サーバーに尋ねた後、
            postgres のユーザーとして認証する。TCP/IP でのみ可

■ 任意のデータベース用ディレクトリ作成
デフォルトのデータベース用ディレクトリは、/var/lib/pgsql/data ですが、任意のディレクトリにデータベースを作成することができます。今、データベースを作成したいディレクトリを /PATH_NAME/.../ とすると、
# cd /PATH_NAME/.../
# mkdir pgsql
# chown postgres pgsql
# chgrp postgres pgsql
# chmod 700 pgsql
# cd pgsql
# mkdir data
# chown postgres data
# chgrp postgres data
# chmod 700 data
# su - postgres
-bash-2.05b$ initdb -D /PATH_NAME/.../pgsql/data

[注](2005.03.27 追記)
データベース用ディレクトリを任意のディレクトリ /PATH_NAMW/.../pgsql/data/ に変更した場合は、/PATH_NAME/.../pgsql/data/ 配下に設定ファイル(postgresql.conf, pg_hba.conf, etc.)が作成されるので、再度設定し直す必要があります。

■ PostgreSQL サーバーの起動
□ Unix ドメイン接続の場合
データベース用ディレクトリがデフォルトのまま(/var/lib/pgsql/data) であれば、
# /etc/rc.d/init.d/postgresql start
データベース用ディレクトリを指定して起動するには、
# su - postgres
-bash-2.05b$ postmaster -D /PATH_NAME/.../pgsql/data &

□ TCP/IP 接続の場合 (Unix ドメイン接続も可)
# su - postgres
-bash-2.05b$ postmaster -i -D /PATH_NAME/.../pgsql/data &

■ コンピュータ起動時に自動で PostgreSQL を起動する
□ Unix ドメイン接続の場合
データベース用ディレクトリがデフォルトのまま(/var/lib/pgsql/data) であれば、/etc/rc.d/rcX.d/ (X は、3 or 5) 配下のシンボリックリンク K15postgresql を S15postgresql に変更しておきます。
# cd /etc/rc.d/rcX.d/
# mv K15postgresql S15postgresql
データベース用ディレクトリを指定して起動するには、上記 /etc/rc.d/rcX.d/ 配下のシンボリックリンクは、K15postgresql のままにしておき、/etc/rc.d/rc.local に、以下を記述します。
su - -c 'postmaster -D /PATH_NAME/.../pgsql/data &' postgres

□ TCP/IP 接続の場合 (Unix ドメイン接続も可)
/etc/rc.d/rcX.d/ 配下のシンボリックリンクは、K15postgresql のままにしておき、/etc/rc.d/rc.local に、以下を記述します。
su - -c 'postmaster -i -D /PATH_NAME/.../pgsaql/data &' postgres

[参考] PostgreSQL の停止
Unix ドメイン接続で、データベース用ディレクトリがデフォルトのまま(/var/lib/pgsql/data) であれば、
# /etc/rc.d/init.d/postgresql stop
それ以外の方法で PostgreSQL を起動している場合は、
# su - postgres
-bash-2.05b$ pg_ctl stop -D /PATH_NAME/.../pgsql/data

■ データベースのユーザー登録
# su - postgres
bash-2.05b$ createuser USER_NAME
Shall the new user be allowed to create database ? (y/n) y
Shall the new user be allowed to create more new user ? (y/n) n
[注]
USER_NAME は、Linux のユーザー名である必要はありませんが、Linux ユーザーと同じ名前にしておく方がデータベースを操作するのに便利です。
USER_NAME に対して、データベース作成権限を許可しますが、新規ユーザーの作成権限は許可しません。

[参考] データベースユーザの削除
# su - postgres
-bash-2.05b$ dropuser USER_NAME

■ データベースの作成
login by USER_NAME
$ createdb DB_NAME
DB_NAME には USER_NAME を入力し、ユーザー名と同じ名前のデータベースを作成します。

[参考] データベースの削除
login by USER_NAME
$ dropdb DB_NAME(USER_NAME)

■ apache ユーザーの登録と権限設定
データベースを作成し、PostgreSQL サーバーが起動できたら、次にデータベースの設計とそれに基づくテーブルやビューの作成が必要ですが、これについては kh20_01[PostgreSQL データベースの設計と作成] を参照してください。ここでは必要なテーブル及びビューが作成されている前提で、ユーザーとして apache を登録し、データベースへのアクセス権限を設定します。
# su - postgres
-bash-2.05b$ createuser apache
Shall the new user be allowed to create database ? (y/n) n
Shall the new user be allowed to create more new user ? (y/n) n
exit
login by USER_NAME
$ psql
USER_NAME=> GRANT ALL ON {TABLE_NAME | VIEW_NAME} TO apache;

[注]
PHP から PostgreSQL を操作する場合、ユーザーは apache になります。従って、ユーザー apache を登録します。ユーザー apache には、データベースの作成、新規ユーザーの作成権限は与えませんが、データベースを構成するテーブル及びビューへのアクセス権限を与えます。{TABLE_NAME | VIEW_NAME} は、"," で区切られた、アクセスを許可するテーブル名及びビュー名のリストです。
ユーザ apache にアクセス許可するテーブル名、ビュー名の登録については、kh20-01.04 クエリー文の実行方法 を参照してください。

以上で準備は、完了です。残るは、データベースのテーブル作成ですが、データベースの設計も含めてテーブルの作成方法は、kh20_01[PostgreSQL データベースの設計と作成] を参照してください。これらが全て完了すれば、あとは PHP スクリプトを html ドキュメントに埋め込んで xxx.php ファイルを作成し、実行させるだけです。PostgreSQL クエリーの簡易マニュアル、PHP の簡易マニュアルは、
kh20_02[PostgreSQL 簡易マニュアル]
kh20_03[PHP 簡易マニュアル]
を参照してください。

戻る

counter1counter2counter3counter4counter5counter6

|Home|
 
Valid XHTML 1.1 Valid CSS!