前回「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」がインストールされてしまいました。大文字小文字の違いもあるんですね。。