Solaris のシステム管理 (セキュリティサービス)

第 5 章 Secure Shell の管理 (参照)

この章では、システム管理者から見た Secure Shell の機能と Secure Shell の構成方法について説明します。この章の内容は次のとおりです。

標準的な Secure Shell セッション

Secure Shell デーモン (sshd) は通常、/etc/init.d/sshd スクリプトによりブート時に起動されます。デーモンは、クライアントからの接続を待機します。Secure Shell セッションは、sshscp、または sftp コマンドが実行されると開始します。接続を受信するたびに、新しい sshd デーモンがフォークされます。フォークされたデーモンは、鍵の交換、暗号化、認証、コマンドの実行、およびクライアントとのデータ交換を行います。Secure Shell セッションの特性は、クライアント構成ファイルとサーバー構成ファイルによって決定されます。また、コマンド行パラメータを使用することもできます。クライアントとサーバーは、相互に認証する必要があります。認証に成功したあと、ユーザーはコマンドをリモートで実行でき、ホスト間でデータをコピーできます。

セッションの特性

サーバー側の sshd デーモンの動作は、/etc/ssh/sshd_config ファイルのキーワードを設定することで変更できます。sshd が起動しているときに、コマンド行オプションを使用することもできます。たとえば、sshd_config により、サーバーにアクセスするときに使用する認証タイプを変更できます。

クライアント側の動作は、Secure Shell のパラメータで変更できます。パラメータの優先順位は次のとおりです。

たとえば、Cipher として blowfish に設定されているシステム全体の構成を変更するには、コマンド行に -c 3des を指定します。

認証

Secure Shell の認証は、次の手順で行われます。

  1. ユーザーが、sshscp、または sftp コマンドを実行します。

  2. クライアントとサーバーは、共有セッション鍵に合意します。

    v1 のリモートホストは、ホスト (RSA) 鍵とサーバー (RSA) 鍵をクライアントに送信します。サーバー鍵は通常、1 時間ごとに生成され、メモリーだけに格納されます。クライアントは、リモートホスト鍵がローカルホストの $HOME/.ssh/known_hosts ファイルに格納されていることを確認します。次にクライアントは、256 ビットの乱数を生成して、リモートホストのホスト鍵とサーバー鍵を暗号化します。暗号化された乱数は、セッション内での後続のすべての通信を暗号化するときに、セッション鍵として使用されます。

    v2 のリモートホストは、ホスト鍵の DSA を使用し、サーバー鍵を生成しません。代わりに共有セッション鍵を、Diffie-Hellman 方式で合意したときに生成します。

  3. ローカルホストとリモートホストは、相互に認証します。

    v1 のクライアントでは、.rhosts.rhosts とRSA、RAS challenge-response、またはパスワードベースの認証を使用できます。v2 では、.rhosts、DSA、およびパスワードベースの認証だけを使用できます。

コマンドの実行とデータの転送

認証が完了したら、ユーザーは通常、シェルまたはコマンド実行を要求して Secure Shell を使用します。ssh のオプションを使用すれば、擬似端末を配置したり、X11 あるいは TCP/IP の接続を転送したり、セキュリティ保護された接続上で ssh-agent を有効にしたりすることができます。ユーザーセッションの基本手順は次のとおりです。

  1. ユーザーがシェルまたはコマンドの実行を要求し、セッションモードを開始します。

    セッションモードでは、データは端末を通してクライアント側に送受信され、シェルまたはコマンドを介してサーバー側に送受信されます。

  2. ユーザープログラムを終了します。

  3. すべての X11 および TCP/IP 接続の転送を停止します。ただし、既存の X11 と TCP/IP 接続は、すべて開いたままです。

  4. サーバーはコマンド終了をクライアントに送信し、両サイドの接続が終了します。

Secure Shell を構成する

Secure Shell セッションの特性は、構成ファイルで変更できます。コマンド行のオプションを使用することで、このデフォルト設定を変更できます。

Secure Shell クライアントの構成

ほとんどの場合、Secure Shell セッションのクライアント側の特性は、システムの構成ファイル (/etc/ssh/ssh_config) によって決定されます。このファイルは、システム管理者が設定します。ユーザー構成ファイルの $HOME/.ssh/config ファイルの構成はシステムの構成ファイルより優先されます。さらに、コマンド行での指定は、これらより優先されます。

コマンド行オプションはクライアント側の要求ですが、 サーバー側の /etc/ssh/sshd_config ファイルによって許可または拒否されます (ssh_config(4) のマニュアルページを参照)。構成ファイルのキーワードとコマンドオプションについては、次の節で説明します。詳細は、ssh(1)scp(1)sftp(1)、およびssh_config(4) のマニュアルページを参照してください。2 つのユーザー構成ファイルの中で Host キーワードには、ホストまたはワイルドカード表現を指定します。このキーワードは、次の Host キーワードが出現するまで、後続のすべてのキーワードに適用されます。

ホスト固有のパラメータ

ローカルホストごとに異なる Secure Shell 特性を使用する場合、システム管理者は /etc/ssh/ssh_config ファイルにホストまたはその正規表現形式とともにいくつかのパラメータセットを定義します。ファイル内のエントリを、 Host キーワードでグループ化してください。Host キーワードを使用しない場合、クライアント構成ファイル内のエントリは、ユーザーが使用しているローカルホストに適用されます。

クライアント側の認証パラメータ

認証方式を決定するには、次のキーワードのいずれかに「yes」を設定します。

キーワード UseRsh は、rlogin rsh コマンドを使用することを指定します。このキーワードは、多くの場合、Secure Shell がサポートされないときに使用します。

キーワード Protocol には、Secure Shell プロトコルのバージョン (v1 または v2) を設定します。両方のバージョンを指定する場合は、コンマで区切ります。最初のバージョンの使用に失敗した場合は、2 番目のバージョンが使用されます。

キーワード IdentityFile には、ユーザーの非公開鍵を格納する代替ファイル名を指定します。

キーワード Cipher には、v1 の暗号化アルゴリズム (blowfish または 3des) を指定します。キーワード Ciphers には、v2 の暗号化アルゴリズム (3des-cbcblowfish-cbc、および aes128-cbc) の優先順位を指定します。ssh および scp コマンドの -c オプションは、コマンド行で暗号化アルゴリズムを指定するときに使用します。

既知のホストファイルパラメータ

既知のホストファイル (/etc/ssh/ssh_known_hosts および $HOME/.ssh/known_hosts) には、すべてのホストの公開鍵が含まれています。この公開鍵は、クライアントが Secure Shell を使用してホストと通信するときに使用されます。 GlobalKnownHostsFile キーワードには、/etc/ssh/ssh_known_hosts の代替ファイルを指定します。UserKnownHostsFile キーワードには、$HOME/.ssh/known_hosts の代替ファイルを指定します。

StrictHostKeyChecking キーワードを指定した場合は、新しいホストを既知のホストファイルに追加するときは手動で行う必要があります。また、公開鍵が変更されたり、公開鍵が既知のホストファイルに存在しないホストは拒否されます。キーワード CheckHostIP を指定すると、DNS のスプーフィングによって鍵が変更された場合に、既知のホストファイルに指定されているホストの IP アドレスが確認されます。

クライアント側の X11 転送とポート転送パラメータ

LocalForward キーワードには、リモートホスト上の特定のポートに転送するローカル TCP/IP ポートを指定します。セキュリティ保護されたチャネルが使用されます。GatewayPorts キーワードを指定すると、ローカル転送されたポートにリモートホストが接続することを可能にします。

ssh コマンドでポート転送するときは、次のオプションを使用できます。

ForwardX11 キーワードを指定すると、 DISPLAY 環境変数が設定されたリモートホストに X11 接続がリダイレクトされます。XAuthLocation キーワードには、xauth(1) プログラムの場所を指定します。

クライアント側の接続とその他のパラメータ

NumberOfPasswordPrompts キーワードには、パスワードを要求する回数を指定します。指定した回数が終了すると、Secure Shell が終了します。ConnectionAttempts キーワードには、接続試行回数 (1 秒間に 1 回試行) を指定します。この回数が終了すると、Secure Shell が終了します。ただし、FallBackToRsh キーワードが設定されている場合は、rsh に戻ります。

Compression キーワードを指定すると、転送データが圧縮されます。CompressionLevel キーワードには、圧縮レベル (1 - 9) を設定します。圧縮率とそれを行う時間にはトレードオフの関係があります。

User には、代替ユーザー名を指定します。Hostname には、リモートホストの代替名を指定します。ProxyCommand には、Secure Shell を起動する代替コマンド名を指定します。プロキシサーバーに接続できるコマンドはすべてここに指定できます。指定するコマンドは、標準入力から読み込んで標準出力に書き込む必要があります。

Batchmode を指定すると、パスワードプロンプトが無効になります。パスワードプロンプトは、スクリプトなどのバッチジョブに使用します。

KeepAlive を指定すると、ホストがクラッシュしたときに、ネットワークの問題が発生したことを示すメッセージが出力されます。LogLevel には、ssh メッセージの冗長レベルを設定します。

EscapeChar には、特殊文字をプレーンテキストとして表示するときに、接頭辞として使用する単一文字を定義します。

Secure Shell サーバーの構成

サーバー側の Secure Shell セッションの特性は、/etc/ssh/sshd_config ファイルによって管理されます。このファイルは、システム管理者が設定します。

サーバー側の認証パラメータ

使用できる認証方式のキーワードは、以下のとおりです。

HostKey および HostDSAKey には、デフォルトのファイル名を使用しないときに、ホスト公開鍵を格納するファイルを指定します。KeyRegenerationInterval には、サーバー鍵を再生成する頻度を指定します。

Protocol には、バージョンを指定します。Ciphers には、v2 の暗号化アルゴリズムを定義します。ServerKeyBits には、サーバーの鍵のビット数を定義します。

ポートと転送パラメータ

AllowTCPForwarding には、TCP 転送を許可するかどうかを指定します。

GatewayPorts を指定すると、クライアントに転送されたポートにリモートホストが接続されます。Port には、sshd が待機するポート番号を指定します。ListenAddress には、sshd が待機するローカルアドレスを指定します。ListenAddress を指定しない場合、 sshd はデフォルトですべてのアドレスで待機します。

X11Forwarding を指定すると、X11 転送が有効になります。X11DisplayOffset には、転送に使用できる最初の表示番号を指定します。このキーワードを指定すると、sshd が実際の X11 サーバーに干渉しなくなります。XAuthLocation には、 xauth プログラムの場所を指定します。

セッション制御パラメータ

KeepAlive を指定すると、接続が切断したときおよびホストがクラッシュしたときに、メッセージが表示されます。LogLevel には、sshd メッセージの冗長レベルを設定します。SyslogFacility には、ログに記録する sshd メッセージの機能コードを指定します。

サーバー接続とその他のパラメータ

AllowGroupsAllowUsersDenyGroups、および DenyUsers キーワードを使用して、ssh を使用できるユーザーと使用できないユーザーを制御します。

LoginGraceTimeMaxStartupsPermitRootLogin、および PermitEmptyPasswords キーワードを使用して、ログインするユーザーを制御します。StrictModes を指定すると、sshd は、ユーザーがログインする前にファイルのモードと所有権およびホームディレクトリを確認します。UseLogin には、対話型ログインセッションで login を使用するかどうかを指定します。このキーワードは有効にする必要はありません。Solaris 環境ではできるだけ使用しないでください。

Subsystem を指定すると、sftp に使用するファイル転送デーモンが構成されます。

サイト全体で既知のホストを管理する

ホスト間の対話を安全に行うには、ローカルホストの /etc/ssh/ssh_known_hosts ファイルにサーバーの公開鍵を格納する必要があります。 /etc/ssh/ssh_known_hosts ファイルを更新するときに、スクリプトを使用すると簡単に行うことができますが、セキュリティが大幅に低下するため、できるだけ使用しないでください。

/etc/ssh/ssh_known_hosts ファイルを配布するときは、次のようなセキュリテイ保護されたメカニズムで行う必要があります。

known_hosts ファイルに偽の公開鍵を挿入してアクセス権を取得しようとする侵入者をできる限り阻止するには、 ssh_known_hosts ファイルの既知の信頼できるソースとして、JumpStart サーバーを使用します。ssh_known_hosts ファイルは、インストール中に配布できるほか、各ホストで定期的にスクリプト (scp を使用して最新バージョンを取り込む) を実行して配布することもできます。この方法は、JumpStart サーバーの公開鍵がすでに各ホストに保管されているため安全です。

Secure Shell ファイル

次の表は、重要な Secure Shell ファイルと推奨される UNIX アクセス権を示します。

表 5-1 Secure Shell ファイル

ファイル名 

説明 

推奨アクセス権と所有者 

/etc/ssh/sshd_config

sshd (Secure Shell デーモン) の構成データを含む

-rw-r--r-- root

/etc/ssh/ssh_host_key

ホスト非公開鍵を含む 

-rw------- root

/etc/ssh_host_key.pub

ホスト公開鍵を含む。ホスト鍵をローカル known_hosts ファイルにコピーするときに使用する

-rw-r--r-- root

/var/run/sshd.pid

Secure Shell デーモン sshd のプロセス ID を含む。このデーモンは接続を待機する (複数のデーモンが存在する場合は、起動された最後のデーモンを含む)

rw-r--r-- root

$HOME/.ssh/authorized_keys

v1 の場合は、ユーザーアカウントにログインするときに使用できる RSA 鍵を指定する。v2 の場合は、使用できる DSA と RSA 鍵を指定する 

-rw-rw-r-- johndoe

/etc/ssh/ssh_known_hosts

すべてのホストのホスト公開鍵を含む。クライアントはこれらの公開鍵を使用して、セキュリティ保護された通信を行う。このファイルはシステム管理者が用意する 

-rw-r--r-- root

$HOME/.ssh/known_hosts

すべてのホストのホスト公開鍵を含む。クライアントはこれらの公開鍵を使用して、セキュリティ保護された通信を行う。このファイルは自動的に管理される。ユーザーが未知のホストに接続すると、リモートホスト鍵がファイルに追加される 

-rw-r--r-- johndoe

/etc/nologin

このファイルが存在する場合、sshdroot ログイン以外のユーザーを拒否する。ファイルの内容は、ログインしようとするユーザーに表示される

-rw-r--r-- root

$HOME/.rhosts

ホスト名とユーザー名のペアを含む。ユーザーは、対応するホストにパスワードを使用しないでログインできるこのファイルは、Secure Shell、rlogind、および rshd デーモンで使用される

-rw-r-r-- johndoe

$HOME/.shosts

ホスト名とユーザー名のペアを含む。ユーザーは、対応するホストにパスワードを使用せずに Secure Shell だけを使用してログインできる 

-rw-r-r-- johndoe

/etc/hosts.equiv

.rhosts 認証と Secure Shell 認証で使用されるホストを含む

-rw-r--r-- root

/etc/ssh/shosts.equiv

Secure Shell 認証で使用されるホストを含む 

-rw-r--r-- root

$HOME/.ssh/environment

ログイン時に割り当てを行う初期化に使用する 

-rw------- johndoe

$HOME/.ssh/rc

ユーザーのシェルを起動前に実行する初期化ルーチン 

-rw------- johndoe

/etc/ssh/sshrc

システム管理者がすべてのユーザー用に用意したホスト固有の初期化ルーチン 

-rw-r--r-- root

次の表は、主要な Secure Shell コマンドの要約です。

表 5-2 Secure Shell コマンド

コマンド 

説明 

ssh

リモートマシンにログインし、リモートマシン上でコマンドを実行するプログラム。このコマンドは、 rloginrsh に代わるコマンドである。セキュリティ保護されていないネットワークを介して信頼できないホスト間でセキュリティ保護された暗号化通信を行うときに使用する。X11 接続と任意の TCP/IP ポートも、セキュリティ保護されたチャネルを介して転送される

sshd

Secure Shell が待機するデーモン。このデーモンは、クライアントからの接続を待機する。セキュリティ保護されていないネットワークを介して 2 つの信頼できないホスト間でセキュリティ保護された暗号化通信を行うときに使用する。 

ssh-keygen

ssh の認証鍵を生成および管理する

ssh-agent

公開鍵認証時に使用される非公開鍵を格納するプログラム。ssh-agent は、X セッションまたはログインセッションの開始時に起動する。ほかのすべてのウィンドウまたはプログラムは、ssh-agent プログラムのクライアントとして起動する。環境変数を使用すれば、ユーザーが ssh を使用してほかのマシンにログインするときに、エージェントを検出して認証に自動的に使用することができる

ssh-add

RSA または DSA ID (鍵) を認証エージェント ssh-agent に追加する

scp

ssh を使用してデータ転送するときに、ネットワーク上のホスト間でファイルを安全にコピーする。rcp と異なり、scp はパスワードまたはパスフレーズを要求する (認証に必要な場合)

sftp

対話型ファイル転送プログラム。ftp と同様に、暗号化された ssh トランスポートを介してすべての操作を実行するsftp は、指定したホスト名に接続してログインし、対話型コマンドモードに入る