実用SSH 第2版

―セキュアシェル徹底活用ガイド

[cover photo]
TOPICS
Web , System/Network
発行年月日
PRINT LENGTH
736
ISBN
4-87311-287-7
原書
SSH, The Secure Shell: The Definitive Guide, Second Edition
FORMAT

Unix系OSだけでなくWindowsやMacintoshなど他のさまざまなOSでも利用可能なSSHは、セキュアなネットワーク接続に不可欠なソフトウェアです。本書では、SSHの導入および基本的な使い方からネットワーク環境に依存する高度な設定や使い方まで、OpenSSHとTectiaをベースにSSHが持つすべての機能を網羅的に解説します。ホームユーザから大規模ネットワークの管理者まで、セキュアなネットワーク接続を望むすべての人にとって本書は大いに役立つでしょう。SSH-2プロトコル対応。

監訳者によるサポートページ


サンプルPDF(まえがき、350KB)
サンプルPDF(3章--抜粋--、350KB)
サンプルPDF(12章--抜粋--、300KB)
サンプルPDF(付録G、300KB)

目次

監訳者まえがき
まえがき―― ようこそSSHの世界へ!

1章 SSHへの招待
	1.1 SSHとは何か?
	1.2 SSHがやらないこと
	1.3 SSHプロトコルとは?
		1.3.1 プロトコル、実装、クライアントと用語の混乱
	1.4 SSHの機能概略
		1.4.1 セキュアなリモートログイン
		1.4.2 セキュアなファイル転送
		1.4.3 セキュアなリモートマシンでのコマンド実行
		1.4.4 認証鍵とエージェント
		1.4.5 アクセス制御
		1.4.6 ポートフォワーディング(ポート転送)
	1.5 SSHの歴史
	1.6 関連する技術
		1.6.1 rshスイート(r系コマンド)
		1.6.2 PGP(Pretty Good Privacy)とGnuPG(GNU Privacy Guard)
		1.6.3 Kerberos
		1.6.4 IPsecとVPN
		1.6.5 SRP(Secure Remote Password)
		1.6.6 SSL(Secure Socket Layer)プロトコル
		1.6.7 SSL拡張されたTelnetとFTP
		1.6.8 stunnel
		1.6.9 ファイアウォール
	1.7 まとめ

2章 SSHクライアントの基本的な使い方
	2.1 本章で取り上げるシナリオの背景
	2.2 sshによるリモート端末セッション
		2.2.1 scpコマンドによるファイル転送
	2.3 もう少し複雑な条件の下でSSHを使う
		2.3.1 known hosts(すでに知っているホスト)
		2.3.2 エスケープ文字
	2.4 暗号鍵による認証
		2.4.1 鍵の概要
		2.4.2 ssh-keygenコマンドを使った鍵ペアの生成
		2.4.3 公開鍵のSSHサーバへのインストール
		2.4.4 鍵の変更
	2.5 SSHエージェント
		2.5.1 エージェントと自動化
		2.5.2 パスフレーズに関するより複雑な問題の解決
		2.5.3 エージェントフォワーディング(エージェント転送)
	2.6 パスワードやパスフレーズなしの接続
	2.7 その他のSSHクライアント
		2.7.1 sftp
		2.7.2 slogin
	2.8 まとめ

3章 インサイドSSH
	3.1 機能の概要
		3.1.1 プライバシ(暗号化)
		3.1.2 完全性
		3.1.3 認証
		3.1.4 認可
		3.1.5 フォワーディング(トンネリング)
	3.2 暗号技術の基本
		3.2.1 「セキュア」とはどの程度安全か
		3.2.2 公開鍵と秘密鍵による暗号技術
		3.2.3 ハッシュ関数
	3.3 SSHのアーキテクチャ
	3.4 インサイドSSH-2
		3.4.1 プロトコルの概要
		3.4.2 SSH-TRANS(SSH Transport Layer Protocol)
		3.4.3 SSH-AUTH(SSH Authentication Protocol)
		3.4.4 SSH接続プロトコル(SSH-CONN)
	3.5 インサイドSSH-1
	3.6 実装面の問題
		3.6.1 ホスト鍵
		3.6.2 ホストベースの認証における認可
		3.6.3 SSH-1との下位互換性
		3.6.4 ランダム性(randomness)
		3.6.5 OpenSSHの特権分離
	3.7 SSHとファイル転送(scpおよびsftp)
		3.7.1 名前の意味するものとは?
		3.7.2 scpの詳細
		3.7.3 scp2/sftpの詳細
	3.8 SSHで用いられるアルゴリズム
		3.8.1 公開鍵アルゴリズム
		3.8.2 秘密鍵アルゴリズム
		3.8.3 ハッシュ関数
		3.8.4 圧縮アルゴリズム:zlib
	3.9 SSHが対抗できる脅威
		3.9.1 盗聴
		3.9.2 名前解決サービスのなりすましとIPスプーフィング
		3.9.3 接続のハイジャック
		3.9.4 中間介入攻撃(man-in-the-middle attack)
	3.10 SSHが対抗できない脅威
		3.10.1 パスワードクラッキング
		3.10.2 IPおよびTCPに対する攻撃
		3.10.3 トラフィック解析
		3.10.4 裏チャネル(covert channel)
		3.10.5 不注意
	3.11 SSHがもたらす脅威
	3.12 まとめ

4章 インストールとコンパイル時の設定
	4.1 概要
		4.1.1 インストールの準備
		4.1.2 ソースの入手
		4.1.3 署名の検証
		4.1.4 ソースファイルの展開
		4.1.5 コンパイル時設定の実施
		4.1.6 すべてをコンパイルする
		4.1.7 プログラムと設定ファイルをインストールする
	4.2 OpenSSHのインストール
		4.2.1 必要条件
		4.2.2 ファイルのダウンロードと展開
		4.2.3 ビルドとインストール
		4.2.4 オプションの設定
	4.3 Tectiaのインストール
		4.3.1 下準備
		4.3.2 ファイルの入手と展開
		4.3.3 md5sumで検証する
		4.3.4 ビルドとインストール
		4.3.5 オプション設定
		4.3.6 TectiaでのSSH-1互換のサポート
	4.4 ソフトウェア一覧
	4.5 SSHを用いたr系コマンドの置き換え
		4.5.1 CVS(Concurrent Versions System)
		4.5.2 GNU Emacs
		4.5.3 Pine
		4.5.4 rsyncとrdist
	4.6 まとめ

5章 サーバ全体の設定
	5.1 サーバの実行
		5.1.1 スーパーユーザ権限でのsshdの実行
		5.1.2 一般ユーザによるsshdの実行
	5.2 サーバの設定:概要
		5.2.1 サーバ設定ファイル
		5.2.2 設定ファイルのチェック
		5.2.3 コマンドラインオプション
		5.2.4 設定を変更する
		5.2.5 トリッキーな再設定の例
	5.3 始めよう:初期化設定
		5.3.1 ファイルの位置
		5.3.2 ファイルパーミッション
		5.3.3 TCP/IPの設定
		5.3.4 鍵の再生成
		5.3.5 暗号化アルゴリズム
		5.3.6 完全性チェック(MAC)アルゴリズム
		5.3.7 SSHプロトコルの設定
		5.3.8 データ圧縮
	5.4 ユーザ認証:ユーザのidentityを確認する
		5.4.1 認証の構文
		5.4.2 パスワード認証
		5.4.3 公開鍵認証
		5.4.4 ホストベースの認証
		5.4.5 キーボードを用いた対話的な認証
		5.4.6 PGPを用いた認証
		5.4.7 Kerberosによる認証
		5.4.8 PAM認証
		5.4.9 特権分離
		5.4.10 ログインプログラムの選択
	5.5 アクセス制御
		5.5.1 アカウントに対するアクセス制御
		5.5.2 グループに対するアクセス制御
		5.5.3 ホスト名によるアクセス制御
		5.5.4 shostsを用いたアクセス制御
		5.5.5 rootアクセスの制御
		5.5.6 外部プログラムを用いたアクセス制御
		5.5.7 chrootを用いてディレクトリアクセスを制限する
		5.5.8 認証とアクセス制御のまとめ
	5.6 ユーザログインとアカウント
		5.6.1 ユーザに対するウェルカムメッセージ
		5.6.2 環境変数の設定
		5.6.3 初期化スクリプト
	5.7 フォワーディング
		5.7.1 ポートフォワーディング
		5.7.2 Xフォワーディング
		5.7.3 エージェントフォワーディング
	5.8 サブシステム(Subsystem)
	5.9 ログの取得とデバッグ
		5.9.1 OpenSSHのログ取得とデバッグ
		5.9.2 Tectiaのログ取得とデバッグ
		5.9.3 inetdやxinetd環境下でのデバッグ
	5.10 SSH-1とSSH-2サーバとの互換性
		5.10.1 TectiaのSSH-1互換モードにおけるセキュリティ問題
	5.11 まとめ

6章 鍵管理とエージェント
	6.1 identityとは
		6.1.1 OpenSSHにおけるidentity
		6.1.2 Tectiaにおけるidentity
	6.2 identityの生成
		6.2.1 OpenSSHにおける鍵の生成
		6.2.2 Tectiaにおける鍵の生成
		6.2.3 パスフレーズの選択
		6.2.4 Diffie-Hellman鍵交換用の新しい群の生成
	6.3 SSHエージェント
		6.3.1 エージェントは鍵を人目にさらさない
		6.3.2 エージェントの起動
		6.3.3 ssh-addによる鍵のロード
		6.3.4 エージェントとセキュリティ
		6.3.5 エージェントフォワーディング
		6.3.6 エージェントのCPU消費
		6.3.7 エージェントのデバッグ
	6.4 複数のidentity
		6.4.1 identityを手動で切り替える
		6.4.2 エージェントでidentityを切り替える
		6.4.3 identityを元にしたセッションの調整
	6.5 TectiaにおけるPGP認証
	6.6 Tectiaの外部鍵
	6.7 まとめ

7章 クライアント使用法 応用編
	7.1 クライアントの設定方法
		7.1.1 コマンドラインオプション
		7.1.2 クライアントの設定ファイル
		7.1.3 環境変数
	7.2 優先順位
	7.3 冗長モードの手引き
	7.4 クライアント設定の徹底入門
		7.4.1 リモートアカウント名
		7.4.2 ユーザのidentity
		7.4.3 ホスト鍵とknown hostsデータベース
		7.4.4 SSHプロトコルの設定
		7.4.5 TCP/IPの設定
		7.4.6 接続を確立する
		7.4.7 プロキシとSOCKS
		7.4.8 フォワーディング
		7.4.9 暗号アルゴリズム
		7.4.10 完全性チェック(MAC)アルゴリズム
		7.4.11 ホスト鍵の形式
		7.4.12 セッション用の鍵の更新
		7.4.13 認証
		7.4.14 データ圧縮
		7.4.15 プログラムの置き場所
		7.4.16 サブシステム
		7.4.17 ログの取得とデバッグ
		7.4.18 乱数シード
	7.5 scpによるセキュアなコピー
		7.5.1 scpの全文法
		7.5.2 ワイルドカードの扱い
		7.5.3 ディレクトリの再帰的コピー
		7.5.4 パーミションの保持
		7.5.5 オリジナルファイルの自動削除
		7.5.6 安全のための機能
		7.5.7 バッチモード
		7.5.8 ユーザのidentity
		7.5.9 SSHプロトコル設定
		7.5.10 TCP/IPの設定
		7.5.11 暗号アルゴリズム
		7.5.12 帯域制御
		7.5.13 データ圧縮
		7.5.14 ファイルの変換
		7.5.15 最適化
		7.5.16 状況の表示
		7.5.17 sshの実行ファイルの位置
		7.5.18 ヘルプの表示
		7.5.19 内部使用限定
		7.5.20 さらに深い設定
	7.6 sftpを使ったセキュアで、対話的なコピー
		7.6.1 対話的コマンド
		7.6.2 コマンドラインオプション
	7.7 まとめ

8章 アカウントごとのサーバ設定
	8.1 この技法の限界
		8.1.1 サーバ全体の設定を上書きする
		8.1.2 認証の問題
	8.2 公開鍵ベースの設定
		8.2.1 OpenSSHの認可ファイル
		8.2.2 Tectiaの認可ファイル
		8.2.3 強制コマンド
		8.2.4 ホストやドメインによるアクセス制限
		8.2.5 環境変数の設定
		8.2.6 アイドルタイムアウトの設定
		8.2.7 フォワーディングの禁止または限定
		8.2.8 擬似端末(tty)生成の禁止
	8.3 ホストベースの認証におけるアクセス制御
	8.4 ユーザのrcファイル
	8.5 まとめ

9章 ポートフォワーディングとXフォワーディング
	9.1 フォワーディングとは何か?
	9.2 ポートフォワーディング
		9.2.1 ローカルフォワーディング
		9.2.2 複数の接続の開設に起因したトラブル
		9.2.3 ローカルポートフォワーディングとリモートポートフォワーディングの比較
		9.2.4 SSHプロセスが動作しているホストの外に対するポートフォワーディング
		9.2.5 ファイアウォールを迂回する
		9.2.6 リモートログインなしのポートフォワーディング
		9.2.7 待ち受けポート番号
		9.2.8 ポートフォワーディングの接続先アドレスを決める際の注意
		9.2.9 SSHを終了する際の挙動
		9.2.10 サーバにおけるポートフォワーディングの設定
		9.2.11 プロトコルに依存したポートフォワーディング〜FTPを例にとって〜
	9.3 動的ポートフォワーディング
		9.3.1 SOCKS v4、SOCKS v5、名前解決
		9.3.2 動的フォワーディングの他の使い道
	9.4 Xフォワーディング
		9.4.1 X Windowシステム
		9.4.2 Xフォワーディングはどのように動作するか
		9.4.3 Xフォワーディングを有効にする
		9.4.4 Xフォワーディングの設定
		9.4.5 Xにおける認証
		9.4.6 さらなる課題
	9.5 TCP-Wrapperとlibwrap:ポートフォワーディングのセキュリティを確保する
		9.5.1 TCP-Wrapperの設定
		9.5.2 TCP-Wrapperに関する注意
	9.6 まとめ

10章 推奨する設定
	10.1 設定の基本
	10.2 コンパイル時の設定
	10.3 サーバ全体の設定
		10.3.1 他の手段によるアクセスを無効にする
		10.3.2 OpenSSHのsshd_config
		10.3.3 Tectiaのsshd2_config
	10.4 アカウントごとの設定
	10.5 鍵管理
	10.6 クライアントの設定
	10.7 リモートのホームディレクトリ(NFS、AFS)
		10.7.1 NFSのセキュリティリスク
		10.7.2 NFSアクセスの問題
		10.7.3 AFSアクセスの問題
	10.8 まとめ

11章 ケーススタディ
	11.1 SSHの無人化:バッチまたはcronジョブ
		11.1.1 パスワード認証
		11.1.2 公開鍵認証
		11.1.3 ホストベースの認証
		11.1.4 Kerberos
		11.1.5 バッチジョブに対する一般的な注意事項
		11.1.6 推奨事項
	11.2 FTPとSSH
		11.2.1 SSHに対応した特別なFTP実装
		11.2.2 静的なポートフォワーディングとFTP:面倒な話
		11.2.3 FTPプロトコル
		11.2.4 制御チャネルの転送
		11.2.5 FTP、ファイアウォール、パッシブモード
		11.2.6 FTPとNAT
		11.2.7 FTPデータチャネルの全容
		11.2.8 データチャネルのフォワーディング
		11.2.9 sshの動的フォワーディングとSOCKS対応FTPクライアントを使ったファイル転送
	11.3 PineとIMAPのSSHによるフォワーディング
		11.3.1 IMAP認証をセキュアにする
		11.3.2 メールの中継とネットニュースサーバへのアクセス
		11.3.3 接続用スクリプトの利用
	11.4 ゲートウェイホストを介する通信
		11.4.1 透過的なSSH接続の作成
		11.4.2 scpコマンドをゲートウェイ経由で利用する
		11.4.3 さらに別の方法:SSH-in-SSH(ポートフォワーディング)
		11.4.4 ProxyCommandを利用するSSH-in-SSH(OpenSSH環境)
		11.4.5 方法の比較
	11.5 大規模環境でSSHを利用する際の認証手段
		11.5.1 X.509証明書をTectiaで利用する
		11.5.2 KerberosをOpenSSHとTectiaで利用する
	11.6 Tectiaでのサーバ設定ファイルの拡張
		11.6.1 メタ設定
		11.6.2 サブ設定ファイル
		11.6.3 ダブルクォートでくくられた値
	11.7 Tectiaプラグイン
		11.7.1 失効したパスワードを変更するプラグイン
		11.7.2 キーボードを用いた対話的な認証のためのプラグイン
		11.7.3 外部認可プログラム

12章 トラブルシュートとFAQ
	12.1 デバッグメッセージ:最初の防衛線
		12.1.1 クライアントのデバッグ
		12.1.2 サーバのデバッグ
	12.2 問題と解決
		12.2.1 一般的な問題
		12.2.2 認証の問題
		12.2.3 鍵とエージェントの問題
		12.2.4 サーバの問題
		12.2.5 クライアントの問題
	12.3 他のSSH関連リソース
		12.3.1 Webサイト
		12.3.2 Usenetニュースグループ

13章 他の実装の概要
	13.1 主な機能
	13.2 本書で詳しく解説する実装
	13.3 他のSSH実装
		13.3.1 Commodore Amiga(AmigaOS、MorphOS)
		13.3.2 GNU Emacs
		13.3.3 Java
		13.3.4 Mac OS 9
		13.3.5 Mac OS X
		13.3.6 Microsoft Windows
		13.3.7 Microsoft Windows CE(PocketPC)
		13.3.8 NTTドコモFOMA
		13.3.9 OS/2
		13.3.10 Palm OS
		13.3.11 Perl
		13.3.12 Symbian OS
		13.3.13 種々のUnix(Linux、OpenBSDなど)
		13.3.14 VMS
		13.3.15 Zeta

14章 Windows用のOpenSSH
	14.1 入手とインストール
	14.2 SSHクライアントの使用
	14.3 SSHサーバの設定
		14.3.1 デスクトップにリモートのウィンドウを表示する
	14.4 公開鍵認証
		14.4.1 エージェントを動かす
	14.5 トラブルシュート
	14.6 まとめ

15章 Mac OS XにおけるOpenSSH
	15.1 SSHクライアントの利用
	15.2 OpenSSHサーバの利用
		15.2.1 サーバを有効にする
		15.2.2 ファイアウォールを開ける
		15.2.3 xinetdによる制御
		15.2.4 サーバ設定の詳細
		15.2.5 Kerberosのサポート
	15.3 認証エージェント

16章 Tectia for Windows
	16.1 入手とインストール
	16.2 クライアントの基本的な利用法
	16.3 鍵管理
	16.4 Accession Lite
	16.5 より進んだクライアントの利用
	16.6 ポートフォワーディング
	16.7 Connector
		16.7.1 全般的な設定
		16.7.2 外部へのSSH接続に使うサーバ
		16.7.3 動的ポートフォワーディングのためのフィルタルール
		16.7.4 設定ファイル
	16.8 ファイル転送
	16.9 コマンドラインプログラム
	16.10 トラブルシュート
	16.11 サーバ
		16.11.1 サーバの動作
		16.11.2 サーバ設定
		16.11.3 コマンドと対話的セッション
		16.11.4 認証
		16.11.5 アクセス制御
		16.11.6 フォワーディング
		16.11.7 SFTPサーバ
		16.11.8 ログの取得とデバッグ

17章 PuTTY for Windows
	17.1 入手とインストール
	17.2 基本的なクライアントの利用
		17.2.1 コンソールクライアントPlink
		17.2.2 リモートコマンドを実行する
	17.3 ファイル転送
		17.3.1 PSCPによるファイル転送
		17.3.2 PSFTPによるファイル転送
	17.4 鍵管理
		17.4.1 鍵を選択する
		17.4.2 SSHエージェントPageant
	17.5 高度なクライアントの利用
		17.5.1 セッションの保存
		17.5.2 ホスト鍵
		17.5.3 プロトコルバージョンの選択
		17.5.4 TCP/IP設定
		17.5.5 擬似端末の割り当て
		17.5.6 プロキシとSOCKS
		17.5.7 暗号化アルゴリズム
		17.5.8 認証
		17.5.9 圧縮
		17.5.10 ログの取得とデバッグ
		17.5.11 バッチジョブ
	17.6 フォワーディング
		17.6.1 PuTTYによるフォワーディング
		17.6.2 Plinkでのフォワーディング
	17.7 まとめ

18章 SSH実装における日本語対応
	18.1 日本語対応クライアント
		18.1.1 Poderosa
		18.1.2 UTF-8 TeraTerm Pro with TTSSH2
		18.1.3 Reflection for Secure IT
		18.1.4 WinSCP
		18.1.5 FileZilla
		18.1.6 Transmit
	18.2 日本語対応状況のまとめ

付録A OpenSSH 4.0の新機能
	A.1 サーバ側の機能追加:sshd
		A.1.1 アクセス制御違反時のログ取得
		A.1.2 AddressFamilyキーワード
		A.1.3 パスワードとアカウントの失効に関する警告
	A.2 クライアント側の機能追加:ssh、scp、sftp
		A.2.1 KbdInteractiveDevicesキーワード
		A.2.2 接続共有の制御機能の拡張
		A.2.3 ホスト名のハッシュ化
		A.2.4 ポートフォワーディング
		A.2.5 sftpコマンドライン機能
	A.3 ssh-keygen
		A.3.1 known hostsファイルのハッシュ化
		A.3.2 known hostsを管理する

付録B sshregexのTectiaマニュアルページ
	B.1 正規表現形式:egrep形式
		B.1.1 egrep形式の正規表現形式におけるエスケープされた文字
	B.2 正規表現形式:ZSH_FILEGLOB(伝統的な)形式
	B.3 egrepとZSH_FILEGLOBにおける文字クラス
	B.4 正規表現形式:SSH形式
		B.4.1 SSH形式の正規表現におけるエスケープされた文字
		B.4.2 SSH形式の正規表現における文字クラス
	B.5 著者
	B.6 参照

付録C SSH Tectiaのモジュール名(デバッグ用)

付録D OpenSSHおよびTectiaのSSH-1関連機能
	D.1 OpenSSHの機能
		D.1.1 サーバ全体の設定
		D.1.2 クライアントの設定
		D.1.3 ファイル
	D.2 Tectiaの機能
		D.2.1 サーバ全体の設定
		D.2.2 クライアントの設定
		D.2.3 ファイル転送
		D.2.4 鍵管理
		D.2.5 認証エージェント

付録E SSHクイックリファレンス
	E.1 凡例
	E.2 sshdのオプション
	E.3 sshdのキーワード
	E.4 sshオプション
	E.5 scpオプション
	E.6 sshとscpのキーワード
	E.7 ssh-keygenオプション
	E.8 ssh-agentオプション
	E.9 ssh-addオプション
	E.10 OpenSSHにおけるidentityと認可ファイル
	E.11 Tectiaにおけるidentityと認可ファイル
	E.12 環境変数

付録F Tectia 5の新機能
	F.1 SSH Tectia client/serverソリューション5
	F.2 SSH G3の概要
		F.2.1 SSH G3の主な特長
		F.2.2 Connection Broker
		F.2.3 CryptiCoreアルゴリズム
	F.3 Enhanced file transfers with EFT Expansion Pack
		F.3.1 FTP-SFTP変換
	F.4 SSH Tectia Client/Server 5.1での他の新機能
	F.5 XML設定フォーマット

付録G SSHサーバをセキュアに運用するために
	G.1 OpenSSHサーバを取り巻く現状
		G.1.1 OpenSSHサーバプログラムの既知の脆弱性に対する攻撃
		G.1.2 日本国内のユーザを狙った辞書攻撃
	G.2 セキュリティ対策
	G.3 参考情報
		G.3.1 Webサイト
		G.3.2 書籍

索引