さくらのVPS を使いはじめる（CentOS6.4）

ちまたで話題になってるさくらのVPS を使いはじめた。

月額 980 円で root 権限あり、個人用途なら十分に実用的となれば、契約しない手はないだろう。ちょうど 各種のオープンソースソフトウェアを動かすために root 権限が欲しいなあと思っていたので、これはまさに渡りに船である。

また、これまで Linux 学習用に VMware Player と CentOS を利用していたのだが、さくらのVPS も CentOS なので、この用途も引き継げそうだ。ゼロから実働するサーバー環境を整えることで、得られるものも多いだろう。

というわけで、さくらのVPS を使ってゆきながら、作業メモを残してゆく。VPS を再インストールしたときにも、このメモが役立つかもしれない。長くなることは確実なので、記事は数回に分ける予定。


##用意するもの
* サーバーの起動とコントロールパネル
* root のパスワード変更とユーザー作成
* SSH 接続用の RSA 鍵を作成する
* サーバーの SSH 設定を変更
* システムの更新

サーバーでおこなう作業のために、まずは SSH クライアントを用意する。私の場合はコマンド操作に TeraTerm、ファイルの送受信に WinSCP を利用している。この記事は、これらを利用しているものとして書く。

ファイル編集に関して Windows 中心でゆきたいなら WinSCP がとても役立つ。

ドラッグ & ドロップによるファイルの送受信や、ダブルクリックでサーバー上のファイルを開き、そのまま Windows 上で編集できる ( 正確には Windows 上に一時ファイルを作成し、更新されたらサーバーに送信している ) のが便利である。

尚、WinSCP にはインストーラ版とポータブル版が用意されているのだが、インストーラー版は PuTTYgen という便利ツールも一緒に入れてくれるので、こちらを強く推奨する。この記事でも PuTTYgen を RSA の鍵作成に利用する。

* [TeraTerm](http://sourceforge.jp/projects/ttssh2/releases/ "Tera Term Open Source Project")
* [WinSCP](http://winscp.net/eng/download.php "WinSCP Japanese site")

サーバーの起動とコントロールパネル

VPS を契約すると「[さくらのVPS] 仮登録完了のお知らせ」というメールが送られてくる。その中には以下のような部分がある。

##《VPSコントロールパネル ログイン情報》

VPSコントロールパネルでは、仮想サーバのリセットやリモート
コンソールでの接続、OSの再インストールなどを行うことができます。

 | :----------- | ------------: | 
 | URL | https://secure.sakura.ad.jp/vpscontrol/ | 
 | IPアドレス | XXX.XXX.XXX.XXX | 
 | パスワード | XXXXXXXXXXXXXXXXXXXXXXXX | 

URL が VPS を管理するためのコントロールパネルのログイン ページを示している。アクセスすると IP アドレスとパスワードの入力欄があるので、それぞれ入力してログインをおこなう。するとコントロールパネルのページに移動するので、「起動」ボタンを押す。

少し待ち、ステータス欄の「更新」ボタンを押すと、欄内の表示が稼働中に変わる。これでサーバーが起動した。サーバーの停止と再起動も、このページからおこなえる。

##VPS コントロールパネル

コントロールパネルには、他にもリモートコンソールや OS 再インストール機能が用意されている。

リモートコンソールは JavaScript で作られたブラウザ上のコンソールで、TeraTerm などを用意しなくても、ここからサーバーにログインしてコマンド実行をおこなえる。

コンソール上部の「リモートコンソール」というタイトル右のアイコンからクリップボードの内容も貼り付けられる。応答性もよい。尚、このコンソールは SSH でパスワードによるログインを禁止していても、関係なくログインできるので注意が必要である。

サーバーの設定をいじっている内に不安定になったり、起動不能になったときは OS の再インストールを利用することで、サーバーを初期状態に戻せる。

##OS再インストール

root のパスワードを入力して「確認」ボタンを押すと、再インストールをおこなえる。試してみたところ、5 分もかからずに完了した。どのような仕組みになっているのか謎なのだが、root のパスワードを変更していた場合、再インストール後の環境にもそれが引き継がれる。

##root のパスワード変更とユーザー作成

サーバーが起動したら、さっそくログインしてみよう。初期状態では root ユーザーだけが存在し、さくらインターネットから送られてきたメールに書かれていた初期パスワードが設定されているのだが、メールにも警告されているように、これは真っ先に変更する。

また、UNIX 系 OS では、通常のユーザーでログインし、root 権限が必要なときは sudo コマンドで特権を委譲してもらうか、su コマンドで一時的に root となるのが一般的である。基本は sudo、root 権限が必要な作業が大量にあるときだけ 万全の注意を払い root になるのがよいだろう。どちらにせよ、root 以外に必ずユーザーを作成する。

TeraTerm を起動して「新しい接続」ダイアログに IP アドレスを入力し、OK ボタンを押す。次の「SSH 認証」ダイアログではユーザー名に root、パスフレーズへ初期パスワードを入力して OK ボタンを押す。入力内容が適切なら、これでログインがおこなえる。

まずは root のパスワードを変更する。passwd と入力して Enter キーを押すと、新しいパスワードと確認の計 2 回、入力を求められる。成功すると以下のようになる。

>1　# passwd
>2　Changing password for user root.
>3　New UNIX password:
>4　Retype new UNIX password:
>5　passwd: all authentication tokens updated successfully.

私の場合、以前このブログで紹介したサービスでパスワードを生成しているのだが、ランダムな文字列で入力難度が高いので、クリップボードにコピーして貼り付けている。尚、TeraTerm の貼り付けは Alt + V か、メニューから「編集」→「貼り付け」を選ぶことでおこなる。パスワードそのものは KeePass というツールで管理しており、必要なときだけ取り出すようにしている。

次に、普段の作業をおこなうユーザーを作成する。これは useradd コマンドでおこなう。作成したなら、すぐにパスワードを設定する。これは先ほど使用した passwd コマンドにユーザー名を指定することでおこなる。成功すると以下のようになる。

>1　# useradd test
>2　# passwd test
>3　Changing password for user test.
>4　New UNIX password:
>5　Retype new UNIX password:
>6　passwd: all authentication tokens updated successfully.

ここで TeraTerm のメニューから「ファイル」→「新しい接続」を選び、さきほど作成したユーザーでログインできることを確認しておく。

##sudo を設定する
前回は root 権限が必要なコマンドなどは、su で root になってからおこなっていたが、root は万能なので、思いがけず重要なファイルやディレクトリを破壊する危険性がある。よって、コマンド単位で root 権限を与えるために sudo を利用する。

まずは sudo がインストールされていることを確認する。


>$ yum list installed | grep sudo
>sudo.x86_64         1.8.6p3-7.el6       @anaconda-CentOS-201303020151.x86_64/6.4

インストールされているので、wheel グループの設定をおこなう。wheel は root 権限を得られるユーザー グループである。これは usermod コマンドで設定できるのだが、root 権限が必要なので以下のように実行する。

>$ su -
>Password:
>\# usermod -G wheel XXXX

XXXX の部分がユーザー名になる。これで XXXX は wheel に属するようになったはずだが、本当にそうなっているのかを id コマンドで確認しておく。wheel に属しているならば、下記のように group へ 10(weel) という表記が加わる。

>\# id test
>uid=500(XXXX) gid=500(XXXX) groups=500(XXXX),10(wheel)

次は、wheel グループに属するユーザへ、sudo を許可する。root になっている状態で visudo コマンドを実行する。

>\# visudo

すると sudo の設定ファイルを編集するために vi が起動される。その中には、wheel の実行権限がコメントアウトされているので、

> Allows people in group wheel to run all commands
> \# %wheel        ALL=(ALL)       ALL

以下のようにそれを解除する。

> Allows people in group wheel to run all commands
> %wheel  ALL=(ALL)       ALL

変更したら Esc キーを押してコマンドモードに戻り、:wq とタイプして Enter キーを押す。これで設定ファイルへの変更が保存される。これで sudo が利用できるようになった。

###パスを通す

sudo を通して実行するプログラムは、/usr/sbin や /usr/local/sbin に置かれていることが多いのだが、初期状態の一般ユーザーではこれらのパスが通っていない。そのためコマンドを呼び出すときにフルパスで指定しなくてはならず面倒なので、パスを通す。

ユーザーの HOME に .bash_profile というファイルが置かれているはずなので、

>\# User specific environment and startup programs
>
>PATH=$PATH:$HOME/bin

それを開いて以下のようにパス設定を加えて保存する。

>\# User specific environment and startup programs
>
>PATH=$PATH:$HOME/bin
>PATH=$PATH:/sbin
>PATH=$PATH:/usr/sbin
>PATH=$PATH:/usr/local/sbin

保存したら再ログインするか、以下のコマンドで反映する。



##SSH 接続用の RSA 鍵を作成する

パスワード設定だけでは安全性に不安があるので、次は RSA 公開鍵認証を設定し、パスワードログインを禁止する。まず PuTTYgen を起動する。WinSCP をインストールしているならば、スタートメニューから「すべてのプログラム」→「WinSCP」→「鍵関連ツール」→「PuTTYgen」を選ぶ。

起動したら、ウィンドウ下部のラジオボタンから「SSH-2 RSA」を選択し、「Number of bits in a generated key」欄に 2048 と入力 ( これは鍵のビット数で多いほど強度が高い。現在は2048で十分 ) してから「Generate」ボタンを押す。

すると鍵の生成が開始され、プログレスバーが表示される。

だが、眺めているだけだと一向に進まない。画面のメッセージを読むと “Please generate some randomness by moving the mouse over the blank area.” とある。プログレスバーの下あたりでマウスカーソルをグリグリと動かすとバーがモリモリ進みはじめるので、完了するまで動かし続ける。

鍵の生成が完了すると、以下の画面になるので「Key passphrase」欄と「Confirm passphrase」欄に RSA 鍵を暗号化するためのパスフレーズを設定する。必須ではない。鍵自体が盗まれるような状態では、パスフレーズなんて気休めにしかならないという意見もあるので、そう思うなら設定しなくてもよい。私は設定する派である。

ここまでで鍵の生成と設定が完了したのでファイル化する。

「Save private key」ボタンを押して秘密鍵ファイルを id_rsa という名前で保存する。 拡張子は .ppk なので id_rsa.ppk というファイルが作成される。

次に秘密鍵ファイルを保存したフォルダに id_rsa.pub という名前のテキストファイルを作成し、メモ帳などで開き、PuTTYgen の「Public key for pasting into OpenSSH authorized_keys2 file」欄に表示されているテキストをコピーして貼り付けて保存する。

内容は以下のような感じになる。末尾は鍵の生成日時になるようだ。必ず 1 行になるので改行が入っていたら消しておく。これが公開鍵ファイルとなる。

>1　"ssh-rsa ...中略... rsa-key-20100909"

最後に、TeraTerm 用の秘密鍵ファイルを作成する。PuTTYgen のメインメニューから「Conversions」→ 「Export OpenSSH key」を選択して id_rsa という名前で保存する。拡張子はない。

ここまでの手順を終えると、以下のファイルが作成されるはず。

| ファイル名| 種類| 内容| 
|:-----------|------------:|:------------:|
| id_rsa.pub| 公開鍵| RSA 公開鍵。サーバー側に置く。 | 
| id_rsa.ppk| 秘密鍵| RSA 秘密鍵。WinSCP や PuTTYgen で利用。 | 
| id_rsa|  秘密鍵| OpenSSH 用 RSA 秘密鍵。TeraTerm などで利用。 | 

もし公開鍵や OpenSSH 用の秘密鍵を保存し忘れても、PuTTYgen で .ppk ファイルを開けば鍵を生成した状態に戻れるので、再度、保存すればよい。

##サーバーの SSH 設定を変更

TeraTerm からサーバーに RSA 認証をおこないたいユーザーでログインする。root ではないので注意する。そしてそのユーザーの HOME 直下に .ssh というディレクトリを作成する。コマンドの流れとしては以下となる。

>1 $ cd $HOME
>2 $ mkdir .ssh
>3 $ chmod 700 .ssh

ログインした時点で HOME にいるはずだが、念のため移動してからディレクトリを作る。パーミッションは 700 ( 自分だけ読み書き可能 ) にしておく。

次に WinSCP から同じユーザでログインし、作成した .ssh ディレクトリ内に RSA 公開鍵となる id_rsa.pub を送信する。そしてファイル名を authorized_keys に変更してパーミッションを 600 にする。名前の変更とパーミッション設定のコマンドは以下。

>1 $ mv id_rsa.pub authorized_keys
>2 $ chmod 600 authorized_keys

これで鍵の配置は完了。残りは SSH デーモンの設定変更となるので、su コマンドを実行して root になる。

>1 $ su -
>2 Password:
>3 #

次に /etc/ssh/sshd_config を編集する。この時点では root でパスワードログインできるので、vi に馴染んでいないなら WinSCP から開いて Windows 上のテキストエディタで編集してもよい。

PermitRootLogin ( root のログイン ) と PasswordAuthentication ( パスワードによるログイン ) を no に設定する。書式は設定名の後に yes で有効、no で無効、行頭に # でコメントアウトとなる。例えば、以下のように書く。

>1 #PermitRootLogin yes
>2 PermitRootLogin no
>3
>4 ... 中略 ....
>5
>6 #PasswordAuthentication yes
>7 PasswordAuthentication no

編集して保存したら、SSH デーモンを再起動する。

>1 # service sshd restart
>2 Stopping sshd:                                             [  OK  ]
>3 Starting sshd:                                             [  OK  ]

設定に誤りがあれば、コマンド実行時にエラーメッセージが表示されるので修正する。ここまでの手順がすべて適切ならば、以降はパスワードログインが禁止され、RSA 鍵の参照が必要となる。例えば TeraTerm の SSH 認証なら、以下のようになる。

##システムの更新

RSA 鍵でログインできるようになったら、最後にシステム更新をおこなっておく。これはいわば Windows Update のようなもので、定期的に実行することになるだろう。

更新には yum というコマンドを使用する。実行は root になるか sudo を利用する。今はまだ sudo を設定していない ( 次回におこなう予定 ) ので root からおこなう。

コマンドを実行すると、はじめにダウンロードするパッケージ一覧とサイズが表示され、ダウンロードの実行を問い合わせられるので、y と入力して Enter を押す。

>01 $ su -
>02 Password:
>03 # yum update
>04 
>05 ...
>06 Install       2 Package(s)
>07 Upgrade      16 Package(s)
>08
>09 Total download size: 34 M
>10 Is this ok [y/N]: y

しばらく待ってアップデート完了。

第2回へ続く