データベースの公開鍵を使用したOpenSSH


14

authorized_keysファイルの代わりにデータベースから公開鍵を取得することは可能ですか?

このような設定を使用して、公開鍵が変更または追加されるたびにauthorized_keysファイルを再作成することなく、複数のユーザーのgitリポジトリなどへのsshアクセスを管理したいと思います。


1
私はこれに人形を使用しています
マットシモンズ

Userifyは、集中管理ではあるがローカル認証でこれらのアカウントを管理できます。このように、集中DBがダウンした場合でも引き続きアクセスできますが、集中管理のすべての利点が得られます。
ジェイミーソンベッカー

回答:


16

自分で答えようとしたときにこの質問を見つけました。いくつかの検索と実験の後、私はこのためのいくつかの他のオプションを見つけました。マット・シモンズがそれをカバーしたので、私は代替としてキーを配布することについての部分をスキップするつもりです。また、それだけでは十分でない場合もあります。たとえば、GitHubであり、1人のユーザーに対して数百万の公開キーを保存する必要がある場合、SSH authorized_keysファイルを継続的に更新し、数十から数百のエッジボックス間で同期を維持することは現実的ではありません。

そう、

  1. まず、RedHat(およびその亜種)には、OpenSSHのサポートされているパッチがありAuthorizedKeysCommandAuthorizedKeysCommandRunAsオプションとオプションが追加されています。このパッチは、openssh 6.2の上流でマージされています。manページから引用するには:

    AuthorizedKeysCommand

    ユーザーの公開鍵の検索に使用されるプログラムを指定します。プログラムは、最初の引数で許可されているユーザーの名前で呼び出され、標準出力にAuthorizedKeys行を生成する必要があります(sshd(8)のAUTHORIZED_KEYSを参照)。デフォルトでは(または空の文字列に設定されている場合)、AuthorizedKeysCommandは実行されません。AuthorizedKeysCommandがユーザーを正常に承認しない場合、承認はAuthorizedKeysFileに到達します。このオプションは、PubkeyAuthenticationがオンになっている場合にのみ効果があることに注意してください。

    AuthorizedKeysCommandRunAs

    AuthorizedKeysCommandが実行されるアカウントのユーザーを指定します。空の文字列(デフォルト値)は、許可されているユーザーが使用されることを意味します。

    今夜の私の実験では、デフォルトのSELinuxポリシーのために、これはすぐに機能しないことがわかりました。これを回避するには、SELinuxの強制を無効にしsetenforce 0ます。SELinuxの有効化はおそらく悪い考えなので、代わりに正しいポリシーを生成できます。私の場合、それは簡単なようようだっしようとしてログインするようAuthorizedKeysCommandに設定オプション/etc/ssh/sshd_config、次に使用しますaudit2allow -a -M local && semodule -i local.pp。これは基本的に監査ログを調べて、防止されたものを見つけ、それらの例外を生成します。ホワイトリストに登録される可能性のある他のものがそこにある可能性がある場合は、おそらくaudit2allow、新しいポリシーを適切に取得するためにさらに学習する必要があります。

  2. 同様の機能を追加するために、他にもさまざまな(おそらくテストと信頼性が低い)パッチがあります。たとえば、openssh-script-authがあります。また、RedHatが使用したパッチを見つけて直接適用することもできます。グーグルの簡単な概要はhttps://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patchhttps://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patchを発見RHバージョンに基づいていますが、OpenSSHの新しいバージョン用に更新されています。

  3. OpenSSHにパッチを適用して、一部のストアから直接キールックアップを実行します(GitHubやCodeBaseHQなどが行っています)。私の知る限り、GitHubはこのパッチをオープンソース化していませんが、過去にMySQLとPostgreSQLキールックアップのバージョンに出くわしたことがあります。私は今それらを再び見つけようとしましたが、あまり運がありませんでした。

  4. FUSEベースのオプションもいくつかあります。たとえばありLPKFuseあなたが変更することにより、LDAPから公開鍵を提供することができますAuthorizedKeysFileLPKFuseファイルシステム上のいずれかに場所を。LPKFuse FSは、コンテンツがディレクトリサーバーのフィールドに連動する仮想ファイルを作成します。


全体として、オプション#1はRedHatによって公式にサポートされているため、断然最高です。さらに、スクリプト内の好きなロジック(データベースとの会話を含む)を任意の言語で配置できます。


再:#1素敵な発見!それがアップストリームに行くことを願っています。ESXiで役立つと思います。
ジェイソンタン

@JasonTan:openssh 6.2でAuthorizedKeysCommandがアップストリームになりました。それを反映するように答えも更新しました。
ブルーウィンド14年

素晴らしい答え、オプション1はまさに私が探していたものでした。
シェーンキルケリー


1

新しいopensshバージョンでは、ユーザーのLDAPエントリにキーを保存できると思います。アカウント管理にすでにLDAPまたはADを使用している場合は、キー管理にも同様にそれを活用できるはずです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.