Database

帶有來自數據庫的公鑰的 OpenSSH

  • June 1, 2014

是否可以從數據庫而不是 authorized_keys 文件中獲取公鑰?

我想使用這樣的設置來管理多個使用者對 git 儲存庫等內容的 ssh 訪問,而無需在每次更改或添加公鑰時重新創建 authorized_keys 文件。

我在嘗試自己回答時發現了這個問題。經過一些搜尋和實驗,我找到了其他一些選項。我將跳過關於分發密鑰作為替代方案的部分,因為 Matt Simmons 已經涵蓋了這一點。另外,我知道有時候這還不夠好。例如,如果您是 GitHub 並且必須針對單個使用者儲存數百萬個公鑰,那麼持續更新 SSH 授權密鑰文件並使其在可能的數十到數百個邊緣盒之間保持同步是不可行或不可取的。

所以,

  1. 首先,RedHat(和變種)有一個受支持的 OpenSSH 更新檔,它添加了AuthorizedKeysCommandAuthorizedKeysCommandRunAs選項。該更新檔已在 openssh 6.2 的上游合併。引用手冊頁

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 使用的更新檔並直接應用它。快速的Google搜尋發現https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch>和<https://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patch是基於 RH 版本,但已針對較新版本的 OpenSSH 進行了更新。 3. 修補 OpenSSH 以直接從某些商店執行密鑰查找(例如GitHub和 CodeBaseHQ 以及其他人已經完成的)。據我所知,GitHub 還沒有開源這個更新檔,但我知道過去我遇到過 MySQL 和 PostgreSQL 密鑰查找的版本。我剛才試圖再次找到它們,但運氣不佳。 4. 還有一些基於 FUSE 的選項。例如,有一個LPKFuse,它允許您通過將AuthorizedKeysFile位置更改為 LPKFuse 文件系統上的一個來從 LDAP 提供公鑰。LPKFuse FS 創建虛擬文件,其內容由目錄伺服器中的欄位支持。


總而言之,我認為選項#1 是迄今為止最好的,因為它得到了 RedHat 的官方支持。此外,它還允許您以您想要的任何語言將您喜歡的任何邏輯(包括與數據庫對話)放入該腳本中。

引用自:https://serverfault.com/questions/162238