CentOS 7 開発サーバ構築 完全版 (v.0.0.5)


## 目次

* [初期設定](#%E5%88%9D%E6%9C%9F%E8%A8%AD%E5%AE%9A)
* [Apache 2.4](#apache-24)
* [MariaDB 10.1](#mariadb-101)
* [PHP 7.0](#php-70)
  * [Composer](#composer)
  * [phpMyAdmin](#phpmyadmin-46)
* [Node.js v6](#nodejs-v6)

## 初期設定

**インストール**

基本パッケージのインストール Git 含む

```bash
$ yum update
$ yum groupinstall -y Base
```

EPEL リポジトリの追加

```bash
$ yum install -y epel-release
```

**vim エイリアスを設定 (オプション)</h3>**

Bash 設定ファイルの編集

```bash
$ vim ~/.bashrc
```

```diff:~/.bashrc
+alias vi='vim '
```

再読み込み

```
$ source ~/.bashrc
```

<p class="text-right"><a href="#%E7%9B%AE%E6%AC%A1">▲ 目次に戻る</p>

## Amazon EC2 スタイル

### 機能

* ec2-user に相当するユーザー（キーペア認証、パスワードなし`sudo`）
* Amazon EC2 と同一の SSH 設定
* その他 同一設定の適用

### ユーザー

`admin` ユーザー (ec2-user)
ユーザー名 `admin` は OpenSSL サーバ証明書の発行にも使用

```bash
$ useradd -G wheel admin
```

### 鍵認証の設定

**リモート**

`admin` ユーザーとしてログイン

```bash
$ su - admin
```

適切なアクセス権限のフォルダとファイルを設置

```bash
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
$ touch ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
```

秘密鍵と公開鍵を作成

```bash
$ ssh-keygen -t rsa -C "dev.example.com"
Your identification has been saved in /home/admin/.ssh/id_rsa.
Your public key has been saved in /home/admin/.ssh/id_rsa.pub.
```

公開鍵は `authorized_keys` ファイルに追記して削除

```
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/.ssh/id_rsa.pub
```

---

**ローカル**

秘密鍵は `scp` コマンドでリモートからローカルに設置

```
$ scp root@dev.example.com:/home/admin/.ssh/id_rsa ~/.ssh/dev.example.com.pem
```

---

**リモート**

秘密鍵を削除してログアウト

```bash
$ rm ~/.ssh/id_rsa
$ exit  # admin
$ exit  # root
```

---

**ローカル**

```bash
$ vim ~/.ssh/config
```

```diff:~/.ssh/config
+Host dev.example.com
+    HostName        dev.example.com
+    User            admin
+    IdentityFile    ~/.ssh/dev.example.com.pem
```

`admin` ユーザーでログイン出来るか確認
失敗した場合は、再度 `root` ユーザーでログインして設定を再確認

```
$ ssh dev.example.com
```

### Sudo ユーザーの設定

`wheel` グループの `sudo` コマンドを無効

```bash
$ sudo visudo
```

```diff:/etc/sudoers
-Defaults    requiretty
+#Defaults    requiretty

-%wheel  ALL=(ALL)       ALL
+#%wheel ALL=(ALL)       ALL
```

個別設定で `admin` ユーザーのパスワードなし `sudo` コマンドを有効化

```bash
$ visudo -f /etc/sudoers.d/admin
```

```:/etc/sudoers.d/admin
admin ALL = NOPASSWD: ALL
admin ALL=(ALL) NOPASSWD:ALL
```

`admin` ユーザーとしてログインして `sudo` コマンドの動作確認

```bash
$ su - admin
$ sudo tail /var/log/secure
```

### SSH の設定

設定ファイルの編集
Amazon EC2 (Amazon Linux) と同一の設定

```bash
$ vim /etc/ssh/sshd_config
```

```diff:/etc/ssh/sshd_config
-#PermitRootLogin yes
+PermitRootLogin forced-commands-only

-PasswordAuthentication yes
+PasswordAuthentication no

-GSSAPIAuthentication yes
-GSSAPICleanupCredentials no
+#GSSAPIAuthentication yes
+#GSSAPICleanupCredentials no

-#PrintLastLog yes
+PrintLastLog yes
```

SSH を再起動
`admin` ユーザーの鍵認証に失敗している場合はログイン出来なくなるので注意

```bash
$ sudo systemctl restart sshd
```

**SELinux の無効化**

現在の状態を確認

```bash
$ getenforce
Enforcing
```

設定ファイルの編集

```bash
$ sudo vim /etc/sysconfig/selinux
```

```diff:/etc/sysconfig/selinux
-SELINUX=enforcing
+SELINUX=disabled
```

設定を反映させるために再起動

```bash
sudo reboot
```

`Disabled` となっていることを確認

```bash
$ getenforce
Disabled
```

**ホスト名を変更 (オプション)**

現在のホスト名を確認

```bash
$ hostname
```

設定ファイルの編集

```bash
$ sudo vim /etc/hostname
```

```diff:/etc/hostname
dev.example.com
```

設定を反映させるために再起動

```bash
$ sudo reboot
```

新しいホスト名を確認

```bash
$ hostname
dev.example.com
```

<p class="text-right"><a href="#%E7%9B%AE%E6%AC%A1">▲ 目次に戻る</p>

## OpenSSL (オプション)

> <a href="https://jp.globalsign.com/support/csr/04.html" target="_blank">[CSR生成] Apache 2.x + mod_ssl + OpenSSL（新規・更新）</a>

### SSL サーバ証明書の作成

秘密鍵を作成してパスフレーズを解除

```bash
$ sudo openssl genrsa -des3 -out dev.example.com.key 2048
$ sudo openssl rsa -in dev.example.com.key -out dev.example.com.key
```

秘密鍵から CSR を作成

```bash
$ sudo openssl req -new -key dev.example.com.key -out dev.example.com.csr
```

|フィールド              |説明                            |例             |
|------------------------|--------------------------------|---------------|
|Country Name※          |国を示す2文字のISO略語です。    |JP             |
|State or Province Name※|組織が置かれている都道府県です。|Osaka          |
|Locality Name※         |組織が置かれている市区町村です。|Osaka-shi      |
|Organization Name※     |組織の名称です。                |GlobalSign K.K.|
|Organization Unit Name  |組織での部署名です。<br />※指定がない場合は - （ハイフン）を入力してください。|Sales          |
|Common Name※           |ウェブサーバのFQDNです。        |dev.example.com|
|Email Address           |入力不要です。                  |               |
|A challenge password    |入力不要です。                  |               |
|An optional company name|入力不要です。                  |               |

**おすすめ認証局**

* <a href="https://www.ssl-store.jp/rapidssl/" target="_blank">SSLストア RapidSSL</a> 1年 1,620円 (2016年8月)
* <a href="https://www.namecheap.com/security/ssl-certificates/rapidssl/rapidssl.aspx" target="_blank">namecheap RapidSSL</a> $10.95/yr (英語、2016年8月)
* <a href="https://www.startssl.com/" target="_blank">StartSSL</a> 無料 (英語、高難度)

CSR を用いてSSL 認証局より発行した証明書から、サーバ証明書ファイルを作成
サーバ証明書、中間証明書、ルート証明書の順序で記述

```bash
$ sudo vim dev.example.com.crt
```

サーバ証明書、秘密鍵を配置
CSR はサーバから削除 (使い回しは非推奨)

```bash
$ sudo mv dev.example.com.crt /etc/pki/tls/certs/dev.example.com.crt
$ sudo mv dev.example.com.key /etc/pki/tls/private/dev.example.com.key
$ sudo rm dev.example.com.csr
```

<p class="text-right"><a href="#%E7%9B%AE%E6%AC%A1">▲ 目次に戻る</p>

## Apache 2.4

**インストール**

最新版をインストール

```bash
$ sudo yum install -y httpd
```

自動起動を有効

```bash
$ sudo systemctl enable httpd
```

Apache を起動

```bash
$ sudo systemctl start httpd
```

**ファイアウォールの設定**

<a href="https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html" target="_blank">4.5. ファイアウォールの使用</a>

HTTP(80) のポートを解放

```bash
$ sudo firewall-cmd --zone=public --add-service=http --permanent
$ sudo firewall-cmd --reload
```

**基本設定**

設定ファイルをバックアップ

```bash
$ sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
```

VirtualHost の設定

* <a href="https://wiki.centos.org/TipsAndTricks/ApacheVhostDefault" target="_blank">Control Default Apache Virtual Host</a>
* <a href="https://wiki.centos.org/TipsAndTricks/ApacheVhostDir" target="_blank">Apache Virtual Host Containers in Separate Files</a>

```bash
$ sudo vim /etc/httpd/cond.d/vhosts.conf
```

```apache:/etc/httpd/cond.d/vhosts.conf
<VirtualHost *:80>
    ServerAdmin webmaster@example.com
    DocumentRoot /var/www/dev.example.com/public_html
    ServerName dev.example.com

    <Directory /var/www/dev.example.com/public_html>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
</VirtualHost>
```

Apache を再起動

```bash
$ sudo systemctl restart httpd
```

### OpenSSL の設定

Apache OpenSSL モジュールの追加

```bash
$ sudo yum install -y mod_ssl
```

設定ファイルのバックアップ

```bash
$ sudo cp /etc/httpd/conf.d/ssl.conf /etc/httpd/conf.d/ssl.conf.org
```

設定ファイルの編集

```bash
$ sudo vim /etc/httpd/conf.d/ssl.conf
```

```diff:/etc/httpd/conf.d/ssl.conf
-#DocumentRoot "/var/www/html"
-#ServerName www.example.com:443
+DocumentRoot "/var/www/dev.example.com/public_html"
+ServerName dev.example.com:443

-SSLCertificateFile /etc/pki/tls/certs/localhost.crt
+SSLCertificateFile /etc/pki/tls/certs/dev.example.com.crt

-SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
+SSLCertificateKeyFile /etc/pki/tls/private/dev.example.com.key
```

**SSL優先 (オプション)**

HTTP(80) に来たユーザーを HTTPS(443) にリダイレクト

```bash
$ sudo vim /etc/httpd/conf.d/vhosts.conf
```

```apache:/etc/httpd/conf.d/vhosts.conf
<VirtualHost *:80>
    ServerName dev.example.com
    RewriteEngine On
    RewriteRule ^(.*) https://dev.example.com$1 [L,R=301]
</VirtualHost>
```

Apache の設定を再読み込み

```bash
$ sudo systemctl reload httpd
```

ファイアウォールの設定

<a href="https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html" target="_blank">4.5. ファイアウォールの使用</a>

HTTPS(443) のポートを解放

```bash
$ sudo firewall-cmd --zone=public --add-service=https --permanent
$ sudo firewall-cmd --reload
```

<p class="text-right"><a href="#%E7%9B%AE%E6%AC%A1">▲ 目次に戻る</p>

## MariaDB 10.1

CentOS 7 から MySQL から MySQL 互換の MariaDB に変更

**インストール**

* <a href="https://mariadb.com/kb/en/mariadb/yum/" target="_blank">Installing MariaDB with yum</a>
* <a href="https://mariadb.com/kb/ja/yum/" target="_blank">yum による MariaDB のインストール</a>

最新版の MariaDB リポジトリを追加

```bash
$ sudo vim /etc/yum.repos.d/MariaDB.repo
```

```:/etc/yum.repos.d/MariaDB.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
```

最新版をインストール

```bash
$ sudo yum install -y MariaDB-server MariaDB-client
```

自動起動を有効

```bash
$ sudo systemctl enable mariadb
```

MariaDB の起動

```bash
$ sudo systemctl start mariadb
```

**基本設定**

初期設定をインストール

```bash
$ 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                   |

設定ファイルを編集
文字コードを `UTF-8` に変更

```bash
$ sudo vim /etc/my.cnf.d/server.cnf
```

```diff:/etc/my.cnf.d/server.cnf
[mysqld]
+character-set-server=utf8
```

MariaDB の再起動

```bash
$ sudo systemctl restart mariadb
```

**ファイアウォールの設定 (オプション)**

<a href="https://access.redhat.com/documentation/ja-JP/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html" target="_blank">4.5. ファイアウォールの使用</a>

* MariaDB(3306) のポートを解放

```bash
$ sudo firewall-cmd --zone=public --add-service=mysql --permanent
$ sudo firewall-cmd --reload
```

<p class="text-right"><a href="#%E7%9B%AE%E6%AC%A1">▲ 目次に戻る</p>

## PHP 7.0

**インストール**

Remi リポジトリを追加

<a href="http://rpms.famillecollet.com/" target="_blank">Remi's RPM repository</a>

```bash
$ wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
$ sudo rpm -Uvh remi-release-7.rpm
$ rm remi-release-7.rpm
```

最新版の PHP をインストール

```
$ sudo yum --enablerepo=remi-php70 install php php-gd php-intl php-mbstring php-mysqlnd php-opcache php-pdo php-posix php-xml
```

**基本設定**

設定ファイルのバックアップ

```bash
$ sudo cp /etc/php.ini /etc/php.ini.default
```

PHP 設定ファイルを編集

```bash
$ sudo vim /etc/php.ini
```

```diff:/etc/php.ini
-;date.timezone =
+date.timezone = "Asia/Tokyo"
```

Apache を再起動

```bash
$ sudo systemctl restart httpd
```

### Composer

PHP パッケージマネージャー

<a href="https://getcomposer.org/download/" target="_blank">Download Composer</a>

ダウンロード

```bash
$ sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ sudo php -r "if (hash_file('SHA384', 'composer-setup.php') === 'e115a8dc7871f15d853148a7fbac7da27d6c0030b848d9b3dc09e2a0388afed865e6a3d6b3c0fad45c48e2b5fc1196ae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ sudo php composer-setup.php
$ sudo php -r "unlink('composer-setup.php');"
```

実行フォルダに移動

```bash
$ sudo mv composer.phar /usr/local/bin/composer
```

### phpMyAdmin 4.6

Web上で実行される MySQL (MariaDB) データベース接続クライアントツール

最新版をインストール (remi-test リポジトリ)

```
$ sudo yum --enablerepo=remi-test,remi-php70 install phpMyAdmin
```

許可IPアドレスを追加

```bash
$ sudo vim /etc/httpd/conf.d/phpMyAdmin.conf
```

```diff:/etc/httpd/conf.d/phpMyAdmin.conf
<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
+    Require ip IPアドレス
   </IfModule>
</Directory>
```

Apache を再起動

```bash
$ sudo systemctl restart httpd
```

動作確認
http://dev.example.com/phpMyAdmin/
http://dev.example.com/phpmyadmin/

<p class="text-right"><a href="#%E7%9B%AE%E6%AC%A1">▲ 目次に戻る</p>

## Node.js v6

<a href="https://nodejs.org/en/download/package-manager/" target="_blank">Installing Node.js via package manager</a>

最新版のリポジトリを追加

```bash
$ curl --silent --location https://rpm.nodesource.com/setup_6.x | sudo bash -
```

最新版をインストール

```bash
$ sudo yum install -y nodejs
```

基本パッケージをインストール (オプション)

* <a href="https://bower.io/" target="_blank">Bower</a>
* <a href="https://bower.io/" target="_blank">Less.js</a>

```bash
$ sudo npm install -g bower less
```

<p class="text-right"><a href="#%E7%9B%AE%E6%AC%A1">▲ 目次に戻る</p>

## TODO

* 見出し、内容の整理
* Node.js Apache リバースプロキシ
* FTP サーバ
* メールサーバ Postfix, Dovecot
* Ruby, Python
* nginx (未定)
* ファイアウォール trusted の追加 ssh mysql の削除
* Redmine