Vine Linux 4.0 上で PostgreSQL、PHP、Apache を設定しました。
1 サーバの機能
internet との境界にはルータをおいて、そのルータで
外からサーバに対して HTTP 用ポートを通します。
サーバには HTTP の運用に必要な機能のみをインストールします。
セキュリティのためだけでなく、サーバに使うことのできる
CPU もメモリも貧弱なので、
最大限軽くしておきたいからです。
2 基本的なソフトのインストール
(1) インストール
Vine Linux 4.0 をインストールします。
インストール時に、
「最小構成」を選択しその後必要なプログラムを apt-get
でインストールしても、インストール時点で必要なプログラムを
設定しても、サイズはあまり変わりません。
いずれにせよ、セットアップ時にファイアウォールに各サーバ用ポートに対応する穴をあけておいてください。
必要なファイルは、
proftpd, apache2,
postgresql-server,postgresql,
php5, php5-apache2, php5-pgsql
です。
私は、個人的な好みで
jed, ntp
を apt-get install でインストールしています。
ここで、最新の状態にするために、
apt-get update
apt-get upgrade
と、いつもの呪文を唱えておきます。
(2) sshd
パスワード認証では、sshd の設定ファイルを変更します。
/etc/ssh/sshd_conf で、
PermitEmptyPasswords no
PasswordAuthentication yes
ここからは、外部pcからのアクセスで、設定が可能になります。
通常アクセスするユーザとして、ログインします。
公開鍵を使う場合の手順は以下ですが、まず、パスワード認証で
sshd にアクセスできることを確認しておいてください。
ここでは、windows 上の UTF-8 TeraTerm Pro with TTSSH2 と putty を使って
動作確認しました。
まず、暗号化の鍵をサーバで作ります。
ssh-keygen -t rsa
で、デフォルトで、$HOME/.ssh に、id_rsa と id_rsa.pub を作ってくれます。
cat id_rsa.pub >> authorized_keys
とし、外部からアクセスするために公開鍵を保存しておきます。
ここで作った秘密鍵 id_rsa を アクセスする側のソフトウェアに設定すれば、暗号鍵を持たないPCからはアクセスできなくなります。
(windows 上の putty では、サーバで作ったキーを puttykey で変換する必要があります。)
なお、PC側で秘密鍵と公開鍵をつくり、その公開鍵をサーバの authorized_keys に書き込む方法をとることもできます。
次に、サーバ上の sshd の設定ファイルを変更します。
/etc/ssh/sshd_conf で、
RSAAuthentications yes
PasswordAuthentication no
とします。
(3) proftpd
ファイルをアップロードするために、
内部に対してのみ公開します。
インストールした状態で起動しているので、そのままで使えますが、
一応 /etc/proftpd.conf
を変更してしまいます。
DefaultRoot ~
UseReverseDNS off
RequireValidShell off
最後の行は、バックアップ専用ユーザを
作りやすくするためです。
後、私は、anonymous のアクセスを禁止しています。
(4) サーバの起動設定
chkconfig --list
として、希望のサーバの表示が on になっている確認します。
動いてなければ、
chkconfig postgresql on
のように指定して、自動起動できるようにします。
ついでに、セキュリティの確保のために、止められるサーバはすべて
とめます。
不要なものをたとえば、
chkconfig postfix off
のように指定して、起動しないように設定してしまいます。
3 ユーザ作成
データベースとホームページ作成用ユーザとして、例えば web というユーザを作ります。
root になって、
adduser web
passwd web
として、適切なパスワードを設定しておきます。
chmod a+x /home/web
として、apache が見に行けるようにアクセス権を設定します。
4 apache2
(1) インストール
ディストリビューションに付いてきたものをそのまま使います。
ブラウザで自分のIPアドレスを入れて見て、
正常にインストールされていることを確認します。
(2) 設定
apache の設定ファイルである
/etc/apache2/conf/httpd.conf
を変更します。
280行付近で、htmlファイルを置く場所を指定します。
/home/web 以下に置いているとすると、
DocumentRoot /home/web
その下にある Option では、Indexes を消しておきます。
390行付近にある DirectoryIndex 指定文に、index.php を追加します。
DirectoryIndex index.html index.html.var index.php
770行付近で、AddType が並んでいる後ろに、
AddType application/x-httpd-php .php
を追加します。
5 php
php の設定ファイル
/etc/php5/php.ini
を変更します。
490行付近で、
default_charset = "EUC-JP"
510行付近で、doc_root を apache の設定とあわせます。
doc_root = "/home/web"
1160行付近から、[mbstring] の設定がありますが、
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
と変更しました。
6 PostgreSQL
デフォルトでインストールされたものを使い、
設定は、
/var/lib/pgsql/data/postgresql.conf
を編集します。
50行目付近で、
listen_addresses='localhost'
7 DBの作成
(1) ユーザ作成
Vine Linux で postgresql-server をインストールすると、
PostgreSQL の管理専用ユーザ postgres が作られて、
initdb も自動で行ってくれているようです。
後は、root になって、postgres ユーザのパスワードを設定したあと、
passwd postgres
su - postgres で、postgres になって以下の作業を行います。
まず、
psql -l
として、template0、template1 データベースができていることを確認します。
次に、これから使うデータベースとユーザを作ります。ここでは例えば、wwwdb と web とします。
createdb -E EUC_JP wwwdb
createuser web
次に、ユーザの認証方式を設定します。
/var/lib/pgsql/data/pg_hba.conf で、
local all md5
なお、ユーザのパスワードは、psql 上で設定します。
ALTER USER web WITH PASSWORD 'newpasswd';
これ以後の作業は安全のために、web ユーザで行います。