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

OpenSSH は、2 つのシステム間に安全で暗号化された接続を作成します。一方のマシンが他方のマシンを認証してアクセスを許可します。認証は、マシン自体のサーバー接続に対するものである場合と、該当マシン上のユーザーに対する場合があります。OpenSSH の詳細は、12章OpenSSH で説明されています。
この認証は、認証を行なっているユーザーもしくはマシンを特定する 公開キーと秘密キーのペア を通して実行されます。マシンにアクセスしようとしているリモートのマシンもしくはユーザーは、キーのペアを提示します。するとローカルマシンは、そのリモートのエンティティを信頼するかどうかを決定します。信頼できる場合は、そのリモートマシン用の公開キーは known_hosts ファイルに、リモートユーザー用の公開キーは authorized_keys ファイルに保存されます。このリモートマシンもしくはユーザーが再度認証を試みる際は常に、ローカルシステムは単にこの known_hostsauthorized_keys ファイルを最初にチェックして、このリモートのエンティティが認証され、信頼できるものかを確かめた後にアクセスを許可します。
最初の問題は、これらの ID 認証を信頼性を持って行うことです。
known_hosts ファイルは、マシン名、IP アドレス、公開キーの 3 つで構成されています。
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 は実際に公開キーおよびホスト情報を保存します。

注記

SSSD を OpenSSH のキーキャッシュとして使用できるのは、Identity Management ドメインに登録もしくは参加している Linux マシンのみです。他の Unix マシンや Windows マシンは、known_hosts ファイルで通常の認証メカニズムを使用する必要があります。

11.2.9.1. ホストキーに SSSD を使用するための OpenSSH 設定

OpenSSH は、ユーザー特定の設定ファイル (~/.ssh/config) か、システムワイドの設定ファイル (/etc/ssh/ssh_config) で設定されます。ユーザーファイルはシステム設定に優先し、最初に獲得されたパラメーター値が使用されます。このファイルの形式および習慣については、12章OpenSSH で説明されています。
SSSD にはホストキーを管理するためのツール、sss_ssh_knownhostsproxy、があり、以下の 3 つの操作を実行します。
  1. 登録済み Linux システムから公開ホストキーを取得します。
  2. カスタムホストファイル .ssh/sss_known_hosts にホストキーを保存します。
  3. ソケット (デフォルト) もしくは安全な接続でホストマシンとの接続を確立します。
このツールは以下の形式になります。
sss_ssh_knownhostsproxy [-d sssd_domain] [-p ssh_port] HOST [PROXY_COMMAND]

表11.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 クライアントへの接続にこのポートを使用します。デフォルトでは、port 22 です。
この SSSD ツールを使用するには、ssh_config もしくは ~/.ssh/config ファイルに 2 つのパラメーターを追加または編集します。
  • SSH クライアントに接続するようにコマンドに指定します (ProxyCommand)。これは、sss_ssh_knownhostsproxy に希望する引数とホスト名を加えたものです。
  • デフォルトの known_hosts ファイルではなく、SSSD ホストファイルの場所を指定します。 (UserKnownHostsFile)。SSSD ホストファイルは、.ssh/sss_known_hosts です。
例えば、以下では IPA1 SSSD ドメイン内の公開キーを探して、提供されるポートとホストで接続します。
ProxyCommand /usr/bin/sss_ssh_knownhostsproxy -p %p -d IPA1 %h
UserKnownHostsFile2 .ssh/sss_known_hosts

11.2.9.2. ユーザーキーに SSSD を使用するための OpenSSH 設定

OpenSSH では、ユーザーキーはローカルシステムの authorized_keys ファイルに保存されています。ホストに関してはOpenSSH が参照するために、SSSD がユーザー公開キーの別個のキャッシュを維持し、自動的にアップデートします。これは、.ssh/sss_authorized_keys ファイルに保存されます。
OpenSSH は、ユーザー特定の設定ファイル (~/.ssh/config) か、システムワイドの設定ファイル (/etc/ssh/ssh_config) で設定されます。ユーザーファイルはシステム設定に優先し、最初に獲得されたパラメーター値が使用されます。このファイルの形式および習慣については、12章OpenSSH で説明されています。
SSSD にはユーザーキーを管理するためのツール、sss_ssh_authorizedkeys、があり、以下の 2 つの操作を実行します。
  1. Identity Management (IPA) ドメインのユーザーエンティティからユーザーの公開キーを取得します。
  2. 標準的な認証キー形式でユーザーキーをカスタムファイル .ssh/sss_authorized_keys に保存します。
このツールは以下の形式になります。
sss_ssh_authorizedkeys [-d sssd_domain] USER

表11.5 sss_ssh_authorizedkeys オプション

短い引数 長い引数 詳細
USER 公開キーを取得するユーザー名またはアカウント名を与えます。OpenSSH 設定ファイルでは、%u のトークンで示すこともできます。
-d sssd_domain --domain sssd_domain 指定ドメインのエンティティ内の公開キーのみを検索します。これがない場合は、SSSD はすべての設定済みドメインでキーを検索します。
ユーザーキーに SSSD を使用するための OpenSSH の設定方法は、SSH 導入により 2 つのオプションがあります。
  • 最も一般的なのは、SSH が認証キーコマンドをサポートする場合です。このケースで必要なのは、ユーザーキーの取得で実行するコマンドの指定のみです。以下に例を挙げます。
    AuthorizedKeysCommand /usr/bin/sss_ssh_authorizedkeys
  • SSH も公開キーエージェントのサポートが可能です。この場合、ユーザー名などの必要な引数のトークンを含むエージェントキーを取得するために使用するコマンドを与えます。
    PubKeyAgent /usr/bin/sss_ssh_authorizedkeys %u