akiyoko blog

akiyoko の IT技術系ブログです

さくらのVPS (CentOS 6.3) にLAMP環境を構築

前回「MacにMAMP+WordPressインストール」でMacにMAMP環境を構築する方法を紹介した流れで、今回、使い始めて1年になる「さくらのVPS」にLAMP環境を構築する方法をまとめてみたいと思います。





以下、ローカルPCはMac、さくらのVPSのホストアドレスは「49.xx.xx.xx」であるとします。

初回ログイン時は、ターミナルから

$ ssh root@49.xx.xx.xx

でVPSに接続します。

 

1. Linuxバージョンの確認(サーバ側)

まずは軽く、Linuxバージョンの確認から。

# Linuxカーネル
$ uname -a
Linux xxx.sakura.ne.jp 2.6.32-279.2.1.el6.x86_64 #1 SMP Fri Jul 20 01:55:29 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

# Linuxディストリビューション
$ cat /etc/redhat-release 
CentOS release 6.3 (Final)


いつの間にか、CentOS 6.3になってました。つい最近まで 6.2だった気がします。


 

2. セキュリティの設定(サーバ側)

まずはセキュリティの設定から始めます。ここでやりたいことは以下。

  • rootの初期パスワードを変更
  • 作業用ユーザを作成し、sudoコマンドを利用できるように
  • SSHポート番号を変更
  • iptablesでファイアウォールを設定

 

2.1. パスワードを変更

何はともあれ、rootの初期パスワードを変更。

$ passwd

 

2.2. 作業用ユーザを作成

作業用ユーザ「admin」を作成します。

$ useradd admin
$ passwd admin              # 「pass」など、簡単なものでOK
$ usermod -G wheel admin    # ユーザをwheelグループに追加


次に、wheelグループに属するユーザにsudoコマンドの実行を許可。

visudo

## Allows people in group wheel to run all commands
# %wheel        ALL=(ALL)       ALL
%wheel        ALL=(ALL)       ALL    # コメントを解除

 
なお、その他のユーザ関連コマンドは以下。

TIPS
$ cat /etc/passwd    # ユーザの一覧を確認
$ id -a admin        # ユーザを確認
$ userdel -r admin    # ユーザを削除(-r: ホームディレクトリも削除)

 

2.3. SSHポート番号を変更

vi /etc/ssh/sshd_config(/etc/ssh/ssh_config と間違えないように注意)

#Port 22
Port 10022


SSHを再起動

$ service sshd restart


 

3. パスワード認証からSSH鍵認証への切り替え(ローカル&サーバ側)

セキュリティ向上のために、パスワード認証を禁止にしてSSH鍵認証のみを許可するように切り替えます。

3.1. SSH鍵ペアの設定(ローカル側)

まずは、ローカルでSSH鍵ペアを作成。
パスフレーズは無し、鍵ファイル名は「~/.ssh/sakura_rsa」とします。

$ ssh-keygen

 

3.2. 作業用ユーザでログイン(ローカル側)

ssh -p 10022 admin@49.xx.xx.xx

 

3.3. authorized_keysを編集(サーバ側)

# ログインユーザのホームディレクトリ直下に、
# 「.ssh」という名前のディレクトリをパーミッション700で作成
$ mkdir -m 700 ~/.ssh

# 「~/.ssh/authorized_keys」を編集し、
# ローカルで生成した「sakura_rsa.pub」の中身を追記
$ vi ~/.ssh/authorized_keys

$ chmod 600 ~/.ssh/authorized_keys 

 

3.4. SSH configを編集(ローカル側)

一旦VPSからログアウトし、ローカル側の SSH config を設定します。

vi ~/.ssh/config

Host sakura
  Hostname 49.xx.xx.xx
  Port 10022
  User admin
  IdentityFile ~/.ssh/sakura_rsa

 

ssh sakura

で、VPSにパスワードなしでログインできれば成功。

 

3.4. rootによるログイン、パスワードでのログインを禁止(サーバ側)

sudo vi /etc/ssh/sshd_config

#PermitRootLogin yes
PermitRootLogin no

#PasswordAuthentication yes
PasswordAuthentication no

 
SSHを再起動

$ sudo service sshd restart

 

3.5. iptablesを設定(サーバ側)

(後ほど書きます。)


 

4. Apache, MySQL, PHPインストール(サーバ側)

ようやくLAMP環境の構築です。
最新の Apache, MySQL, PHPパッケージ(具体的には、httpd-devel, php-devel, php-pear, mysql-server, phpMyAdmin)を、yumでインストールします。

現時点のさくらのVPSでは、Fedora EPEL リポジトリが初めから入っているようです。その状態では Apache 2.2.15、MySQL 5.1.61、PHP 5.3.3 がインストールされたですが、MySQLのバージョンがちょっと古い(現時点での安定版は5.5系)ようなので、(EPEL以外の)サードパーティのリポジトリを追加することにしました。

なお、追加したリポジトリは通常使用しない設定にしておき、yumインストール時に一時的に有効化することにします。

さくらインターネット創業日記 ウェブ開発者のための、1時間でできるLAMP環境構築術(CentOS編)
を参考にして、remi, RPMForge を追加していきます(Fedora EPEL は追加済み)。


Fedora EPEL remi RPMForge
Apache 2.2.15 2.2.15 2.2.15
MySQL 5.1.61 5.5.25a 5.1.61
PHP 5.3.3 5.3.15 5.3.3

 

4.1. 作業用ユーザでログイン

sudoコマンド用にパスを通す。

vi ~/.bash_profile

# User specific environment and startup programs

PATH=$PATH:$HOME/bin
PATH=$PATH:/sbin
PATH=$PATH:/usr/sbin
PATH=$PATH:/usr/local/sbin

export PATH


変更を反映させる。

$ source ~/.bash_profile

 

4.2. yumをアップデート

セキュリティのため、yumをアップデートします。

$ sudo yum -y update

 

4.3. remiを追加

$ wget http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

「エラー 404: Not Found」になった場合は、http://rpms.famillecollet.com/ から最新のrpmを探してURLを指定します。


remiのrpmパッケージをインストールすると、「/etc/yum.repos.d/remi.repo」が作成されます。

$ sudo rpm -Uvh remi-release-6.rpm


既に「enabled=0」になっているようです。
$ sudo vi /etc/yum.repos.d/remi.repo

[remi]
enabled=0

 

4.4. RPMForgeを追加

$ wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm

同じく Not Found の場合は、http://dag.wieers.com/rpm/packages/rpmforge-release/ からrpmを探します。


インストールすると、「/etc/yum.repo.d/rpmforge.repo」と各種ミラーファイルが作成されます。

$ sudo rpm -Uvh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm


rpmforgeを一旦無効化します。

$ sudo vi /etc/yum.repos.d/rpmforge.repo

[rpmforge]
#enabled=1
enabled=0    # 無効にする

 
 

4.5. Fedora EPELを一旦無効化

さくらのVPSでは、Fedora EPELのリポジトリが初めから入っているようなのですが、「enabled=1」になっていたので一旦無効化します。
$ sudo vi /etc/yum.repos.d/epel.repo

[epel]
#enabled=1
enabled=0    # 無効にする

 

4.6. Apache, MySQL, PHPをインストール

httpd-devel, php-devel, php-pear, mysql-server, phpMyAdminを、yumでインストールします。

$ sudo yum -y install --enablerepo=remi,epel,rpmforge httpd-devel php-devel php-pear mysql-server phpMyAdmin


インストールされたバージョンはこうなりました。*1

# Apacheのバージョン確認
$ httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Feb 13 2012 22:31:42

# MySQLのバージョン確認
$ mysql --version
mysql  Ver 14.14 Distrib 5.5.25a, for Linux (x86_64) using readline 5.1

# PHPのバージョン確認
$ php -v
PHP 5.3.15 (cli) (built: Jul 20 2012 12:50:06) 
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies

$ yum list installed |grep httpd-devel
httpd-devel.x86_64   2.2.15-15.el6.centos.1
$ yum list installed |grep php-devel
php-devel.x86_64     5.3.15-1.el6.remi  @remi
$ yum list installed |grep php-pear
php-pear.noarch      1:1.9.4-7.el6.remi @remi
$ yum list installed |grep mysql-server
mysql-server.x86_64  5.5.25a-1.el6.remi @remi
$ yum list installed |grep phpMyAdmin
phpMyAdmin.noarch    3.5.2-1.el6.remi   @remi

 

4.7. Apahceを設定

Apacheを起動。

$ sudo service httpd start

 
Apacheの自動起動の設定をします。「3:on」になっていれば、OK。

$ sudo chkconfig httpd on
$ chkconfig --list httpd

 

4.8. MySQLを設定

MySQLを起動。

$ sudo service mysqld start

 
my.cnfを編集して、文字コードを設定します。

sudo vi /etc/my.cnf

[mysqld]
# Settings user and group are ignored when systemd is used (fedora >= 15).
# If you need to run mysqld under different user or group,
# customize your systemd unit file for mysqld according to the
# instructions in http://fedoraproject.org/wiki/Systemd
user=mysql
character-set-server=utf8    # 追加
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Semisynchronous Replication
# http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html
# uncomment next line on MASTER
;plugin-load=rpl_semi_sync_master=semisync_master.so
# uncomment next line on SLAVE
;plugin-load=rpl_semi_sync_slave=semisync_slave.so

# Others options for Semisynchronous Replication
;rpl_semi_sync_master_enabled=1
;rpl_semi_sync_master_timeout=10
;rpl_semi_sync_slave_enabled=1

# http://dev.mysql.com/doc/refman/5.5/en/performance-schema.html
;performance_schema


[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
character-set-server=utf8    # 追加

[mysql]
default-character-set=utf8    # 追加


MySQLを再起動。

$ sudo service mysqld restart


文字コード設定が反映されているか確認します。下の通りになっていれば、OK。

$ mysql

mysql> SHOW VARIABLES LIKE 'char%';
 +--------------------------+----------------------------+
 | Variable_name            | Value                      |
 +--------------------------+----------------------------+
 | character_set_client     | utf8                       |
 | character_set_connection | utf8                       |
 | character_set_database   | utf8                       |
 | character_set_filesystem | binary                     |
 | character_set_results    | utf8                       |
 | character_set_server     | utf8                       |
 | character_set_system     | utf8                       |
 | character_sets_dir       | /usr/share/mysql/charsets/ |
 +--------------------------+----------------------------+


簡易インストールスクリプトを使用して、MySQLの初期設定をします。

$ /usr/bin/mysql_secure_installation

Enter current password for root (enter for none):(旧パスワード:デフォルトなし)
Set root password? [Y/n] Y
New password: (新パスワード)
Re-enter new password: (新パスワード)
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y


パスワードを入力しないとMySQLにログインできないことを確認。

$ mysql
ERROR 1045 (28000): Access denied for user 'admin'@'localhost' (using password: NO)

$ mysql -u root -p


MySQLの自動起動の設定をします。「3:on」になっていれば、OK。

$ sudo chkconfig mysqld on
$ chkconfig --list mysqld

 

4.9. phpMyAdminを設定

yumで phpMyAdminをインストールすると、「/etc/httpd/conf.d/phpMyAdmin.conf」が生成され、「/usr/share/phpMyAdmin」ディレクトリへの設定が書き込まれます。

初期状態では、「127.0.0.1」(VPSサーバ内)からのみアクセスを許可している状態なので、インターネット経由でアクセスできるように設定します。


sudo vi /etc/httpd/conf.d/phpMyAdmin.conf

Alias /phpMyAdmin /usr/share/phpMyAdmin
Alias /phpmyadmin /usr/share/phpMyAdmin

<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     #Order Deny,Allow        # コメントアウト
     #Deny from All              # コメントアウト
     #Allow from 127.0.0.1  # コメントアウト
     #Allow from ::1             # コメントアウト
     Order Allow,Deny          # 追加
     Allow from All               # 追加
   </IfModule>
</Directory>


また「/etc/phpMyAdmin/config.inc.php」も自動生成されますが、少し編集が必要です。

その前に、パスフレーズを用意します。

sudo yum -y install expect
mkpasswd -l 24


sudo vi /etc/phpMyAdmin/config.inc.php

/*
 * This is needed for cookie based authentication to encrypt password in
 * cookie
 */
$cfg['blowfish_secret'] = '(生成したパスフレーズ)'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

/*
 * Servers configuration
 */
$i = 0;

/*
 * First server
 */
$i++;
/* Authentication type */
$cfg['Servers'][$i]['auth_type'] = 'cookie';    # cookieであればOK
・
・


Apacheを再起動。

$ sudo service httpd restart


ブラウザから「http://49.xx.xx.xx/phpMyAdmin/」にアクセスし、「root」、「4.8. MySQLを設定」で設定したパスワードでログインできればOKです。



ふー。長かった。。




参考

*1: 「yum -y install phpmyadmin」とすると、「2.11.11.3-2.el6.rf @rpmforge」がインストールされてしまいました。大文字小文字の違いもあるんですね。。