サーバリテラシ2006 - 第3回 SSHサーバの構築

jodeci

サーバリテラシ2006 - 第3回SSHサーバの構築

今回はSSHサーバを構築してリモートログインで自宅など、リテラシの教室から見て外のネットワークから各自のマシンを動作させます。

ネットワーク用語

今回のサーバリテラシで使用するネットワークの種類と構成する機器の意味について説明します。

IPアドレスとネットワーク

IPアドレスとは、ネットワークにある機器を個別に住所付けしたりするもので、現行では全世界で約43億個しかIPアドレスが無いため、近年枯渇してきました。その枯渇対策としてネットワークをLAN(ローカルエリアネットワーク)とWAN(ワイドエリアネットワーク)の二つに分け、LANにはローカルからしか利用できないネットワークのアドレスとしてプライベートIPアドレスを、WANにはインターネットで使用できるグローバルIPアドレスを割り当てることになりました。

LAN
企業内や学校内などの限られた場所でのコンピュータ同士で通信をするネットワーク
WAN
LANから見て外側のネットワーク

ルータ

ルータというのは1つのグローバルIPアドレスをLAN内の複数のマシンで共有する機能と、WANからきたデータを指定のマシンに転送する、フォワーディングという機能などを持った機器です。LAN内のマシンはルータの機能を使ってWANにアクセスできるのですが、WANからはフォワーディングの機能によって転送されるマシンしかアクセスすることができません。

ハブ

ハブというのは、LANなどで使われる集線装置でネットワークに接続できるマシンの台数を増やすことができます。また、ハブ同士を接続してさらに接続できるマシンの台数を増やすこと(カスケード接続)も可能ですが、カスケード接続を何段にも行うと通信に使う信号が減衰し、正しくデータが送れなくなる事もあります。

ネットワーク構成

今回のネットワーク構成は下図のようになっています。

各自のマシンはルータの機能でWAN側にアクセスできますが、各自のマシンはプライベートIPアドレスしか持っていないためWANから直接アクセスすることはできません。そこで各自のマシンと同じLAN内で、かつフォワーディング機能によりWANからアクセスできるStepサーバを経由し、ポートフォワーディングをすることにより、自宅からリモートで各自のマシンにアクセスできるようにします。

ポートフォワーディング
ポートフォワーディングとは、リモートログイン先のコンピュータと同じローカルネットワークにあり、かつWANからのアクセスを許可したマシンの特定のポートに対して送られてきたデータを別の通信経路を使ってLAN内の通信としてリモートログイン先のコンピュータの特定のポートに送り、アクセスすることです。

OpenSSH

今回の講義では、各自のマシンをリモートで操作するためにOpenSSHというソフトウェアを使います。OpenSSHにはサーバ、クライアント双方のソフトウェア含まれます。今回は各自のマシンにOpenSSHを、SSHクライアントにはPuTTYというWindowsのアプリケーションを利用してSSH接続を行います。SSH接続はすべての通信を暗号化し、暗号化通信には秘密鍵と公開鍵という対になる2つの鍵を使う公開鍵暗号方式を利用します。

秘密鍵
公開鍵暗号方式で使用される一般には絶対に公開してはならない鍵。公開鍵をなくしてしまった場合、秘密鍵を元に同じ公開鍵を再度作成することができる。
公開鍵
公開鍵暗号方式で使用される一般に公開してもよい鍵。秘密鍵とは違い、秘密鍵をなくしてしまった場合、公開鍵から作成することはできない。

今回の作業はWindows上から行うので、鍵の生成をWindowsで動作するSSHクライアントのPuTTYを使って生成します。

なお、公開鍵暗号方式とSSHの詳しい接続方法についてはLinuxリテラシ2006第5回 SSH/SCPをご覧ください。
参考:Linuxリテラシ2006第5回 SSH/SCP

鍵の生成

puttygen

「スタート→プログラム→PuTTY→puttygen」でputtygenを起動します。「生成」をクリックします。

ここで、マウスカーソルの動きで乱数を生成します。その乱数で鍵をつくるので、マウスカーソルを動かし続けます。

生成が完了すると下図のようになります。ここで鍵のパスフレーズを入力します。「鍵のパスフレーズ」と「パスフレーズの確認」に任意に入力します。「鍵のコメント」には学部のメールアドレスを入力します。

この時入力したパスフレーズは接続時に必要になるので忘れないで下さい。
入力が終わったら「秘密鍵の保存」をクリックしてファイル名を入力し保存します。保存場所は「C:\Documents and Settings\ユーザ名\My Documents」にsshディレクトリを作るなどして、そこに保存します。

Stepサーバへの接続

これから先の説明で「xx」が出てきますが、それは各自のマシン番号のことを指します。

Stepサーバに公開鍵を登録

現在Stepサーバには公開鍵を登録していないので皆さんはログインできません。そこで、メールで公開鍵を送ってもらい、こちらで公開鍵を登録します。

server-ml@cis.k.hosei.ac.jp

に公開鍵をペーストして送信してください。

Stepサーバへ接続

「スタート→プログラム→PuTTY→putty」でputtyを起動します。

「セッション」のカテゴリにある「ホスト名(またはIPアドレス)」に[step.rat.cis.k.hosei.ac.jp]と入力します。

「ウィンドウ→変換」のカテゴリにある「受信されるデータの文字セット変換」の項目で[UTF-8(CJK)]を選択します。

「接続→データ」のカテゴリにある「自動ログインのユーザ名」を[common]と入力します。

「SSH→認証」のカテゴリにある「認証パラメータ」で自分の秘密鍵を入力します。
「参照」で自分のプライベートキーを指定します。

「SSH→トンネル」のカテゴリで「源ポート」を[221xx]、「送り先」を[10.0.10.1xx:22]と入力し,「追加」をクリックします。

「セッション」のカテゴリに戻り、「ストアされたセッションの読込、保存、削除」で[step.rat.cis.k.hosei.ac.jp]と入力して保存します。今までの設定を「step.rat.cis.k.hosei.ac.jp」というタイトルで保存され、再度同じ設定が使うことができます。

保存が終わったら「開く」をクリックし、Stepサーバに接続します。すると下図の画面が出るので「はい」を選択します。

接続されると下図の画面がでるので、鍵のパスフレーズを入力します。

Using username "common".
Authenticating with public key "mail address"
Passphrase for key "mail address":

接続が成功すると下図のようになります。

Last login: Thu Nov 30 19:00:00 2006 from 10.0.10.--
[common@step rat]$

各自のマシンへの接続

再度puttyを起動し、「セッション」のカテゴリで接続先を[localhost]、「ポート」を[221xx]と入力します。

次に、「ウィンドウ→変換」、をStepの設定と同じで「受信されるデータの文字セット変換」の項目で[UTF-8(CJK)]を選択します。

「セッション」のカテゴリに戻り、設定を保存します。保存名は[10.0.10.1xx]で保存します。

「開く」をクリックすると下図のウィンドウが開きます。

「はい」をクリックすると下図の画面が開きます。

login as:

ログインするユーザ名を入力します。ここでは[root]でログインします。

login as: root

rootのパスワードを入力します。

login as: root
root@10.0.10.1xx's password:

ログインが完了しました。

[root@localhost ~]#

このログインは先ほどのStepサーバへのログイン方法とは違い、鍵の認証なしでログインしています。又、rootユーザでログインしました。
このような接続ではセキュリティー上、良くありません。
そういった問題点を解決するため、これから設定を行います。

公開鍵の登録とSSHの設定

SSHの設定ファイルは/etc/ssh/sshd_configです。設定を編集する前にsshd_configバックアップを取ります。

# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default

SSHの設定

安全にsshdを運用できるように設定を変更する必要があります。デフォルトのSSHサーバの設定は、下記の点でセキュリティ上問題があるので変更します。

設定説明問題点
PermitRootLoginyes/norootでのログインを許可直接rootユーザのパスワードを解析される可能性がある
PasswordAuthenticationyes/noパスワードログインを許可許可した場合、公開鍵を使用しなくてもログインできる
ChallengeResponseAuthenticationyes/noチャレンジ・レスポンス認証を許可推奨されていない

設定ファイルを編集します。

# vi /etc/ssh/sshd_config

viについて

viの使い方は沢山あるので調べてみてください。

viをインサートモードにして内容を書き換えます。

37行目:PermitRootLogin no
56行目:PasswordAuthentication no
60行目:ChallengeResponseAuthentication no

以上のように変更したらコマンドモードにして『 wq 』で保存します。

一般ユーザの作成

一般ユーザを作ります。自分の好きなユーザ名にして下さい。
ここでは例として「hoge」というユーザ名を使います。

# useradd hoge

一般ユーザのパスワードを設定します。

# passwd hoge

パスワードを二回入力してください。

# passwd hoge
Changing password for user hoge.
New UNIX password:
Retype new UNIX password:

最後に

passwd:all authentication tokens updated successfully.

と出たら入力完了です。

公開鍵の登録

以降は一般ユーザで作業します。

hogeユーザに移ります。

# su - hoge

一般ユーザのホームディレクトリに.sshディレクトリを作ります。

$ mkdir ~/.ssh

先ほど自分で作った公開鍵を登録します。テキストで貼り付けをします。

$ vi ~/.ssh/authorized_keys

viで貼り付けをする時必ずインサートモードにしてください。公開鍵をコピーし、vi上でマウスの右クリックで貼り付けます。このとき、インサートモードで貼り付けが行われていないと、正しく公開鍵が貼り付けられません。貼り付けた鍵の先頭が「ssh-rsa…」で始まっていることを確認してください。

貼り付けが終わったら保存します。

.sshディレクトリには公開鍵以外にも利用方法によっては重要なファイルが配置されるため、次のように所有者以外の一般ユーザアクセスできないようにします。「.sshディレクトリ」と「authorized_keysファイル」のパーミッションを変更します。

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

パーミッションの変更が出来ているか確認します。

$ ls -al ~/
$ ls -al ~/.ssh/

最後に設定を反映させるためにsshdを再起動します。sshdの起動、停止などの権限は一般ユーザには無いのでrootユーザに戻ります。

$ exit

通常、デーモンの起動スクリプトは/etc/init.d/以下に置かれています。
sshd(sshデーモン)とはsshサービスを管理しているプロセスのことです。
デーモンについての詳しい説明は、「linuxリテラシ-第四回 デーモン」を参考にして下さい。

sshdを再起動します。

# /etc/init.d/sshd restart
sshd を停止中:						[ OK ]
sshd を起動中:						[ OK ]

最後に各自のサーバマシンにputtyを起動してすぐに接続できるようにputtyの設定をします。puttyを起動して、先ほど作った「10.0.10.1xx」の設定を選択して「読込」をクリックします。すると「10.0.10.1xx」の設定が反映されますので、以下の設定を追加します。

1,「SSH→認証」のカテゴリにある「認証パラメータ」で自分の秘密鍵を指定。
2,「接続→データ」のカテゴリにある「自動ログインのユーザ名」を[hoge]と入力します。

設定を追加したら「セッション」のカテゴリに戻り「保存」をしてください。この設定で各自のサーバに接続して、鍵のパスフレーズの入力を要求されたらパスフレーズを入力してログインします。ログインが成功したら作業は完了です。

OpenSSHとOpenSSLのアップデート

バグの発見などでソフトウェアは常にアップデートされます。SSHとSSLをアップデートします。
この際,「yum」コマンドを使用します。「yum」コマンドはrootユーザ権限が必要なのでrootユーザに移ります。

$ su -
# yum  update openssh openssl
Setting up Install Process
Setting up repositories
………

途中でインストールするかどうか確認を求められるので、

Is this ok [y/N]: y

と入力してください。

OpenSSL

SSL(Secure Socket Layer)とは通信時にデータを暗号化・復号化をして送受信するためのプロトコルです。
プロトコルはルールを決めるだけでそのままでは利用できませんが、現在はこのプロトコルの暗号化の機能を利用するOpenSSLというプログラムがオープンソースで公開されています。
OpenSSLはライブラリの形で提供されていて、他のプログラムから自由に必要な機能を利用することができます。
今回の講義の内容であるOpenSSHは、暗号化通信をするための暗号化・復号化処理にこのOpenSSLの機能を利用して通信を行っています。

以上でサーバリテラシ「SSHサーバの構築」は終わりです。