「よく分かる公開鍵認証」~初心者でもよくわかる!VPSによるWebサーバー運用講座(2)

「よく分かる公開鍵認証」~初心者でもよくわかる!VPSによるWebサーバー運用講座(2)

VPSによるWebサーバー運用講座の連載2回目です。
今回は、安全にsshのログインを行うため「公開鍵認証(こうかいかぎにんしょう」の設定をします。
公開鍵認証は、そのメカニズムが複雑なため、設定する段階で挫折してしまう方が多いようです。ここでは理論はとりあえず置いといて、設定ができることに重点をおき説明します。今まで公開鍵認証の設定で苦労した方にご一読いただければ幸いです。

sshのログインをもっと安全にする。公開鍵認証を使う

sshはサーバー上で任意のコマンドを実行できる便利なサービスですが、それを使ってサーバーを自在にコントロールできるため、クラッカーにとっては格好の標的になります。したがって、不正ログインなどの攻撃を防ぐため安全対策に気をつかわなければなりません。

sshのログインについては、以前に書いたエントリ
「サーバーをさわってみよう!」~初心者でもよくわかる!VPSによるWebサーバー構築講座(2)の中で、rootユーザーで直接ログインすることを禁止し、一般ユーザーでのみログインできるように設定変更しましたが、より安全に使うために公開鍵認証を使ってログインするようにしましょう。
公開鍵認証の仕組みを導入することで、「鍵を持った人のみがsshログインできるようにする。」ことができます。

現時点では、
rootユーザーで直接sshログインはできませんが、一般ユーザーはパスワードが分かれば誰でもログインできてしまいます

これを、公開鍵認証方式を使って
鍵を持っている人(パソコン)からのみ、一般ユーザーによるログインを許可する。
という方式に変更します。
これにより、パスワード総当り攻撃などで第三者に不正にsshのログインを試みられても、鍵が盗まれない限り破られることはありません。

公開鍵認証方式でログインするには鍵が2つ必要です。パソコン側に置く秘密鍵ファイルと、サーバー側に置く公開鍵ファイルです。
秘密鍵ファイルは人に知られてはいけません。公開鍵ファイルは、人に知られても良い(公開できる)ファイルです。
この2つのファイルが揃って初めて公開鍵認証によるログインが可能になります。
公開鍵認証では、sshのログイン時に使ったパスワードの代わりに「パスフレーズ」を使用します。
サーバーへログインするパスワードと似たようなもので、自分が決めた文字列を設定できますが、これはサーバーへログインするためのものではなく、秘密鍵にアクセスするための秘密の文字列です。

通常のパスワード認証と、公開鍵認証のみを使った認証とのメリット・デメリット比較

しかし、公開鍵認証を使ったログインはメリットばかりではありません。ここで通常のログインとのメリット・デメリットを比較してみます。

通常のパスワード認証によるログイン

メリット ・ログインが簡単。
・どのパソコンからでもログインできる。
デメリット ・悪意ある第三者からの総当り攻撃を受けてサーバーに不正侵入される可能性が高まる。

公開鍵認証のみによるログイン

メリット ・秘密鍵を持っているパソコンからの接続のみ許可し、鍵を持っていないパソコンからはログイン出来ないのでセキュリティが向上する。
デメリット ・鍵を作成したり管理する手間がかかる。
・パソコンの故障や紛失などで秘密鍵を紛失したら、再び鍵を作りなおさないといけない。
・どこからでも接続できない。

以上の特徴を踏まえた上で、それでは実際に秘密鍵、公開鍵の鍵ペアを作りましょう。

Macの場合の公開鍵認証のやり方

ターミナルを開いた状態では、現在のパスはユーザーのホームディレクトリ( /Users/(ユーザーID) )になっていると思います。
ls -a コマンドでファイルのリストを表示し、もし .ssh ディレクトリが無ければ作成してください。
ディレクトリのアクセス権限は本人しか読み書きできない権限(700)にします。

$ mkdir .ssh
$ chmod 700 .ssh

.ssh ディレクトリに移動し、ssh-keygenコマンドを実行して秘密鍵と公開鍵のペアを作ります。
パスフレーズは自分が決めた適当な文字列を使用してください。

$ cd .ssh
$ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/Users/xxxx/.ssh/id_rsa): (リターン)
Enter passphrase (empty for no passphrase): (パスフレーズを入力してリターン)
Enter same passphrase again: (パスフレーズを入力してリターン)
Your identification has been saved in /Users/xxxx/.ssh/id_rsa.
Your public key has been saved in /Users/xxxx/.ssh/id_rsa.pub.
The key fingerprint is:
93:b3:41:fe:3a:cb:ba:f3:6b:99:fe:6f:d4:21:dd:fb xxxx@local
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|                 |
|        .    . . |
|       o .  . o .|
|        S    o ..|
|         *  . .. |
|        .o..    .|
|      ..=.  .   E|
|      oBB=.o.    |
+-----------------+

この後、ls で確認すると id_rsaid_rsa.pub という2つのファイルが作成されているのが確認できます。

id_rsaファイルが秘密鍵ファイルです。
id_rsa.pubファイルが公開鍵ファイルです。このファイルに書かれている情報はログインするサーバー側に置きます。
以下のcatコマンドで表示される内容をクリップボードなどにコピーしておいて下さい。

$ cat id_rsa.pub

Windowsの場合の公開鍵認証のやり方

VPSによるWebサーバー構築講座(2)で紹介した、sshクライアントソフト「RLogin」を使って接続する方法を紹介します。
RLoginをまだインストールしていない方は RLoginのサイトからソフトウェアをダウンロードしてインストールしておいてください。

公開鍵認証で接続するための接続設定を新規作成します。
RLogin を起動して「新規」ボタンをクリックしてください。
すでにユーザID/パスワードでログインする通常の接続設定がある場合でも、それを編集するのではなく「新規」で別の接続設定を作成することをおすすめします。

最初の「Server New Entry」画面では以下の赤線部分を設定してください。

左側にあるツリーメニューの「プロトコル」を選択して表示される項目の「認証キー」クリックします。

認証キー画面では「作成」ボタンをクリックします。このボタンで公開鍵/秘密鍵を作ることができます。

パスフレーズとして任意の文字列を設定してください。

設定後、「認証キーリスト」に「RSA2」のキーができますので、これを選択したあと「エクスポート」をクリックします。

「エクスポート」で秘密鍵をファイルとして保存することができます。例としてファイル名を「id_rsa」として保存します。
保存する際、先ほど設定したパスフレーズを再度入力する必要があります。(パス再入力の欄は入力の必要ありません)

サーバーの基本設定に戻ります。ログイン時に秘密鍵を使う設定をするため、SSH Identity Keyの「参照」をクリックします。
ここで、先ほど保存した秘密鍵ファイルid_rsaを指定します。

これで秘密鍵の設定は完了です。

公開鍵は以下の手順で取得できます。
プロトコルメニューから「認証キー」をクリックします。

認証キーリストからRSA2を選択して「公開鍵」ボタンをクリックします。

ランダムな文字列の組み合わせからなる公開鍵文字列が表示されます。これをクリップボードにコピーしておいてください。

最後に、OKボタンでダイアログを閉じて、設定もすべてOKで完了させて設定を完了してください。

サーバー側の公開鍵設定

一般ユーザーのIDであるvpsuserでログインしたあと、ホームディレクトリ(ログイン直後のディレクトリ)で以下のコマンドを実行してください。

$ mkdir .ssh
$ chmod 700 .ssh
$ cd .ssh

.sshというディレクトリを作って、権限を700(自分のみ読み書き可能)にしています。
そして.sshディレクトリの下に移動しています。

そこで、authorized_keysというファイルを作成します。

$ vim authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCvuTUNCz4I5kYcwHTgOsRkEtw0oQzqKYzqqWt0iqPgbcvEsEsiVAQ6mYj7yNmHTxKCKJtOBbiWgJ+oVQtXELjLXVmceFeaDpOHo9FxkbhQx/AvAvEf9Ih5RXJOhCWw6eD/9kFqBjwfpoz+FyTCM5nQY9Da+QptvEjkf6baRqk3+JtmpEmzpDoPnQ39Nl8KirHuvCn2MMvI40g/voFFmQ8xadQKpOShzpzLlVfCmE8CMJo8G7Qab1/fRhJwjMkU2UpJImJb7wdeZJeHiJuCMVOkpzrPEctNyZGqAvsgLNU3TctceCVoV4FRxKGn3WkNZxSeFSIYrZwd5Xpo54K2R3ev xxx@local

vimが立ち上がりますので、iキーでインサートモードにして、先ほどコピーした公開鍵の文字列を上記のように貼り付けます。
:wqコマンドで終了し、以下のchmodコマンドで、このファイルを自分のみ読み書き可能にしておきます。

$ chmod 600 authorized_keys

これで秘密鍵、公開鍵の設定は完了です。
新しくターミナルを立ち上げ、公開鍵認証でログインできるかどうか確認してみましょう。

公開鍵認証方式で接続してみる

Macの場合は、ターミナルでsshコマンドに-i オプションをつけて秘密鍵ファイルを指定すると、公開鍵認証での接続になり、パスフレーズを入力すると接続できます。

$ ssh -i .ssh/id_rsa vpsuser@xxx.xxx.xxx.xxx

Windowsの場合は、RLoginで先ほど設定した公開鍵認証で接続をして、パスフレーズ入力で接続できることを確認してください。

パスフレーズを入力してうまく接続できれば成功です。
もし、うまくいかない場合は、.sshauthorized_keys の権限を確認してみてください。
また、秘密鍵と公開鍵を混同していないか、とか、authorized_keysに正しく公開鍵の文字列が欠けることなく設定できているかなどをチェックしてみてください。

通常ログインでの接続を禁止する

公開鍵認証での接続設定ができましたので、以後はこの方式でssh接続しましょう。
逆に、今まで使っていたユーザID/パスワードによるログインはできないように設定変更する必要があります。

以前、rootの直接ログインを禁止する設定を行う際に編集した、sshの設定ファイルsshd_configを再度編集します。

$ su -
# cd /etc/ssh
# vim sshd_config

PasswordAuthenticationと書いてある記載を探して yesnoに変更します。

PasswordAuthentication no

設定が終わったら、:wqvimを終了して、sshdを再起動します。

# service sshd restart

これで、パスワードログインはできなくなったはずですが、念のため以下ができていることを確認しましょう。
もし公開鍵認証の設定がうまくできていない場合、次回から通常ログインもできないし公開鍵認証でのログインもできない事態になる可能性があるので、確認は念入りに行なっておいた方が良いです。

  1. 通常のユーザID/パスワードをつかったログインができない(禁止されている)こと。
  2. 公開鍵認証を使ったログインができること。

上記2点確認できれば設定は完璧にできていますので安心してください。

注意すること

これら一連の設定で、通常のパスワードログインでサーバーにアクセスすることができなくなっているので、万が一パソコンが故障した場合などに、代わりのパソコンを使ってサーバーにアクセスすることが出来なくなります。

そのようなケースに備えて、秘密鍵ファイル( id_rsa )をバックアップしておくことをおすすめします。秘密鍵さえあれば、別のパソコンでも公開鍵認証を行うことができます。

もし、秘密鍵ファイルをなくしてしまった場合は、sshを使ってログインができなくなりますが、奥の手があります。
さくらのVPSのコンソールを使ってログインできますので、そこからログイン後、sshd_configファイル内のPasswordAuthenticationyes に設定しなおして、通常パスワードログインを一時的に有効にしてください。

Webサーバー運用講座の第2回目は以上です。
次回は性能監視、リソース監視をするツールmuninを紹介します。

おしらせ