SSHD(8) FreeBSD システム管理者マニュアル SSHD(8)
名称
sshd − OpenSSH SSH デーモン |
書式
sshd [−deiqtD46] [−b ビット数] [−f 設定ファイル] [−g ログイン猶予時間] [−h ホスト鍵ファイル] [−k 鍵の生成間隔] [−o オプション] [−p ポート番 号] [−u 長さ] |
解説 |
sshd (SSH デーモン) は ssh(1) のためのデーモンプログラムです。これらのプ ログラムはともに rlogin と rsh を置き換えるもので、安全でないネットワーク 上にある、2つの信頼されていないホスト間で、暗号化された安全な通信を提供し ます。これらのプログラムはできるだけ簡単にインストールして使えるよう配慮 されています。 sshd はクライアントからの接続を listen しているデーモンです。通常これは ブート時に /etc/rc.d/sshd から起動され、接続を受けつけるたびに新しいデー モンが fork します。 fork したデーモンは、鍵の交換、暗号化、認証、コマン ド実行、そしてデータ交換をおこないます。この sshd の実装では、SSH プロト コルバージョン 1 と 2 を同時にサポートしています。 sshd は以下のように動 作します: |
SSH プロトコル バージョン 1 |
各ホストは、そのホストに固有の RSA 鍵 (通常 1024 ビット) をもっています。 これはそれぞれのホストを識別するのに使われます。加えて、デーモンは起動時 にサーバ用 RSA 鍵 (通常 768 ビット) を生成します。この鍵はふつう使われる と 1 時間おきに生成し直され、ディスクに保存されることは決してありません。 クライアントが接続してくると、デーモンはその公開ホスト鍵およびサーバ鍵を 返します。クライアントは自分がもっているデータベースとこの RSA ホスト鍵と を比較し、それが変更されていないことを確かめます。つぎにクライアントは 256 ビットの乱数を生成します。これをそのホスト鍵とサーバ鍵両方をつかって 暗号化し、暗号化された数値をサーバに送ります。このとき、どちらの側もこの 数値をセッション鍵として使います。セッション鍵とはこれ以降のすべての通信 を暗号化するのに使われるもので、以後セッションは既存の暗号化アルゴリズム を使って暗号化されます。これらのアルゴリズムは現在のところ Blowfish また は 3DES で、デフォルトでは 3DES となっています。クライアントはサーバに よって提案された暗号化アルゴリズムから使用するものを選択します。 つぎに、サーバとクライアントは認証のための対話に入ります。クライアントは 自分自身の身分を証明するため、 .rhosts 認証や、RSA ホスト認証と組み合わせ た .rhosts 認証、RSA チャレンジ・レスポンス 認証、あるいはパスワード認証 を使おうとします。 rhosts 認証は根本的に安全でないため、ふつうは禁止されています。しかし必要 とあればサーバの設定ファイルによって許可することもできます。 rshd, rlogind および rexecd を止めないかぎり (これは rlogin と rsh を完全に禁止 することになりますが)、システムのセキュリティは改善されません。 |
SSH プロトコル バージョン 2 |
バージョン 2 も同様に動作します: 各ホストは固有のホスト鍵 (RSA または DSA) をもっており、これでホストを識別します。しかしデーモンが開始した時点 にはサーバ鍵は生成されません。より進歩したセキュリティは Diffie-Hellman 鍵交換によって得られます。この鍵交換から共通のセッション鍵が得られます。 これ以降セッションは対称的暗号化アルゴリズムを用いて暗号化されます。アル ゴリズムは、現在のところ 128 ビット AES, Blowfish, 3DES, CAST128, Arcfour, 192 ビット AES あるいは 256 ビット AES です。クライアントはサー バが提案した暗号化アルゴリズムを選びます。これに加えて、暗号化メッセージ 認証コード (hmac-sha1 あるいは hmac-md5) により、セッションの内容が途中で 改竄されてしまうことのないようにします。 プロトコル バージョン 2 では公開鍵に基づくユーザ認証 (PubkeyAuthentication) と、クライアントホスト認証 (HostbasedAuthentication)、これに加えて従来のパスワード認証とチャレンジ・ レスポンス認証が使えます。 |
コマンド実行とデータ転送 |
クライアントが自分自身の証明に成功すると、セッションを準備するための対話 が始まります。このあとクライアントは仮想端末を割り当てたり、 X11 接続を転 送したり、TCP/IP 接続を転送したり、あるいは安全な通信路を経由して認証エー ジェントの接続を転送したりします。 最後に、クライアントはシェルか、あるいはコマンドの実行のどちらかを要求し ます。ここで双方はセッション モードに入ります。このモードでは両者はいつで もデータを送ることができ、そのデータはサーバ側のシェルまたはコマンドと、 クライアント側のユーザ端末とでやりとりされます。 ユーザのプログラムが終了し、転送されたすべての X11 接続やその他の接続が閉 じられると、サーバはクライアントにコマンドの終了状態を送り、両者は終了し ます。 sshd はコマンドラインオプションか、設定ファイルによって設定することができ ます。コマンドラインからのオプションは、設定ファイルで指定されている値よ りも優先されます。 sshd はハングアップシグナル SIGHUP を受け取ると、自分の設定ファイルを読み 込みなおします。これは自分自身を開始したときのパス名 /usr/sbin/sshd を exec することによっておこないます。 コマンドラインオプションには次のようなものがあります: |
−b ビット数
プロトコル バージョン 1 で短期的に使われるサーバ鍵のビット数を指 定します (デフォルトでは 768 ビットです)。 −d −e −f 設定ファイル −g ログイン猶予時間 −h ホスト鍵ファイル −i −k 鍵の生成間隔 −o オプション −p ポート番号 −q −t −u 長さ −D −4 −6 設定ファイル |
sshd は /etc/ssh/sshd_config (あるいはコマンドラインから −f オプションで 指定したファイル) から設定を読み込みます。このファイルの形式と設定項目は sshd_config(5) で説明されています。 |
ログインの過程
ユーザがログインに成功すると、 sshd は以下のことをおこないます: |
1. ユーザが端末にログインしており、コマンドがとくに指定されていない場合、 (設定ファイルまたは $HOME/.hushlogin -- FILES の項を参照 -- で禁止されていなければ) 前回のログイン時刻と /etc/motdを表示する。
2. ユーザが端末にログインしている場合、ログイン時刻を記録する。 3. /etc/nologin と /var/run/nologin をチェックする。これが存在す る場合、その内容を表示して終了する (root 以外)。 4. そのユーザの通常の権限に移行する。 5. 基本的な環境変数を設定する。 6. $HOME/.ssh/environment が存在していて、ユーザの環境変数を変更 することが許されていれば、それを読み込む。 sshd_config(5) の PermitUserEnvironment 設定項目を参照のこと。 7. ユーザのホームディレクトリに移動する。 8. $HOME/.ssh/rc が存在する場合、それを実行する。そうでなければ、 もし /etc/ssh/sshrc が存在しているなら、それを実行する。これ以 外の場合は xauth(1) を実行する。この ‘‘rc’’ ファイルには、X11 の認証プロトコルと (適用可能であれば) そのクッキーが標準入力か ら与えられる。 9. ユーザのシェルまたはコマンドを実行する。 authorized_keys ファイルの形式 |
$HOME/.ssh/authorized_keys ファイルは、プロトコル バージョン 1 における RSA 認証とプロトコル バージョン 2 における公開鍵認証 (PubkeyAuthentication) でログインが許されている公開鍵を格納するものです。 別のファイルを使いたい場合は AuthorizedKeysFile で指定できます。 このファイルには各行にひとつの鍵が格納されています (空行や ‘#’ で始まる行 はコメントとして無視されます)。プロトコル バージョン 1 の RSA 鍵では、空 白で区切られた次のようなフィールドが格納されています: オプション、ビット 数、指数、モジュロ、鍵のコメント。プロトコル バージョン 2 で使う公開鍵で は次のフィールドが格納されています: オプション、鍵の種類、base64 エンコー ドされた鍵本体、鍵のコメント。オプションのフィールドはなくてもかまいませ ん。オプションが存在するかどうかは、この行が数字あるいはピリオドで始まる かどうかによって決定されます (オプションフィールドは決して数字では始まり ません)。プロトコル バージョン 1 では、RSA 鍵はビット数、指数およびモジュ ロによって表されます。コメント欄は利用されません (が、鍵を区別するのに役 立ちます)。プロトコル バージョン 2 では、鍵の種類は ‘‘ssh-dss’’ あるいは ‘‘ssh-rsa’’ です。 これらのファイルでは通常 1 行が何百バイトもの長さになっていることに注意し てください (これは公開鍵の係数のサイズが大きいためです)。これを手でタイプ する気にはならないでしょう。かわりに identity.pub, id_dsa.pub あるいは id_rsa.pub をコピーして、それを編集してください。 sshd では、プロトコル 1 とプロトコル 2 の両方で、 RSA 鍵の長さが少なくと も 768 ビット以上である必要があります。 オプションは (もしあれば) コンマによって区切ることができます。間にスペー スを入れてはいけませんが、ダブルクォートの間にはさめばオッケーです。以下 のオプションがサポートされています (これらのキーワードは大文字小文字を区 別しません) : |
from="pattern-list"
このオプションをつけると、公開鍵認証に加えて、クライアントのホス トをチェックできるようになります。コンマで区切ったリモートホスト 名 (canonical name) のパターン列が指定できます (‘*’ および ‘?’ が ワイルドカードとして使えます)。このリストには「〜でない」という否 定 (negation) を入れることもできます。その場合はパターンの先頭に ‘!’ をつけてください。否定つきのパターンにホストの canonical name がマッチした場合、この鍵は許可されません。このオプションはセキュ リティを上げるためにつけられました: 公開鍵認証それ自体は、(鍵を除 いて) ネットワークやネームサーバ、その他ありとあらゆるものを信用 しません。しかし、もし何物かが何らかの方法で鍵を盗むことができれ ば、その鍵を使って世界のどこからでもログインできてしまうことにな ります。このオプションは、そのような盗まれた鍵を使うことをより困 難にします (もしこれを使おうとするなら、鍵のほかにネームサーバや ルータまでも手を入れなくてはならないからです)。 command="command" environment="NAME=value" no-port-forwarding no-X11-forwarding no-agent-forwarding no-pty permitopen="host:port" authorized_keysファイルの例: from="*.niksula.hut.fi,!pc.niksula.hut.fi" 1024 35 23...2334 ylo@niksula command="dump /home",no-pty,no-port-forwarding 1024 33 23...2323 backup.hut.fi permitopen="10.2.1.55:80",permitopen="10.2.1.56:25" 1024 33 23...2323 ssh_known_hosts ファイルの形式 |
/etc/ssh/ssh_known_hosts および $HOME/.ssh/known_hosts の各ファイルは今ま でに知られているホストの公開鍵をすべて格納しています。システム用の known_hosts ファイル (大域的 known_hosts ファイル) は管理者によって用意さ れ (必須ではありません)、ユーザ用の known_hosts ファイルは自動的に更新さ れます。これは、ユーザがまだ知られていないホストに接続すると、そのホスト 鍵が自動的にユーザ用 known_hosts ファイルに追加されるようになっています。 これら known_hosts ファイルの各行は次のようなフィールドからなっています: ホスト名、ビット数、指数、係数、そしてコメント。各フィールドはスペースに よって区切られています。 ホスト名はコンマで区切られたパターン列です ( ‘*’ および ‘?’ はワイルド カードとして使われます)。各パターンは (クライアントを認証しているときは) 順にそのホストの正式名と比較されるか、あるいは (サーバを認証しているとき は) ユーザが与えた名前と比較されます。パターンの先頭に ‘!’ をつけると「〜 でない」という否定 (negation) の意味になります。否定されたパターンにマッ チしたホストは、たとえその行の他のパターンにマッチしても (その行では) 受 けつけられません。 ビット数、指数および係数は RSA ホスト鍵から直接取り込まれます。たとえばこ れらは /etc/ssh/ssh_host_key.pub などから取得されます。オプションのコメン ト フィールドは行末まで続き、これは無視されます。 ‘#’ で始まる行および空行はコメントとして無視されます。 ホスト間認証をおこなうさい、どれか適切な鍵をもった行がマッチすれば、認証 は受け入れられます。したがって同じ名前が複数の行にあったり、同一ホストに 異なるホスト鍵が書いてあったりしても受けつけられます (が、おすすめはしま せん)。異なったドメインにあるホスト名の短縮形がひとつのファイルにまとめら れているときは、これは仕方がないでしょう。また、これらのファイルには矛盾 する情報が書かれていることもあり得ます。その場合は、どれかのファイルに正 しい情報が書いてあれば認証は受け入れられます。 注意。これらのファイルの各行は、ふつう何百文字もの長さになっています。も ちろんこんなホスト鍵を手で入力したくはないでしょう。かわりにスクリプトで 生成するか、 /etc/ssh/ssh_host_key.pub をとってきてその先頭にホスト名をつ け加えるかしてください。 |
例: |
closenet,...,130.233.208.41 1024 37 159...93 closenet.hut.fi cvs.openbsd.org,199.185.137.3 ssh-rsa AAAA1234.....= |
関連ファイル
/etc/ssh/sshd_config
sshd の設定ファイルです。このファイルの形式と設定項目は sshd_config(5) で説明されています。 /etc/ssh/ssh_host_key, /etc/ssh/ssh_host_dsa_key /etc/ssh/ssh_host_key.pub,
/etc/ssh/ssh_host_dsa_key.pub /etc/ssh/moduli /var/empty /var/run/sshd.pid $HOME/.ssh/authorized_keys /etc/ssh/ssh_known_hosts and $HOME/.ssh/known_hosts /etc/nologin /etc/hosts.allow, /etc/hosts.deny $HOME/.rhosts このファイルでは ネットグループ (netgroup) を使うこともできます。 ホスト名やユーザ名は +@groupname のような形式で書くことができ、こ の場合はそのグループ中のすべてのホストあるいはユーザが指定されま す。 $HOME/.shosts /etc/hosts.equiv もし相手のクライアント、あるいはそこのユーザがこのファイルにマッ チする場合、クライアント側とサーバ側のユーザ名が同じならばログイ ンは自動的に許可されます。通常はこれに加えて RSA ホスト間認証が成 功していることが必要です。このファイルは root にしか書き込み可能 にしてはいけません。また、誰にでも読めるようにしておくほうがよい でしょう。 「警告: hosts.equiv でユーザ名を使うのは絶対にやめるべきです」 これはそのユーザが本当に 誰としてでもログインできてしまうことにな るんです。つまり bin や daemon や adm や、その他非常に重要なバイ ナリやディレクトリを所有しているアカウントでもログインできるので す。ユーザ名を使うのは、実際にはそのユーザに root のアクセスを許 しているのと同じです。ここでのユーザ名の唯一のまともな使いみち は、おそらく否定のエントリで使うことだけでしょう。 ここでの警告は rsh/rlogin にもあてはまることを覚えておいてくださ い。 /etc/ssh/shosts.equiv $HOME/.ssh/environment $HOME/.ssh/rc このファイルの基本的な目的は、ユーザがホームディレクトリにアクセ ス可能になる前に必要と考えられる初期化ルーチンを実行することで す。とくにこのような環境の例として、AFS があります。 おそらくこのファイルは、たとえば次のような何らかの初期化コードを 含むことになるでしょう: if read proto cookie && [ -n "$DISPLAY" ]; then |
if [ ‘echo $DISPLAY | cut -c1-10‘ = ’localhost:’ ]; then |
|||
# X11UseLocalhost=yes |
|||
echo add unix:‘echo $DISPLAY | |
|||
cut -c11-‘ $proto $cookie |
|||
else |
|||
# X11UseLocalhost=no |
|||
echo add $DISPLAY $proto $cookie |
|||
fi | xauth -q - |
fi このファイルが存在しない場合は /etc/ssh/sshrc が実行されます。こ れも存在しない場合は、 xauth がクッキーを追加するために使われま す。 このファイルは、そのユーザにのみ書き込み可能にしておいてくださ い。誰でも読めるようにしておく必要はありません。 |
/etc/ssh/sshrc
$HOME/.ssh/rc に似ています。これはそのマシン全体にわたってログイ ン時の初期化を指定するのに使われます。これは root のみ書き込み可 能にしておき、誰からも読めるようにしておくべきです。 作者 |
OpenSSH は Tatu Ylonen による、フリーなオリジナル版 ssh 1.2.12 リリースか ら派生したものです。 Aaron Campbell、 Bob Beck、 Markus Friedl、 Niels Provos、 Theo de Raadt および Dug Song が多くのバグをとり除き、新しい機能 をふたたび追加して OpenSSH をつくりました。 SSH プロトコル バージョン 1.5 および 2.0 のサポートは Markus Friedl の貢献によるものです。 Niels Provos および Markus Friedl が特権分離のサポートに貢献しました。 |
日本語訳
新山 祐介 (yusuke at cs . nyu . edu) 2003/3/31 (for 3.6p1) 当マニュアルページは氏のご好意により FreeBSD 日本語マニュアルに収録させて いただいています。翻訳についてのご意見、ご指摘がありましたら新山氏 (yusuke at cs . nyu . edu)、および FreeBSD jpman プロジェクト 〈man-jp@jp.FreeBSD.org〉 までお送りください。 |
関連項目
scp(1), sftp(1), ssh(1), ssh-add(1), ssh-agent(1), ssh-keygen(1), login.conf(5), moduli(5), sshd_config(5), sftp-server(8) |
T. Ylonen, T. Kivinen, M. Saarinen, T. Rinne, and S. Lehtinen, SSH Protocol Architecture, draft-ietf-secsh-architecture-12.txt, January 2002, work in progress material. M. Friedl, N. Provos, and W. A. Simpson, Diffie-Hellman GroupExchange for the SSH Transport Layer Protocol, draft-ietf-secsh-dh-group-exchange-02.txt, January 2002, work inprogress material. FreeBSD 10.0 September 25, 1999 FreeBSD 10.0