Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

13.2.9. サービスの設定: OpenSSH およびキャッシュされたキー

OpenSSH は、2 つのシステム間で安全な、暗号化された接続を作成します。あるマシンが別のマシンに対して認証してアクセスを許可します。認証は、サーバー接続またはそのマシンのユーザー用のマシン自体になります。OpenSSH の詳細は、14章OpenSSH を参照してください。
この認証は、認証ユーザーまたはマシンを識別する 公開鍵と秘密鍵のペア を使用して実行されます。マシンにアクセスしようとしているリモートマシンまたはユーザーがキーペアを提示します。その後、ローカルマシンはそのリモートエンティティーを信頼するかどうかを選択します。信頼される場合、そのリモートマシンの公開鍵は known_hosts ファイルまたは authorized_keys のリモートユーザーに保存されます。リモートマシンまたはユーザーが再度認証を試みるたびに、ローカルシステムは最初に known_hosts ファイルまたは authorized_keys ファイルをチェックして、リモートエンティティーが認識され、信頼できるかどうかを確認します。存在する場合には、アクセスが許可されます。
最初の問題は、これらのアイデンティティーを確実に検証する際に生じます。
known_hosts ファイルは、マシン名、その IP アドレス、および公開鍵のトリプレットです。
server.example.com,255.255.255.255 ssh-rsa AbcdEfg1234ZYX098776/AbcdEfg1234ZYX098776/AbcdEfg1234ZYX098776=
known_hosts ファイルは、さまざまな理由ですぐに古くなる可能性があります。たとえば、IP アドレスを介して DHCP サイクルを使用しているシステム、新しい鍵を定期的に再発行することも、仮想マシンまたはサービスをオンラインおよび削除することもできます。これにより、ホスト名、IP アドレス、およびキートリプレットが変更されます。
管理者は、セキュリティーを維持するために、現在の known_hosts ファイルを消去して維持する必要があります。(またはシステムユーザーは、提示されるマシンと鍵を受け入れることで、キーベースのセキュリティーのセキュリティー上のメリットを否定します。)
さらに、マシンとユーザーの両方について問題として、キーをスケーラブルな方法で配布しています。マシンは、暗号化されたセッションの確立の一環として鍵を送信できますが、ユーザーはキーを事前に指定する必要があります。鍵を継続的に伝播して更新するのは、管理作業が困難です。
最後に、SSH キーとマシン情報はローカルでのみ維持されます。known_hosts ファイルが均一に更新されていないため、一部のシステムで認識され、他のシステムで信頼されないマシンまたはユーザーが存在する可能性があります。
SSSD の目的は、認証情報をキャッシュとしてサーバーすることです。これには、マシンおよびユーザーの SSH 公開鍵の認証情報キャッシュとして機能することが含まれます。OpenSSH は、キャッシュされた鍵を確認するように SSSD を参照するように設定されています。SSSD は Red Hat Linux の Identity Management(IPA)ドメインを ID として使用し、Identity Management は実際に公開鍵とホスト情報を保存します。
注記
Identity Management ドメインに登録または結合した Linux マシンのみが、OpenSSH の鍵キャッシュとして SSSD を使用できます。その他の Unix マシンおよび Windows マシンは、known_hosts ファイルで通常の認証メカニズムを使用する必要があります。

ホストキーに SSSD を使用するように OpenSSH の設定

OpenSSH は、ユーザー固有の設定ファイル(~/.ssh/config)またはシステム全体の設定ファイル(/etc/ssh/ssh_config)で設定されます。ユーザーファイルはシステム設定よりも優先され、パラメーターで最初に取得した値が使用されます。このファイルのフォーマットおよび規則は、14章OpenSSH で説明されています。
ホストキーを管理するために、SSSD には sss_ssh_knownhostsproxy のツールがあり、2 つの操作を実行します。
  1. Identity Management サーバーから公開鍵キーを取得し、/var/lib/sss/pubconf/known_hosts ファイルに保存するように SSSD に要求します。
  2. ソケット(デフォルト)またはプロキシーコマンドのいずれかを使用して、ホストマシンとの接続を確立します。
このツールの形式は以下のとおりです。
sss_ssh_knownhostsproxy [-d sssd_domain] [-p ssh_port] HOST [PROXY_COMMAND]

表13.4 sss_ssh_knownhostsproxy オプション

短い引数 長い引数 説明
HOSTNAME チェックおよび接続するホストのホスト名を指定します。OpenSSH 設定ファイルでは、トークンである %h を指定できます。
PROXY_COMMAND SSH クライアントへの接続に使用するプロキシーコマンドを渡します。これは、ssh -o ProxyCommand= の実行に似ています。このオプションは、コマンドラインまたは別のスクリプトを使用して sss_ssh_knownhostsproxy を実行する場合に使用されますが、OpenSSH 設定ファイルには必要ありません。
-d sssd_domain --domain sssd_domain 指定のドメインのエントリーで公開鍵のみを検索します。指定のない場合は、SSSD は設定済みのすべてのドメインで鍵を検索します。
-p port --port port このポートを使用して SSH クライアントに接続します。デフォルトでは、これはポート 22 です。
この SSSD ツールを使用するには、ssh_config または ~/.ssh/config ファイルに 2 つのパラメーターを追加または編集します。
  • SSH クライアント(ProxyCommand)への接続に使用するコマンドを指定します。これは sss_ssh_knownhostsproxy で、必要な引数とホスト名を使用します。
  • SSSD ホストファイルの場所を指定します(グローバル既知のホストファイル)
たとえば、設定されたすべての SSSD ドメインで公開鍵を検索し、ポートとホストを指定して接続します。
ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p %h
GlobalKnownHostsFile /var/lib/sss/pubconf/known_hosts

ユーザーキーに SSSD を使用するように OpenSSH の設定

SSSD は、OpenSSH にユーザーの公開鍵を提供できます。鍵は、sss_ssh_authorizedkeys ツールの出力から直接 SSH デーモン sshd により読み取られ、ファイルに保存されません。
外部プログラムからユーザーの公開鍵を読み取るように sshd を設定するには(この場合は sss_ssh_authorizedkeys ツール)、/etc/ssh/sshd_config ファイルの AuthorizedKeysCommand ディレクティブを使用します。
sss_ssh_authorizedkeys ツールは、Identity Management(IPA)ドメインのユーザーエントリーから SSH 公開鍵を取得し、OpenSSH authorized_keys 形式で出力できます。コマンドの形式は以下のとおりです。
sss_ssh_authorizedkeys [-d sssd_domain] USER

表13.5 sss_ssh_authorizedkeys オプション

短い引数 長い引数 説明
USER 公開鍵を取得するユーザー名またはアカウント名。OpenSSH 設定ファイルでは、これはトークン %u で表示できます。
-d sssd_domain --domain sssd_domain 指定のドメインのエントリーで公開鍵のみを検索します。指定のない場合は、SSSD は設定済みのすべてのドメインで鍵を検索します。
この機能は、以下のように /etc/ssh/sshd_config で設定されます。
AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
AuthorizedKeysCommandRunAs nobody
これおよび他のオプションは、man ページの sshd_config(5) に記載されています。変更を反映するには、sshd サービスを再起動する必要があります。