Server

Webサーバーに公開鍵認証を導入する

Category

Server

WebサーバーにSSH接続する際、WindowsならPuTTYやTera Term、MacならTerminalといったターミナルエミュレータを使って接続する場合が多いと思います。
その際、どれくらいセキュリティ対策をしていますか?
「ポートをデフォルトの22番から変更する」「rootでのログインを禁止する(必要な時だけ一般ユーザーからスイッチしてrootへ)」「sudoを使う(ユーザーが別のユーザーの特権レベルでプログラムを実行するためのコマンド)」等いろいろあります。
今回は、公開鍵認証の導入について書こうと思います。

Keyword:公開鍵,秘密鍵,Linuxコマンド,SSH,sshd_config

公開鍵認証

公開鍵認証を導入することで、Webサーバーには公開鍵(authorized_keys)、SSH接続時にローカル環境上に秘密鍵(id_rsa)がないとアクセスできなくなりますので、接続時のセキュリティが向上し、パスワードの総当たり等の強引な手法でシステムに侵入を試みるクラッカーの攻撃等を防止することができます。

以下の内容で設定していきます。

  • 公開鍵認証でアクセスするユーザーを作成
  • 公開鍵と秘密鍵の作成
  • sshd_configの設定
  • ターミナルエミュレータの設定(Tera Termで設定します)

公開鍵認証でアクセスするユーザーを作成

ユーザーの作成(※ユーザーを作成するため、rootにスイッチしておいてください)

/usr/sbin/useradd -d /home/ユーザー名
passwd ユーザー名

↓以下が出力されます↓
Changing password for user ユーザー名.
New UNIX password:パスワ-ド入力
Retype new UNIX password:再度パスワ-ド入力
passwd: all authentication tokens updated successfully.

chage -l ユーザー名

 “ユーザー名”には、作成するユーザー名を入力します。
-dはホームディレクトリを指定するためのオプションです。
useraddコマンドを使用するには、パスを通す必要がありますので、/usr/sbin/を付けてパスを通します(rootスイッチ時にsu -でパスを通した場合、/usr/sbin/は不要です)。
passwdコマンドでパスワードを設定します。
5~8行目が順に表示されますので、このユーザーのパスワードを入力しEnterキーを押します(passwd: all authentication tokens updated successfully.と表示されればパスワード設定は完了です)。
chage -lは作成したユーザーのパスワード有効期限の参照コマンドです。
“オプション(-lの部分)”を変更することで、パスワードの有効期限を設定できます。

manコマンドで対応可能なプロトコルバージョンと認証方式を確認

man ssh-keygen

表示内容を確認します。

-t type
    Specifies the type of key to create. The possible values are “rsa1”
    for protocol version 1 and “rsa” or “dsa” for protocol version 2.

RSA認証が可能で、プロトコルバージョン1と2(SSH1とSSH2)が使用できることが確認できます(サーバー環境は同じであるとは限りません。各自でご確認ください)。
RSA認証は公開鍵暗号方式の一つで、公開鍵暗号の標準として広く普及しています。
セキュリティ上SSH2で接続するようにしましょう。

公開鍵と秘密鍵の作成

認証鍵を作成したいユーザーにスイッチ

su - ユーザー名

“ユーザー名”に先程作成したユーザー名を入力します。
su -とすることで、作成したユーザー名のホームディレクトリに移動します。
suでスイッチした場合、環境設定を引き継いたままなので、カレントディレクトリがスイッチする前のままであったり、rootでしかパスが通らないコマンドもありますので、su -でスイッチしましょう!

ssh-keygenコマンドでプロトコルバージョンに応じた鍵ペアを作成

ssh-keygen -t rsa

表示内容を確認します。

Generating public/private rsa key pair. 
Enter file in which to save the key (/home/ユーザー名/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ユーザー名/.ssh/id_rsa.
Your public key has been saved in /home/ユーザー名/.ssh/id_rsa.pub.
The key fingerprint is:
XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ユーザー名@XXXXXXXX

1行目から順番に表示されます。
2行目は「作成したユーザーのディレクトリ内に.sshディレクトリ、その中にid_rsa(秘密鍵)を作成しますか?」という意味です。
作成する場合、Enterキーを押します。
3行目は「パスフレーズを入力してください」という意味です。
パスフレーズは、SSH接続した際に入力するパスワードともrootのパスワードとも違うものを入力してください。
入力したら続けてEnterキーを押します。
4行目は「再度同じパスフレーズを入力してください」という意味です。
入力したら続けてEnterキーを押します。
そうすると、/home/ユーザー名の中に.sshディレクトリ、その中にid_rsaとid_rsa.pubが作成されます。

.sshディレクトリに移動する前に、.sshのパーミッションを確認します。

.sshのパーミッションを確認

ls -al

700になっていればOKです。
lsはカレントディレクトリにあるファイルを表示するコマンドで、-alオプションを付けることで、隠しファイル(.で始まるファイル)や詳細(パーミッション、グループ、所有者、サイズ、タイムスタンプ等)を一覧表示できます。
パーミッションが変わっていない場合、chmod 700 .sshでパーミッションを変更します。

authorized_keysの作成

cd .ssh
cat id_rsa.pub >> authorized_keys
chmod 600 authorized_keys
rm id_rsa
rm id_rsa.pub

cdコマンドで.shhディレクトリに移動します。
catコマンドでid_rsa.pubの内容をauthorized_keysに出力します。
chmodコマンドでauthorized_keysのパーミッションを600に変更します。
rmコマンドでサーバー上には必要ないid_rsaとid_rsa.pubを削除します。

サーバーからid_rsaとid_rsa.pubを削除する前に、公開鍵認証に必要なid_rsaを忘れずダウンロードしておきましょう。
個人的には、FTPやHTTP経由でのダウンロードはちょっと怖い気がするので、viで開きコピーしたものをローカルでペーストしました。

sshd_configの設定

sshd_config

vi /etc/ssh/sshd_config

↓viでsshd_configの以下設定内容を確認する↓
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

viコマンドでsshd_configを開きます。
RSAAuthenticationがyesとなっていますので、RSA認証が可能な設定となっています。
PubkeyAuthenticationも同じくyesとなっていますので、公開鍵認証が可能な設定となっています。
AuthorizedKeysFileはauthorized_keysの格納されている場所です。
4~6行目はコメントアウトされていると思いますが、デフォルト値が上記のように正しく設定されていれば、コメントアウトしたままでも公開鍵認証は可能です(設定が有効にならない場合はコメントアウトを外してください)。

sshd_configの設定を変更した場合、SSHを再起動

/etc/init.d/sshd restart

ターミナルエミュレータの設定(Tera Termでの設定)

Tera Termでの設定

1にパスフレーズを入力します。
2にはローカル環境上やUSB内等に用意した秘密鍵(id_rsa)を選択します。
毎回全て入力するのが手間な場合、[設定]→[設定の保存]で設定した内容をINIファイルに保存できますので、次回接続時からはそのINIファイルを[設定]→[設定の読み込み]から選択後接続すると、パスフレーズの入力のみで済みます。

最後に、ターミナルエミュレータで公開鍵認証での接続ができたのを確認した後、パスワード認証を無効にします(パスワード認証を無効にすると、公開鍵認証でしかSSH接続できなくなりますので、設定の際はご注意ください)。

sshd_configの設定を変更

vi /etc/ssh/sshd_config

↓viでsshd_configの以下設定内容を確認する↓
PasswordAuthentication no

/etc/init.d/sshd restart

viコマンドでsshd_configを開きます。
PasswordAuthenticationをnoとすることで、パスワード認証が無効になります。
sshを再起動し、設定を反映させます。

List

関連記事(※当記事と関連性が高いと思われる記事)

Webデザインの効率化を図る

2011/12/23
Illustrator & Photoshop
スコア:28 ※スコアの数値が大きいほど、関連性の高い記事です。 Photoshopとの連携にIllustratorを使うのには、3つの理由があります。 イラストデータの活用 パスデータの活用 段組設定を活用し作業の効率化を図る の3... 続きを読む...

Web制作で活用したいツール

2012/09/30
Web制作で活用したいツール
スコア:28 ※スコアの数値が大きいほど、関連性の高い記事です。 パフォーマンス測定 GTmetrix オンラインツール サイトの表示速度を計測 パフォーマンスの改善点を調査 ブラウザとサーバー間のやり取りを調査※時間・データサイズ・... 続きを読む...

gzip圧縮でWebコンテンツを高速化

2012/05/25
gzip圧縮でWebコンテンツを高速化
スコア:28 ※スコアの数値が大きいほど、関連性の高い記事です。 Apacheのモジュールmod_deflateとmod_filter Apacheのモジュールである"mod_deflate"と"mod_filter"について少し説明... 続きを読む...

サーバーの設定変更

2012/02/17
サーバーの設定変更
スコア:5 ※スコアの数値が大きいほど、関連性の高い記事です。 php.iniの設定変更 viコマンドでphp.iniを編集 vi /etc/php.ini・・・viでphp.iniを開く ;メモリの上限を変更 memory_lim... 続きを読む...

よく使うLinuxコマンドの覚え書き

2012/01/29
Linuxコマンド
スコア:5 ※スコアの数値が大きいほど、関連性の高い記事です。 Linuxコマンド ファイル管理 #ディレクトリの移動 cd [ディレクトリ名] 例) cd /home/username usernameディレクトリに移動します。 ... 続きを読む...

おすすめ書籍・商品(※当記事と関連性が高いと思われる書籍・商品)

ページの先頭へ