さくらのVPS 標準OSの環境構築(1) VPS導入とログイン方法の変更

## はじめに

趣味で試そうと初期費用無料時に契約していた[さくらのVPS](http://vps.sakura.ad.jp)をかなり放置していたのですが、今回ちゃんと使うことになったため、再構築をした際の手順をメモしました。

サーバー構築初心者が書いた備忘録になるため、当方は本記事を参考にセットアップしたことによって被った損害・損失に対し、いかなる場合でも一切の責任を負いませんのでご了承ください。
あくまでも自己責任でお願いします。


## 作業環境

* ローカル
    * OS X Yosemite 10.10.5 標準ターミナル
* サーバー
    * さくらのVPS [メモリ2GBプラン](http://vps.sakura.ad.jp/specification/)


## 設定に入る前に

ホスト名の設定は[ネームサーバ利用申請方法](https://help.sakura.ad.jp/app/answers/detail/a_id/2344)と[DNS逆引きレコードを変更する](https://help.sakura.ad.jp/app/answers/detail/a_id/2415)などを参照し、事前に設定しておきましょう。

また、今回は**さくらのVPS 標準OS**で構築していくため、[OSセットアップ情報](https://help.sakura.ad.jp/app/answers/detail/a_id/2126)を確認します。
標準OSでは日本語のグループパッケージなどのインストールや簡単な設定がされているため、今回の環境構築ではタイムゾーンやNTPの設定は飛ばします。

契約直後ならそのまま、OSを再インストールするなら[コントロールパネル](https://secure.sakura.ad.jp/vps/#/login)から**標準OSインストール**を実行してから次に進みましょう。


## VPSにログイン

ローカルのターミナルから`ssh`コマンドで、`root`ユーザーでログインします。
サーバーのIPアドレス、管理ユーザーの初期パスワードは**仮登録完了のお知らせ**メールに記載されています。

> ローカルで実行します
> `ssh root@xxx.xxx.xxx.xxx`
> > `xxx.xxx.xxx.xxx`の部分をサーバーのIPアドレスに差し替えてください。
> > 以降のサーバーのIPアドレスの表記は`xxx.xxx.xxx.xxx`に統一します。

```shell-session:実行結果
The authenticity of host 'xxx.xxx.xxx.xxx (xxx.xxx.xxx.xxx)' can't be established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)? <- yesを入力しEnter
Warning: Permanently added 'xxx.xxx.xxx.xxx' (RSA) to the list of known hosts.
root@xxx.xxx.xxx.xxx's password: 

SAKURA Internet [Virtual Private Server SERVICE]

[root@xxx.xxx.xxx.xxx ~]#
```

以降の作業はログイン方法の変更が完了するまで、このログイン状態のままで進めていきます。
別のユーザーやローカルでの作業が必要な場合、別ウィンドウまたは別タブで作業を行うようにしましょう。


## パッケージとシステムのアップデート

インストールされている全てのパッケージのアップデート、およびシステムのアップグレードを実行します。
実行前にキャッシュの削除を挟みます。

> `yum clean all && \`
> `yum -y update && \`
> `yum clean all && \`
> `yum -y upgrade && \`
> `yum clean all`
> > **Tips**
> > 上記のように`&&`で連結することでコマンドを連続実行できます。
> > またコマンド入力中に`\`を入力後`Enter`を押すとコマンド入力を改行することができます。


## システムのバージョン確認

現在のシステムのバージョンを確認します。

> `cat /etc/redhat-release`

```shell-session:実行結果
CentOS release 6.7 (Final)
```


## システムの日本語化

システムの言語設定を行います。
言語グループは初期状態でインストール済みのため、設定のみ行います。
`LANG`を下記に変更し、`SUPPORTED`を追記します。

> `vi /etc/sysconfig/i18n`

```diff:/etc/sysconfig/i18n
- LANG="C"
+ LANG="ja_JP.UTF-8"
+ SUPPORTED="ja_JP.UTF-8:ja_JP:ja"
```

設定を保存したら、設定ファイルを`source`コマンドで一度実行します。

> `source /etc/sysconfig/i18n`
> > これで再起動しなくても言語設定が適用されます


## 管理ユーザーのパスワード変更

初期パスワードから変更しておきましょう。
今回の自分のようにOSを再インストールした場合は、新しいパスワードを入力したはずなので飛ばします。

> `passwd`

```shell-session:実行結果
ユーザー root のパスワードを変更。
新しいパスワード: <- パスワードを入力
新しいパスワードを再入力してください: <- パスワードを再入力
passwd: 全ての認証トークンが正しく更新できました。
```


## ログイン用ユーザーの作成と設定

`root`ユーザーの代わりにログインするための新規ユーザーを作成します。
ユーザーグループは`wheel`を指定します。
あわせて新規ユーザーのパスワードも設定します。

> `useradd LOGIN_USER -G wheel && \`
> `passwd LOGIN_USER`
> > `LOGIN_USER`の部分を任意のユーザー名に差し替えてください。
> > 以降のログイン用ユーザーの表記は`LOGIN_USER`に統一します。

```shell-session:実行結果
ユーザー LOGIN_USER のパスワードを変更。
新しいパスワード: <- パスワードを入力
新しいパスワードを再入力してください: <- パスワードを再入力
passwd: 全ての認証トークンが正しく更新できました。
```


## ユーザーグループ権限の設定

管理者権限を利用できるユーザーグループを設定します。
`wheel`グループに属するユーザーのみ管理者権限を扱えるようになります。

> `visudo`
> > 下記`sudoers.tmp`は、直接`vi`コマンドで編集するのではなく`visudo`コマンドを使用して編集します。
> > 保存時に設定の文法チェックを行い、エラーがあった場合は再編集させてくれます。

```diff:/etc/sudoers.tmp
- # %wheel ALL=(ALL) ALL
+ %wheel ALL=(ALL) ALL
```


## SSH鍵ペアの作成と設置

公開鍵を設置するための`.ssh`ディレクトリをユーザー`LOGIN_USER`のホームディレクトリに作成します。
また作成した`.ssh`ディレクトリのパーミッションを`700`に変更し、所有者も`LOGIN_USER`に変更します。

> `mkdir /home/LOGIN_USER/.ssh && \`
> `chmod 0700 /home/LOGIN_USER/.ssh && \`
> `chown LOGIN_USER:LOGIN_USER /home/LOGIN_USER/.ssh`

次はローカル側で`ssh`の鍵ペアを作成します。(別ウィンドウまたは別タブを開きます。)
パスフレーズの入力は、入力しても空EnterでもOKです。
入力した場合、初接続時にパスフレーズの入力が発生します。
鍵ペア作成後、秘密鍵`id_rsa`のパーミッションを`0600`に変更します。

`HOST_NAME`の部分はホスト名に設定したドメイン名に差し替えてください。
以降のホスト名の表記は`HOST_NAME`に統一します。

> ローカルで実行します
> `mkdir -p ~/.ssh/HOST_NAME && \`
> `ssh-keygen -t rsa -f ~/.ssh/HOST_NAME/id_rsa && \`
> `chmod 0600 ~/.ssh/HOST_NAME/id_rsa`

```shell-session:実行結果
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): <- パスフレーズを入力(空Enter可)
Enter same passphrase again: <- パスフレーズを再入力(空Enterした場合、再度空Enter)
Your identification has been saved in /Users/user/.ssh/HOST_NAME/id_rsa.
Your public key has been saved in /Users/user/.ssh/HOST_NAME/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx user@MacBook-Pro.local
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|                 |
|                 | <- 例
|                 |
|                 |
|                 |
|                 |
+-----------------+
```

`scp`コマンドで、上述で作成した公開鍵`id_rsa.pub`をサーバーに`authorized_keys`としてコピーします。

> ローカルで実行します
> `scp ~/.ssh/HOST_NAME/id_rsa.pub LOGIN_USER@xxx.xxx.xxx.xxx:~/.ssh/authorized_keys`

サーバーにコピーされた公開鍵`authorized_keys`のパーミッションを`0600`に変更します。

> `chmod 0600 /home/LOGIN_USER/.ssh/authorized_keys`


## SSHのポート番号とログイン方法の変更

SSHの設定を変更します。
この設定の作業時は、ログイン中の`root`ユーザーは絶対にログアウトさせてはいけません。
設定に誤りがあった場合、ログインできなくなり取り返しがつかなくなります。(最悪OSを再インストールすることになります。)
接続確認は必ず別ウィンドウまたは別タブで行いましょう。

> `vi /etc/ssh/sshd_config`

まず、SSHのポート番号が標準の`22番`のままでは不正アクセスされやすいので変更します。
ポート番号は`0〜65535`から選べますが、`0〜1023`は[WELL KNOWN PORT NUMBERS](https://ja.wikipedia.org/wiki/TCP%E3%82%84UDP%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%83%9D%E3%83%BC%E3%83%88%E7%95%AA%E5%8F%B7%E3%81%AE%E4%B8%80%E8%A6%A7#.E3.82.A6.E3.82.A7.E3.83.AB.E3.83.8E.E3.82.A6.E3.83.B3.E3.83.9D.E3.83.BC.E3.83.88.E7.95.AA.E5.8F.B7_.280.E2.80.931023.29)に含まれ、`1024～49512`は登録ポートと呼ばれ既存のサービスと被る可能性がありますので、なるべく`49513〜65535`から選びましょう。

`SSH_PORT`の部分を任意のポート番号に差し替えてください。
以降のSSHのポート番号の表記は`SSH_PORT`に統一します。

```diff:/etc/ssh/sshd_config
- #Port 22
+ Port SSH_PORT
```

次に、`root`ユーザーでの直接ログインを禁止します。

```diff:/etc/ssh/sshd_config
- #PermitRootLogin yes
+ PermitRootLogin no
```

次に、公開鍵認証を有効化します。

```diff:/etc/ssh/sshd_config
- #RSAAuthentication yes
- #PubkeyAuthentication yes
- #AuthorizedKeysFile .ssh/authorized_keys
+ RSAAuthentication yes
+ PubkeyAuthentication yes
+ AuthorizedKeysFile .ssh/authorized_keys
```

最後に、パスワード認証を禁止します。

```diff:/etc/ssh/sshd_config
- PasswordAuthentication yes
+ PasswordAuthentication no
```

設定を保存したら、`sshd`を再起動します。

> `service sshd restart`

これで、ローカル側から公開鍵認証が行えるようになりました。
ターミナルを別ウィンドウまたは別タブで開き、接続確認をします。

> ローカルで実行します
> `ssh LOGIN_USER@xxx.xxx.xxx.xxx -i ~/.ssh/HOST_NAME/id_rsa -p SSH_PORT`

* 上記`ssh`コマンドでログインが成功する
* `su`コマンドおよび`sudo`コマンドが使用できる

この2点が確認できたら`root`ユーザーをログアウトしても大丈夫です。
これでログイン方法の設定は完了になります。


## 簡単にSSHへログインするための設定

ローカル側の`~/.ssh/config`に後述の設定することで`HOST_NAME`のみでログインできるようになります。

> ローカルで実行します
> `vi ~/.ssh/config`

下記の設定を追記します。

```diff:~/.ssh/config
+ Host HOST_NAME
+     HostName xxx.xxx.xxx.xxx
+     Port SSH_PORT
+     User LOGIN_USER
+     IdentityFile ~/.ssh/HOST_NAME/id_rsa
```

これで`HOST_NAME`のみでログインできるようになりました。

> ローカルで実行します
> `ssh HOST_NAME`


## 次回

[さくらのVPS 標準OSの環境構築(2) ファイアウォールとシステムの設定](http://qiita.com/takahiko-takei/items/ee233aac59976ce55f11)