akiyoko blog

akiyoko の IT技術系ブログです

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

さくらのVPS (CentOS 6.3) にLAMP環境を構築」を1年半ぶりに更新して、さくらのVPSにLAMP環境を構築する方法を改めてまとめてみたいと思います。
CentOS のバージョンは、現時点で 6.5 になっていました。

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

やりたいこと

  • さくらのVPS (CentOS 6.5) にLAMP環境を構築する
  • このあと、Ansible で自動化する






おおまかな手順

  • rootユーザでの設定
    1. パスワードを変更
    2. SSHポート番号を変更
    3. iptablesを設定
    4. 作業用ユーザを作成
  • パスワード認証からSSH鍵認証への切り替え
    1. SSH鍵ペアの設定
    2. SSH公開鍵をサーバに登録
    3. SSH configを編集
    4. rootによるログイン、パスワードでのログインを禁止
  • Apache, MySQL, PHPインストール
    1. yumをアップデート
    2. remi, RPMForge, Fedora EPELリポジトリの追加
    3. Apache, MySQL, PHPをインストール
    4. Apahceを設定
    5. MySQLを設定

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

さくらのVPSに初めてログインする時は、ターミナルから

$ ssh root@49.xx.xx.xx

でSSH接続します。
パスワードを聞かれるので、「仮登録完了のお知らせメール」の「[管理用ユーザ] 初期パスワード」を使います。

# Linuxカーネル
$ uname -a
Linux xxx.sakura.ne.jp 2.6.32-431.1.2.0.1.el6.x86_64 #1 SMP Fri Dec 13 13:06:13 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

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

なお、さくらのVPSには lsb_release はデフォルトでは入ってないようです。

$ lsb_release -a
-bash: lsb_release: コマンドが見つかりません

 

2. rootユーザでの設定(サーバ側)

まずは、以下の最低限のセキュリティ設定をし、次に、作業用ユーザを作成して sudoコマンドを利用できるように設定します。

  • rootの初期パスワードを変更
  • SSHポート番号を変更
  • SSHのみを許可するように iptablesを設定

 

2.1. パスワードを変更

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

$ passwd

 

2.2. SSHポート番号を変更

$ vim /etc/ssh/sshd_config  # /etc/ssh/ssh_config と間違えないように注意!
---
#Port 22
Port 10022

or

$ sed -i.org -e "s/#Port 22/Port 10022/" /etc/ssh/sshd_config


設定を変更したら、SSHを再起動します。

$ service sshd restart

 

2.3. iptablesを設定

SSHのみを許可するように iptables を設定します。
まずは、デフォルトの状態を確認します。

$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

デフォルトでフルオープンになっているので、SSH(10022番に変更済み)だけオープンするように変更します。

$ cat <<EOF > /etc/sysconfig/iptables
*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# add start
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 10022 -j ACCEPT
# add end

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT
EOF


iptablesを再起動

$ /etc/init.d/iptables restart

参考


 

2.4. 作業用ユーザを作成

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

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

次に、visudoコマンドを実行して、wheelグループに属するユーザにsudoコマンドの実行を許可します。sudo実行時のパスワードはなしでよいでしょう。

$ visudo
---
## Same thing without a password
# %wheel        ALL=(ALL)       NOPASSWD: ALL
%wheel        ALL=(ALL)       NOPASSWD: ALL    # コメントを解除

or

$ sed -i.org -e "s/^#\s*\(%wheel\s\+ALL=(ALL)\s\+NOPASSWD:\s\+ALL\)$/\1/" /etc/sudoers


なお、その他のユーザ関連コマンドは以下になります。参考までに。

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

 

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

さくらのVPSからログアウトし、作業用ユーザでログインできることを確認します。

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

 

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

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

 

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

さくらのVPSからログアウトし、ローカル側で SSH鍵ペアを作成します。
パスフレーズ無し、鍵ファイル名は「sakura_rsa」とします。

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/akiyoko/.ssh/id_rsa): /Users/akiyoko/.ssh/sakura_rsa
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/akiyoko/.ssh/sakura_rsa.
Your public key has been saved in /Users/akiyoko/.ssh/sakura_rsa.pub.

 

3.2. SSH公開鍵をサーバに登録

SSH公開鍵をサーバ側(さくらのVPS)に登録します。

(サーバ側)

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

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

$ chmod 600 ~/.ssh/authorized_keys

or
(ローカル側)

# Mac には ssh-copy-id が入っていないので、さくらのVPSからコピー
$ sudo scp -r root@49.xx.xx.xx:/usr/bin/ssh-copy-id /usr/local/bin/

# 公開鍵を転送
$ ssh-copy-id -i ~/.ssh/sakura_rsa.pub root@49.xx.xx.xx

 

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

ローカル側の SSH config を設定します。

$ vim ~/.ssh/config
---
Host sakura
  Hostname 49.xx.xx.xx
  Port 10022
  User admin
  IdentityFile ~/.ssh/sakura_rsa

 

$ ssh sakura

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

 

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

サーバに作業用ユーザでログインし、sshd_config を編集します。

$ sudo vim /etc/ssh/sshd_config
---
#PermitRootLogin yes
PermitRootLogin no

#PasswordAuthentication yes
PasswordAuthentication no

or

$ sudo sed -i.org "s/^#PermitRootLogin yes/PermitRootLogin no/" /etc/ssh/sshd_config
$ sudo sed -i.org "s/^#PasswordAuthentication yes/PasswordAuthentication no/" /etc/ssh/sshd_config

 
SSHを再起動

$ sudo service sshd restart


 

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

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

現時点のさくらのVPSでは、Fedora EPEL リポジトリが初めから入っているようです。その状態では Apache 2.2.15、PHP 5.3.3、MySQL 5.1.71 がインストールされたですが、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
PHP 5.3.3 5.4.23 5.3.3
MySQL 5.1.71 5.5.35 5.1.71

 

4.1. yumをアップデート

まずは、yumをアップデートします。

$ yum -y update

 

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

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

vim ~/.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.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 vim /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 vim /etc/yum.repos.d/rpmforge.repo
---
[rpmforge]
#enabled=1
enabled=0    # 無効にする

 
 

4.5. Fedora EPELを一旦無効化

さくらのVPSでは、Fedora EPELのリポジトリが初めから入っているようなのですが、「enabled=1」になっていたので一旦無効化します。

$ sudo vim /etc/yum.repos.d/epel.repo
---
[epel]
#enabled=1
enabled=0    # 無効にする

 

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

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

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


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

# Apacheのバージョン確認
$ httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Aug 13 2013 17:29:28

# PHPのバージョン確認
$ php -v
PHP 5.4.23 (cli) (built: Dec 11 2013 06:48:07)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies

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

$ yum list installed | grep httpd
httpd.x86_64            2.2.15-29.el6.centos
httpd-tools.x86_64      2.2.15-29.el6.centos
$ yum list installed | grep php
php.x86_64              5.4.23-1.el6.remi
php-cli.x86_64          5.4.23-1.el6.remi
php-common.x86_64       5.4.23-1.el6.remi
$ yum list installed | grep mysql-server
mysql-server.x86_64     5.5.35-1.el6.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 vim /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 'user1'@'localhost' (using password: NO)

$ mysql -u root -p


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

$ sudo chkconfig mysqld on
$ chkconfig --list mysqld

参考