サルでもできる実用 ssh 入門

23
サササササササササ SSH ササ Echigo BSD Users Group 7 th meeting at Toyama prefectural civic cente r. 12 th , July, 2003 INOUE Mikio <[email protected]>

Upload: aizza

Post on 21-Mar-2016

54 views

Category:

Documents


1 download

DESCRIPTION

サルでもできる実用 SSH 入門. Echigo BSD Users Group 7 th meeting at Toyama prefectural civic center. 12 th , July, 2003 INOUE Mikio . おしながき. 扱う内容は、 FreeBSD 上で運用する OpenSSH で Protocol 2 の DSA 認証 今時の比較的一般的な設定 基本的な機能と仕組み 実際の設定 運用 その他の話題. ssh (Secure Shell) の機能. セッションの暗号化 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: サルでもできる実用 SSH 入門

サルでもできる実用 SSH 入門

Echigo BSD Users Group 7th meeting at Toyama prefectural civic center.

12th, July, 2003INOUE Mikio <[email protected]>

Page 2: サルでもできる実用 SSH 入門

おしながき

• 扱う内容は、 FreeBSD 上で運用する OpenSSH で Protocol 2 の DSA 認証– 今時の比較的一般的な設定

• 基本的な機能と仕組み• 実際の設定• 運用• その他の話題

Page 3: サルでもできる実用 SSH 入門

ssh (Secure Shell) の機能

• セッションの暗号化– 通信の盗聴や改竄を予防

• 安全な認証方式– ホストの認証と個人の認証– IP アドレスや DNS の詐称 ( なりすま

し ) を予防• port forwarding

– 各 TCP/IP アプリケーションへの応用

Page 4: サルでもできる実用 SSH 入門

公開鍵暗号

• 組になったふたつの鍵• 暗号化するための鍵 ( 公開鍵 )

– みんなに配っていい鍵。– この鍵で暗号を作って送ってもらえる。

• 復号化するための鍵 ( 秘密鍵 )– 絶対内緒の鍵。– この鍵でのみ暗号を元に戻せる。

• 公開鍵から秘密鍵を作れない – あくまでも今の所。新しい解読技術で崩壊するかも。– 秘密鍵からは公開鍵を生成できる。

Page 5: サルでもできる実用 SSH 入門

セッションの暗号化 1/2

1. クライアントがサーバに接続を要求する。2. サーバはクライアントに、サーバ側の公開

鍵 *1 を提示する。 3. クライアントは、セッション鍵 ( 実際の通

信に使用する暗号用の鍵 ) を生成し、サーバ側の公開鍵 *1 で暗号化し、 サーバに送る。

4. サーバは送られたセッション鍵をサーバ側の秘密鍵 *1 で復号する。

Page 6: サルでもできる実用 SSH 入門

セッションの暗号化 2/2

5. ここから後のすべての通信は、このセッション鍵で暗号化される。サーバは、確認のメッセージ ( 暗号化されている ) をクライアントに送る。

6. クライアントは、サーバからのメッセージが確認できると、次の認証の段階に 移る。鍵が正しく渡されていなければ、サーバからのメッセージが確認できない。 このときは、接続を中断する。

*1 ここでいう「サーバ側の公開鍵・秘密鍵」は、実際にはサーバが固有に持つ「ホスト鍵」とサーバのメモリ上だけにある 「サーバ鍵」から成ります。「サーバ鍵」は、一時間毎に作り変えられます。

Page 7: サルでもできる実用 SSH 入門

認証手順の例 1/2

1. サーバが内緒の言葉 (challenge) を作り、認証したいユーザの公開鍵で challenge を暗号化してクライアントに送る。

2. クライアントは、送られてきた暗号を自身の秘密鍵で復号化する。復号した結果 (response) をサーバに送り返す。

3. サーバは、送り返されてきた response が、暗号化前のものと一致するかどうかを調べる。

Page 8: サルでもできる実用 SSH 入門

認証手順の例 2/2

4. 一致してれば認証成功。やったね !

• 以上は、 Protocol 1 の例で「内緒の言葉」は、乱数に基づくビット列 が用いられます。

• また、 Protocol 2 では離散対数を元に計算した署名 が用いられ、署名の SHA (Secure Hash Algorithm) をとって双方で比較します。

Page 9: サルでもできる実用 SSH 入門

ホスト鍵を作ろう

• FreeBSD の場合、ホストの鍵はインストール後の最初のブート時に /etc/rc.network (RELENG_4) とか /etc/rc.d/sshd (HEAD) とかが、勝手に作ってくれます。

たとえば # /usr/bin/ssh-keygen -t dsa -N "" -f /etc/ssh/ssh_host_dsa_key

確認ruri@client% ls -l /etc/ssh/ssh_host*-rw------- 1 root wheel 668 Jun 12 2001 ssh_host_dsa_key-rw-r--r-- 1 root wheel 608 Jun 12 2001 ssh_host_dsa_key.pub-rw------- 1 root wheel 533 Jun 12 2001 ssh_host_key-rw-r--r-- 1 root wheel 337 Jun 12 2001 ssh_host_key.pub-rw------- 1 root wheel 883 Aug 3 2002 ssh_host_rsa_key-rw-r--r-- 1 root wheel 227 Aug 3 2002 ssh_host_rsa_key.pub

Page 10: サルでもできる実用 SSH 入門

自分の鍵を作ろう 1/2

• コマンド一発で作れます。どうせ一回しか作りません。

ruri@client% ssh-keygen -t dsaGenerating public/private dsa key pair.Enter file in which to save the key (/home/ruri/.ssh/id_dsa):Enter passphrase (empty for no passphrase): パスフレーズを入力する。Enter same passphrase again: パスフレーズを入力する。Your identification has been saved in /home/ruri/.ssh/id_dsa.Your public key has been saved in /home/ruri/.ssh/id_dsa.pub.The key fingerprint is: ( 折り返し )cf:48:71:f5:32:84:69:e9:2f:4f:b6:f7:4a:16:9e:e2 [email protected]

 できた !!デフォルトだと、 ~/.ssh が 755 になってるかも知れない。確認して 700 にしておきましょう。

Page 11: サルでもできる実用 SSH 入門

パスフレーズ

• 暗号化された秘密鍵を読み出すための文字列。– 4 字以上ということになってるけど、 20 字以上

とか長い方が望ましい。

• 秘密鍵を使う都度入力する必要があるので、ssh-agent ( 後述 ) とか使うと便利。

• パスフレーズ無しの鍵もアリだけど、運用上要注意。

• もちろん後で変更できます。

Page 12: サルでもできる実用 SSH 入門

自分の鍵を作ろう 2/2ruri@client% ls –l ~/.ssh/total 2-rw------- 1 ruri ruri 736 Jul 11 00:43 id_dsa-rw-r--r-- 1 ruri ruri 608 Jul 11 00:43 id_dsa.pub

• 秘密鍵が id_dsa– 暗号化されてます。– 絶対に内緒なので、 NFS とかでホーム

ディレクトリを共有してると終了。• 公開鍵が id_dsa.pub

Page 13: サルでもできる実用 SSH 入門

サーバ側の設定

• 自分の公開鍵をサーバに送る– メール、フロッピー、口頭、テレパシーなど方法は

何でも構いません。でも、改竄の可能性を心配すれば、ネットワークを経由しない方が安全かも。

• 公開鍵を登録する– ~/.ssh ディレクトリがなければ作る。ruri@server% mkdir ~/.sshruri@server% chmod 700 ~/.ssh

– ~/.ssh/authorized_keys にクライアントで生成した公開鍵を追加する。

ruri@server% cat id_dsa.pub >> ~/.ssh/authorized_keys

– おしまい。

Page 14: サルでもできる実用 SSH 入門

接続してみるruri@client% ssh server.ebug.jpThe authenticity of host ‘server (192.168.0.1)’ can’t be established.RSA key fingerprint is cf:48:71:f5:32:84:69:e9:2f:4f:b6:f7:4a:16:9e:e2.Are you sure you want to continue connecting (yes/no)? y esWarning: Permanently added ‘server (192.168.0.1)’ (RSA) to ( 折り返し )the list of known hosts.Enter passphrase for key ‘/home/ruri/.ssh/id_dsa’: パスフレーズを入力する。

Last login: Thu Jul 10 18:11:06 2003 from client.ebug.jpWelcome to FreeBSD 5.1-RELEASE (GENERIC)ruri@server% ってな感じでプロンプトがでる。つながった !!

・ パスフレーズを入力する前の 4 行は最初の接続の際だけ確認されます。相手のホストを知らないけど接続しても良い ? という意味。フィンガープリントを確認して、接続先の正当性を確認する。接続すると自動的に ~/.ssh/known_hosts に登録される。

Page 15: サルでもできる実用 SSH 入門

プロトコルと認証の方式

• プロトコル– Protocol 1 - 実装上の互換性が高い– Protocol 2 - 厳重、多様

• 認証方式 (Protocol 2)– 公開鍵認証 (DSA 認証または RSA 認証 )– パスワード認証 - 運用注意 !– 対話的認証 (S/Key 認証または PAM 認証 )– ホストベース認証 - 運用注意 !

Page 16: サルでもできる実用 SSH 入門

ssh-agent で幸せの予感

• 頻繁に使うと毎回パスフレーズを入力するのがめんどいあなたに代わって、自分専用のエージェントが入力してくれる。

ruri@client% eval `ssh-agent` ちょっと変な起動の仕方Agent pid 27900ruri@client% ps axu | grep ssh-agent 動いてるかの確認ruri 27900 0.0 0.9 1956 1156 ?? Is 1:06AM 0:00.00 ssh-agentruri@client% env | grep SSH 環境変数の確認SSH_AUTH_SOCK=/tmp/ssh-sCbpye5o/agent.27899SSH_AGENT_PID=27900

  ssh-agent は、起動時に環境変数 SHELL に従って、適切に環境変数を設定してくれます。

Page 17: サルでもできる実用 SSH 入門

ssh-add でちょっと幸せ

• ssh-add を使ってパスフレーズを登録。ruri@client% ssh-addEnter passphrase for /home/ruri/.ssh/id_dsa: パスフレーズを入力する。Identity added: /home/ruri/.ssh/id_dsa (/home/ruri/.ssh/id_dsa)Identity added: /home/ruri/.ssh/identity ([email protected])

ruri@client% ssh server.ebug.jp  接続してみる← パスフレーズを訊かれない !

Last login: Thu Jul 12 3:11:06 2003 from client.ebug.jpWelcome to FreeBSD 5.1-RELEASE (GENERIC)ruri@server% つながった !!

しあわせ~。

Page 18: サルでもできる実用 SSH 入門

運用上の注意 1/2

• 秘密鍵の管理– 秘密鍵は他のホストと共有したりして、ネットワークに流さない。他のメディアに複製しない。

• パスワード認証– 暗号化されてるとは言え、パスワードはネットーワークを流れる。

• ホストベース認証 / パスフレーズ無し– 誰でもつなげちゃうので、難しいかも。

Page 19: サルでもできる実用 SSH 入門

運用上の注意 2/2

• バージョンアップ– 一般的なセキュリティホールの他に、暗号そ

のものが破られる可能性がある。• その他の設定

– SSH 使ってても TELNET とか FTP とか POP とかそんなのが全開になってるとダメダメ。

– TCP Wrapper とかルータとか防火壁とか駆使してがんばりましょう。

Page 20: サルでもできる実用 SSH 入門

OpenSSH と商用 SSH

• 商用版はもちろん今も売ってます。• 商用版は SSH1 と SSH2 が別になってます。• Protocol 2 では、 OpenSSH と商用版では、鍵の

フォーマットが異なるので変換が必要。– 商用版の鍵を OpenSSH 用に変換する。

ssh-keygen –i 商用版鍵ファイル > OpenSSH 鍵ファイル– OpenSSH の鍵を商用版用に変換する。

ssh-keygen –e OpenSSH 鍵ファイル > 商用版鍵ファイル パスフレーズが付いた商用版鍵は変換できまへん。事前に商用版の ssh-keygen でパスフレーズを無しにしておいてください。

Page 21: サルでもできる実用 SSH 入門

クライアントソフトウェア

• Windows 用クライアント– PuTTY*1 、 Cygwin 版 OpenSSH– TTSSH 、 Telneat*1 (Protocol のみ )

• Macintosh 用クライアント– MacSSH*1

– Nifty Telnet*1 、 Better Telnet (Protocol のみ )• Unix 用クライアント

– OpenSSH 、商用 SSH2– 商用 SSH1

*1 標準の状態だと日本語が使えまへん。

Page 22: サルでもできる実用 SSH 入門

参考

• Secure Shell (secsh) Working Group– http://www.ietf.org/html.charters/secsh-charter.html

• OpenSSH– http://www.openssh.com/

• SSH Communications Security– http://www.ssh.com/

• Google– http://www.google.com/

Page 23: サルでもできる実用 SSH 入門

雑談の種

• ssh には認証局 (Certifying Authority) がない。 Kerberos を使う ?

• OTP (S/Key 認証 ) はおもしろそうだけど、誰か使ったことありますか ?

• 我が家の Apache はどうなるんだっ !• 眠いので寝てもいいですか ?

– くわしいことは倉品師匠に訊いてください。