今回はSSHサーバを構築してリモートログインで自宅など、リテラシの教室から見て外のネットワークから各自のマシンを動作させます。
今回のサーバリテラシで使用するネットワークの種類と構成する機器の意味について説明します。
IPアドレスとは、ネットワークにある機器を個別に住所付けしたりするもので、現行では全世界で約43億個しかIPアドレスが無いため、近年枯渇してきました。その枯渇対策としてネットワークをLAN(ローカルエリアネットワーク)とWAN(ワイドエリアネットワーク)の二つに分け、LANにはローカルからしか利用できないネットワークのアドレスとしてプライベートIPアドレスを、WANにはインターネットで使用できるグローバルIPアドレスを割り当てることになりました。
ルータというのは1つのグローバルIPアドレスをLAN内の複数のマシンで共有する機能と、WANからきたデータを指定のマシンに転送する、フォワーディングという機能などを持った機器です。LAN内のマシンはルータの機能を使ってWANにアクセスできるのですが、WANからはフォワーディングの機能によって転送されるマシンしかアクセスすることができません。
ハブというのは、LANなどで使われる集線装置でネットワークに接続できるマシンの台数を増やすことができます。また、ハブ同士を接続してさらに接続できるマシンの台数を増やすこと(カスケード接続)も可能ですが、カスケード接続を何段にも行うと通信に使う信号が減衰し、正しくデータが送れなくなる事もあります。
今回のネットワーク構成は下図のようになっています。
各自のマシンはルータの機能でWAN側にアクセスできますが、各自のマシンはプライベートIPアドレスしか持っていないためWANから直接アクセスすることはできません。そこで各自のマシンと同じLAN内で、かつフォワーディング機能によりWANからアクセスできるStepサーバを経由し、ポートフォワーディングをすることにより、自宅からリモートで各自のマシンにアクセスできるようにします。
今回の講義では、各自のマシンをリモートで操作するためにOpenSSHというソフトウェアを使います。OpenSSHにはサーバ、クライアント双方のソフトウェア含まれます。今回は各自のマシンにOpenSSHを、SSHクライアントにはPuTTYというWindowsのアプリケーションを利用してSSH接続を行います。SSH接続はすべての通信を暗号化し、暗号化通信には秘密鍵と公開鍵という対になる2つの鍵を使う公開鍵暗号方式を利用します。
今回の作業はWindows上から行うので、鍵の生成をWindowsで動作するSSHクライアントのPuTTYを使って生成します。
なお、公開鍵暗号方式とSSHの詳しい接続方法についてはLinuxリテラシ2006第5回 SSH/SCPをご覧ください。
参考:Linuxリテラシ2006第5回 SSH/SCP
「スタート→プログラム→PuTTY→puttygen」でputtygenを起動します。「生成」をクリックします。
ここで、マウスカーソルの動きで乱数を生成します。その乱数で鍵をつくるので、マウスカーソルを動かし続けます。
生成が完了すると下図のようになります。ここで鍵のパスフレーズを入力します。「鍵のパスフレーズ」と「パスフレーズの確認」に任意に入力します。「鍵のコメント」には学部のメールアドレスを入力します。
この時入力したパスフレーズは接続時に必要になるので忘れないで下さい。
入力が終わったら「秘密鍵の保存」をクリックしてファイル名を入力し保存します。保存場所は「C:\Documents and Settings\ユーザ名\My Documents」にsshディレクトリを作るなどして、そこに保存します。
これから先の説明で「xx」が出てきますが、それは各自のマシン番号のことを指します。
現在Stepサーバには公開鍵を登録していないので皆さんはログインできません。そこで、メールで公開鍵を送ってもらい、こちらで公開鍵を登録します。
server-ml@cis.k.hosei.ac.jp
に公開鍵をペーストして送信してください。
「スタート→プログラム→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の設定ファイルは/etc/ssh/sshd_configです。設定を編集する前にsshd_configバックアップを取ります。
# cp /etc/ssh/sshd_config /etc/ssh/sshd_config.default
安全にsshdを運用できるように設定を変更する必要があります。デフォルトのSSHサーバの設定は、下記の点でセキュリティ上問題があるので変更します。
設定 | 値 | 説明 | 問題点 |
---|---|---|---|
PermitRootLogin | yes/no | rootでのログインを許可 | 直接rootユーザのパスワードを解析される可能性がある |
PasswordAuthentication | yes/no | パスワードログインを許可 | 許可した場合、公開鍵を使用しなくてもログインできる |
ChallengeResponseAuthentication | yes/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]と入力します。
設定を追加したら「セッション」のカテゴリに戻り「保存」をしてください。この設定で各自のサーバに接続して、鍵のパスフレーズの入力を要求されたらパスフレーズを入力してログインします。ログインが成功したら作業は完了です。
バグの発見などでソフトウェアは常にアップデートされます。SSHとSSLをアップデートします。
この際,「yum」コマンドを使用します。「yum」コマンドはrootユーザ権限が必要なのでrootユーザに移ります。
$ su - # yum update openssh openssl Setting up Install Process Setting up repositories ………
途中でインストールするかどうか確認を求められるので、
Is this ok [y/N]: y
と入力してください。
SSL(Secure Socket Layer)とは通信時にデータを暗号化・復号化をして送受信するためのプロトコルです。
プロトコルはルールを決めるだけでそのままでは利用できませんが、現在はこのプロトコルの暗号化の機能を利用するOpenSSLというプログラムがオープンソースで公開されています。
OpenSSLはライブラリの形で提供されていて、他のプログラムから自由に必要な機能を利用することができます。
今回の講義の内容であるOpenSSHは、暗号化通信をするための暗号化・復号化処理にこのOpenSSLの機能を利用して通信を行っています。
以上でサーバリテラシ「SSHサーバの構築」は終わりです。