UnixPower on Networking
  http://www.unix-power.net/

 
  Top - Solaris8 - Solaris SSH



●OpenSSH


OpenSSH とは、 telnet や FTP でやり取りされる通信データを 暗号化するソフトウェアです。 telnet や FTP の通信データは平文(クリアテキスト)でネットワークを流れています。ですから、誰がどこから何をしたかが簡単に分かってしまいます。しかし、 SSH を利用すれば、通信路が暗号化されるので、途中で盗聴されてもパスワードや通信内容が漏れる危険性を大幅に下げることができます。


●RSA認証

RSA 認証とは、SSH サーバーの公開鍵と各ユーザーの公開鍵と秘密鍵を利用した認証で、 SSH による認証方式の中では安全性の高い方式と言えるでしょう。


●公開鍵と秘密鍵


データを暗号化して、通信相手とやり取りする際に 公開鍵(パブリックキー)と 秘密鍵(プライベートキー)を利用します。 公開鍵と秘密鍵はペアになっています。公開鍵で暗号化されたデータは、対応する秘密鍵でしか復号化できず、秘密鍵で暗号化したデータは、対応する公開鍵でしか 復号化できないという特徴があります。公開鍵は、誰に渡しても問題ありませんが、 秘密鍵は絶対に誰にも渡してはいけません。 通常、鍵はデータの受信者が用意します。そして受信者は、自分の公開鍵をあらかじめ送信者に渡しておく必要があります。送信者は受け取った公開鍵でデータを暗号化して送ります。受信者は、受け取ったデータを 秘密鍵で復号化することができます。というわけで、安心して通信ができるのです。


ではインストールを行います。OpenSSH を動作させるためには、あらかじめ zlib と OpenSSL というソフトウェアをインストールしておかなければなりません。その理由は、OpenSSH のインストール時にこれらのソフトウェアに含まれれるヘッダ・ファイルが利用されたり、OpenSSH の動作中にこれらのソフトウェアの機能が実行されたりするからです。


http://www.gzip.org/zlib/
(zlib-1.1.4.tar.gz)
http://www.openssl.org/source/(openssl-0.9.7b.tar.gz)
http://www.openssh.org/ja/index.html(openssh-3.6.1p2.tar.gz)


以下のコマンドでインストールします。


# tar xvzf zlib-1.1.4.tar.gz
# cd zlib-1.1.4
# ./configure
# make
# make install
# tar xvzf openssl-0.9.7b.tar.gz
# cd opensll-0.9.7b
# ./config
# make
# make install


次にOpenSSHをインストールするのですがユーザ、グループにsshdが存在する必要があります。存在しない場合はこれを追加しておきます。


# /usr/sbin/groupadd -g 22 sshd
# /usr/sbin/usradd -g sshd -u 22 -s /bin/false -d /var/empty sshd


次にOpenSSHのインストールを行います。


# tar xvzf openssh-3.6.1p2.tar.gz
# cd openssh-3.6.1p2
# ./configure --with-zlib=/usr/local/lib
       --with-ssl-dir=/usr/local/ssl
       --with-tcp-wrappers
# make
# make install


さて、インストールが無事完了していれば、暗号化するための鍵が/usr/local/etc/にできているはずです
次に以下の起動スクリプトを用意します。


#!/bin/sh

case $1 in
'start')
	/usr/local/sbin/sshd
	;;
'stop')
	if [ -f /var/run/sshd.pid ]; then
	pid=`cat /var/run/sshd.pid`
	kill -TERM $pid
	echo ' sshd stop'
	fi
	;;
*)
	echo "usage : sshd {start|stop}"
	;;
esac


このファイルをsshdとして保存し実行権限を与えて/etc/init.dにコピーし以下のリンクをはってやります。


# chmod 755 sshd
# cp sshd /etc/init.d
# ln -s /etc/init.d/sshd /etc/rc2.d/S99sshd 


では、 OpenSSH の設定です。エディタで /usr/local/etc/sshd_config を編集します。以下の項目をこのように書き換えて、行頭に「#」がついている場合は削除してください。


HostKey		/usr/local/etc/ssh_host_key		// (1)
HostKey		/usr/local/etc/ssh_host_rsa_key	// (2)
HostKey		/usr/local/etc/ssh_host_dsa_key	// (3)
PrintMotd			no			// (4)
PermitRootLogin		no			// (5)
IgnoreRhosts		yes			// (6)
RhostsAuthentication	no			// (7)
RhostsRSAAuthentication	no			// (8)
RSAAuthentication		yes			// (9)
PermitEmptyPasswords	no			// (10)
UseLogin			no			// (11)


では、説明していきます。


(1)、(2)、(3)は、利用する秘密鍵のパスです。

(4)は、ログイン後に表示されるメッセージの設定です。今回は表示させないので、「no」にします。

(5)は、 root のログインに関する設定です。つまり、いきなり root でログインできるかどうかという設定です。これを許可してしまうと、誰が root で作業したか分かりにくくなり、 セキュリティ上好ましくないので、「no」にします。

(6)、(7)は、 .rhosts ファイルを利用したホスト名の認証に関する設定です。
これは、 接続元のホスト名とユーザー名を記述した .rhosts というファイルを接続先の自分のホームディレクトリに置いておけば、接続元から接続先にパスワード入力なしでログインできるということなのですが、これを許可してしまうとユーザー名や ホスト名のなりすましによる不正アクセスを防げません。
(6)は、ログイン要求があった場合に、 .rhosts ファイルを確認するかどうかという項目です。今回は確認しないということで、「yes」にします。
(7)は、このrhosts認証を許可するか否かという項目です。禁止にしたいので、「no」にします。

(8)は、 .rhosts ファイルの代わりに .shosts ファイルを利用した認証に関する設定です。 .shosts ファイルは、SSHでしか利用されないファイルで、 .rhosts ファイルを利用するよりも 安全性は高くなります。しかし、今回はこれらのファイルを 利用しないので、「no」にします。

(9)は、RSA 認証についての設定です。今回はこれを利用するので、「yes」にします。

(10)は、ログインする時に、パスワードなしでログインを許可するか否かの設定です。もちろん、許可しないので、「no」にします。

(11)は、login プログラムに関する設定です。通常は、login プログラムを利用しないので、「no」にします。


以上で完了です。


■RSA認証


このままの状態でも利用することは可能ですが、このパスワード認証だと、クラッカーに /etc/passwd ファイルを解読されてしまったら、 不正アクセスを許してしまうことになります。 せっかくですから、より安全性の高い RSA 認証 を利用しましょう!では、それを利用するためには、「鍵」を作らなくてはなりません。この鍵は、接続元になるクライアント側のホストで作成します。 このとき、 root ではなく、接続先ホストにログインする一般ユーザーごとに鍵を作らなくてはなりません。


# ssh-keygen -t rsa


と入力すると・・・


Generatign public/private rsa key pair.
Enter file in which to save the key (/home/test/.ssh/id_rsa):
Enter passphease (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/test/.ssh/id_rsa.
Your public key has been saved in /home/test/.ssh/id_rsa.pub.
The key fingerprint is:
88:46:12:58:13:fe:c2:0a:21:43:e7:f1:37:29:5b:33 test@xxxxxx


となります。上記はtestユーザーで行った場合の例です。


では、説明していきます。


2 行目で鍵ファイルの指定をします。デフォルト(カッコの中のように)で、ユーザーの home ディレクトリの .ssh というディレクトリ内に保存されるようになっているので、このまま [Enter] キーを押します。


3行目で、秘密鍵の( SSH サーバーにログインするときに入力する) パスフレーズを打ち込みます。このパスフレーズには、7 文字以上の推測しにくい文字列を設定しましょう!すると、 もう一度パスフレーズを入力するように言ってきますので、先ほどのパスフレーズを入力します。


鍵が作成できたら、公開鍵を接続先ホストに転送します。 (秘密鍵は絶対に送っちゃいけませんよ!)


次に、接続先ホストで authorized_keys2 というファイルを作成し、先ほど転送した公開鍵 id_rsa.pub の内容を記述します。このファイルは、SSH サーバー(接続先)側ユーザーの home ディレクトリの .ssh ディレクトリに保存します。このファイルには複数の公開鍵を記録できます。


# cat id_rsa.pub >> authorized_keys2


これで、鍵の準備は完了です。


もう一つ、設定しなければならないことがあります。 sshd_config ファイルの PasswordAuthentication の設定を「no」にします。行頭に # がついている場合は、削除してください。こうすることによって、パスワード認証を禁止する ことができます。


.ssh ディレクトリの権限がグループ書き込み可になっている場合は、 ssh は安全でないと判断して、 RSA 認証をさせてくれませんので、 .ssh ディレクトリのパーミッションを 700 に変更しましょう。


また、暗号化された通信路でファイルをコピーする場合は scp を使います。


# 接続元ホストのファイルを接続先ホストへコピーする場合は...
scp ファイル名 接続先ホストのユーザー名@ホスト名:パス

# 接続先ホストのファイルを接続元ホストへコピーする場合は...
scp 接続先ホストのユーザー名@ホスト名:パス ファイル名


例えば、


  • 接続元のファイルを [sample]
  • 接続先ホストのユーザー名を [test]
  • 接続先ホストのホスト名を [xxxxx]
  • コピー先を [home ディレクトリ]


とすると、以下のようにすればコピーできます。

# scp sample test@xxxxx:~/



 
 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.