authorized_keysファイルの代わりにデータベースから公開鍵を取得することは可能ですか?
このような設定を使用して、公開鍵が変更または追加されるたびにauthorized_keysファイルを再作成することなく、複数のユーザーのgitリポジトリなどへのsshアクセスを管理したいと思います。
authorized_keysファイルの代わりにデータベースから公開鍵を取得することは可能ですか?
このような設定を使用して、公開鍵が変更または追加されるたびにauthorized_keysファイルを再作成することなく、複数のユーザーのgitリポジトリなどへのsshアクセスを管理したいと思います。
回答:
自分で答えようとしたときにこの質問を見つけました。いくつかの検索と実験の後、私はこのためのいくつかの他のオプションを見つけました。マット・シモンズがそれをカバーしたので、私は代替としてキーを配布することについての部分をスキップするつもりです。また、それだけでは十分でない場合もあります。たとえば、GitHubであり、1人のユーザーに対して数百万の公開キーを保存する必要がある場合、SSH authorized_keysファイルを継続的に更新し、数十から数百のエッジボックス間で同期を維持することは現実的ではありません。
そう、
まず、RedHat(およびその亜種)には、OpenSSHのサポートされているパッチがありAuthorizedKeysCommand
、AuthorizedKeysCommandRunAs
オプションとオプションが追加されています。このパッチは、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
、新しいポリシーを適切に取得するためにさらに学習する必要があります。
同様の機能を追加するために、他にもさまざまな(おそらくテストと信頼性が低い)パッチがあります。たとえば、openssh-script-authがあります。また、RedHatが使用したパッチを見つけて直接適用することもできます。グーグルの簡単な概要はhttps://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patchとhttps://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patchを発見RHバージョンに基づいていますが、OpenSSHの新しいバージョン用に更新されています。
OpenSSHにパッチを適用して、一部のストアから直接キールックアップを実行します(GitHubやCodeBaseHQなどが行っています)。私の知る限り、GitHubはこのパッチをオープンソース化していませんが、過去にMySQLとPostgreSQLキールックアップのバージョンに出くわしたことがあります。私は今それらを再び見つけようとしましたが、あまり運がありませんでした。
FUSEベースのオプションもいくつかあります。たとえばありLPKFuseあなたが変更することにより、LDAPから公開鍵を提供することができますAuthorizedKeysFile
LPKFuseファイルシステム上のいずれかに場所を。LPKFuse FSは、コンテンツがディレクトリサーバーのフィールドに連動する仮想ファイルを作成します。
全体として、オプション#1はRedHatによって公式にサポートされているため、断然最高です。さらに、スクリプト内の好きなロジック(データベースとの会話を含む)を任意の言語で配置できます。
私の知る限り、OpenSSHにはこの機能はありません。最善の策は、スクリプトを自動的に夜間に(または必要に応じて頻繁に)ファイルを再生成することです。
また、あなたはこの質問を見たいかもしれません: SSH公開鍵を配布するためのシステム