バージョン8.1.4, 8.0.8, 7.4.13, 7.3.15以前のバージョンにはマルチバイト処理にSQLインジェクションの脆弱性があります。
詳細(SRA OSS)
詳細(ITpro)
PostgreSQL,PHP,ApacheのRPMは全て削除しておきます
バージョンアップする場合はバックアップを取って止めておきましょう
postgres ユーザーの作成
# /usr/sbin/useradd -d /usr/local/pgsql postgres # chmod 755 /usr/local/pgsql
作業ディレクトリ作成
# mkdir /usr/local/src/postgresql-7.4.9 # chown postgres /usr/local/src/postgresql-7.4.9
ソース取得 http://www.postgresql.jp/
# su postgres $ tar xvzf postgresql-7.4.9.tar.gz $ cd postgresql-7.4.9 $ ./configure
7.3以降はマルチバイトサポートはデフォルトで有効になる
ログを取るときは --enable-syslog ODBC接続する場合は --enable-odbc --with-unixodbc
JDBCドライバをビルドする場合は --with-java でもANT1.5以上がいるらしい
--without-readline を指定しろとか言われると readline-devel と libtermcap-devel を入れてみよう
$ make all $ make check $ make install
バージョンを上げるとエラーが出てmake checkができないことがある
これは古いlibpq.soが残っているかららしい
# rm -fr /usr/local/pgsql/lib
などとして削除しちゃいましょう
別にインストール必要はありません
bisonが必要です
$ su postgres $ cd /usr/local/src/postgresql-7.4.9/contrib $ gmake all $ gmake install
postgresとPostgreSQLを使用するユーザー全ての.bashrcに以下を追加
PATH="$PATH":/usr/local/pgsql/bin export POSTGRES_HOME=/usr/local/pgsql export PGLIB=$POSTGRES_HOME/lib export PGDATA=$POSTGRES_HOME/data export MANPATH="$MANPATH":$POSTGRES_HOME/man export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PGLIB"
設定の反映
$ source ~/.bashrc
データベース初期化
$ initdb --encoding=EUC_JP --no-locale
一行追加
# vi /etc/ld.so.conf /usr/local/pgsql/lib # /sbin/ldconfig
# cp /usr/local/src/postgresql-7.4.9/contrib/start-scripts/linux /etc/rc.d/init.d/postgresql # chmod 755 /etc/rc.d/init.d/postgresql # /sbin/chkconfig --add postgresql # /etc/rc.d/init.d/postgres start
Pg.pmは7.3から別管理になったそうな
PerlからPg.pmで接続する場合は以下を実行
http://gborg.postgresql.org/project/pgperl/download/download.php
Pg-2.1.1.tar.gz
# tar xvzf Pg-2.1.1.tar.gz # cd Pg-2.1.1 # POSTGRES_HOME=/usr/local/pgsql # export POSTGRES_HOME # perl Makefile.PL # make # make install
$ vi /usr/local/pgsql/data/postgresql.conf log_connections = true # 接続ログを残す log_statement = true # 全てのSQL文を記録 debug_print_parse = true # パースツリーを出力します debug_print_rewritten = true # 書き換え後のパースツリーを出力します debug_print_plan = ture # 問合せプランを出力します syslog = 2 # 出力を制御します(0:出力なし 1:syslogとstdoutに出力 2:syslogのみに出力) syslog_facility = 'LOCAL0'
# /etc/rc.d/init.d/postgres restart
PostgreSQLのログファイルは別に吐き出すように設定
$su # vi /etc/syslog.conf local0.* /var/log/postgres # 他にlocal0を使っていないか注意
# ps ax | grep syslog # kill -HUP 調べたsyslogdのPID
ログローテーション設定
# vi /etc/logrotate.d/postgres "/var/log/postgres" { rotate 4 weekly sharedscripts postrotate /usr/bin/killall -HUP syslogd endscript }
# tar xvzf apache_1.3.34.tar.gz # cd apache_1.3.34 # OPTIM="-O2" ./configure --enable-module=so --enable-module=rewrite # make # make install
Options
FollowSymLinks | シンボリックリンクを有効 |
Indexes | ディレクトリ内丸見え |
Includes | SSI有効 |
ExecCGI | CGI有効 |
MultiViews | ブラウザを判定(?) |
AllowOverride
AuthConfig | 認証有効 |
FileInfo | ドキュメントタイプのディレクディブ使用許可 |
Indexes | ディレクトリインデックス制御 |
Limit | ホストへのアクセス制御 |
Apacheのバージョンを表示させないようにするには httpd.conf において
ServerSignature Off ServerTokens ProductOnly
画像ファイルはログに記録しないためには httpd.conf において
<IfModule mod_setenvif.c> # no add images log SetEnvIf Request_URI "\.(gif)|(jpg)|(png)$" no_log ..... CustomLog /usr/local/apache/logs/access_log combined env=!no_log
# cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd # chmod 755 /etc/rc.d/init.d/httpd
# vi /etc/rc.d/init.d/httpd
以下を追加
#!/bin/sh # chkconfig: - 85 15 # description: Apache is a World Wide Web server. It is used to serve \ # HTML files and CGI. # processname: httpd # pidfile: /usr/local/apache/logs/httpd.pid # config: /usr/local/apache/conf/httpd.conf
# /sbin/chkconfig --add httpd # /etc/rc.d/init.d/httpd start
# vi /etc/logrotate.d/apache
/usr/local/apache/logs/*_log { rotate 4 compress # ZIP圧縮する場合 weekly sharedscripts postrotate /usr/local/apache/bin/apachectl restart endscript }
# /usr/sbin/logrotate -f /etc/logrotate.d/apache
コマンドにて /usr/local/apache/logs 内に access_log.1 error_log.1 が作成されていればOK
PHPめもも参考にして下さい
# tar xvzf php-4.4.1.tar.gz # cd php-4.4.1 # ./configure --with-pgsql --with-apxs=/usr/local/apache/bin/apxs --enable-zend-multibyte --enable-mbstring --enable-mbregex
--enable-mbstr-enc-trans は4.3.0以降は廃止
--enable-trans-sid は4.2.0移行は常にコンパイルされます
コマンドライン版は4.3.0から常に構築される
CGI版とCLI版は違うものらしいぞっ
GDを使用する場合はこんな感じ
# ./configure \ --with-pgsql --with-apxs=/usr/local/apache/bin/apxs \ --enable-zend-multibyte --enable-mbstring --enable-mbregex \ --with-gd --with-zlib-dir=/usr --with-jpeg-dir=/usr \ --with-png-dir=/usr --with-freetype-dir=/usr --with-ttf \ --enable-gd-native-ttf --enable-gd-jis-conv
libpng, libjpeg, freetype がないと言われたら devel を入れてみる
# cp /usr/local/src/php-4.4.1/php.ini-dist /usr/local/lib/php.ini
;; 出力バッファリングを有効にする output_buffering = On ;; mb_output_handlerによる出力変換を有効にする output_handler = mb_output_handler ;; HTTPヘッダ charset を設定 default_charset = Shift_JIS ;;日本語主体で使用 mbstring.language = Japanese ;; 内部エンコーディングをEUC-JPに設定 mbstring.internal_encoding = EUC-JP ;; HTTP入力エンコーディング変換をautoに設定 mbstring.http_input = auto ;; SJISに変換 mbstring.http_output = SJIS mbstring.encoding_translation = On 必要? mbstring.detect_order = auto 必要? ;; 無効な文字を出力しない mbstring.substitute_character = none; mbstring.func_overload = 0 ;; 4.1.0から推奨 register_globals = Off
# make # make install
AddType application/x-httpd-php .php
を追加してApache再起動
4.3.0以降は不要
# make distclean # ./configure --with-pgsql --enable-track-vars --enable-force-cgi-redirect --enable-mbstring --enable-mbstr-enc-trans # make # make install
これで/usr/local/bin/php にバイナリがインストールされる
PostgreSQL7.3からはホームディレクトリの .pgpass に、 データベースホストとユーザパスワードが記述できるようになりました。 環境変数 PGPASSWORD ではなく、.pgpass を使用するようにしてください。