「さくらのVPS (CentOS 6.3) にLAMP環境を構築」を1年半ぶりに更新して、さくらのVPSにLAMP環境を構築する方法を改めてまとめてみたいと思います。
CentOS のバージョンは、現時点で 6.5 になっていました。
以下、ローカルPCはMac、さくらのVPSのホストアドレスは「49.xx.xx.xx」であるとします。
おおまかな手順
- rootユーザでの設定
- パスワードを変更
- SSHポート番号を変更
- iptablesを設定
- 作業用ユーザを作成
- パスワード認証からSSH鍵認証への切り替え
- SSH鍵ペアの設定
- SSH公開鍵をサーバに登録
- SSH configを編集
- rootによるログイン、パスワードでのログインを禁止
- Apache, MySQL, PHPインストール
- yumをアップデート
- remi, RPMForge, Fedora EPELリポジトリの追加
- Apache, MySQL, PHPをインストール
- Apahceを設定
- 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
参考