Ssh

如何通過智能密鑰管理為支持者啟用 ssh?

  • July 11, 2022

我的情況如下:

  • 我在 VPN 網路中有很多客戶。
  • 每個支持者都有一台也在 VPN 中的電腦。
  • 每個支持者都應該能夠通過 ssh 登錄到所有系統。
  • 如果支持者離開公司,他應該無法再登錄客戶

到目前為止,我考慮了以下解決方案:

  • 我們可以在所有客戶端上使用相同的密碼——但這顯然是個壞主意。
  • 我們可以將每個支持者的公鑰儲存在所有系統上——但這很難維護。
  • 我們可以設置一個代理伺服器,支持者首先連接到該代理伺服器,然後它能夠登錄到客戶端,例如通過密鑰對 - 但伺服器可能會獲得大量流量

我的問題:

這種情況是否有“最佳實踐”或“標準解決方案”?也許是我不知道的工具? 我覺得我肯定忽略了一些東西。

通常,您希望能夠讓個人對他們的行為負責,並能夠在他們的角色發生變化或離開公司時撤銷他們的個人訪問權限。除了撤銷他們的個人憑據之外,您不需要做更多的事情。

因此,您希望盡可能避免共享憑據。

因為當預設管理員密碼(每個人都知道並一直使用的密碼)因為離開者而必須更改時確實很不方便。重置該密碼時您可能會忽略一個或多個系統,而且通常情況下,該預設密碼密碼永遠不會改變。

因此,理想情況下,所有需要管理的系統都配置為使用中央身份儲存(例如 LDAP、Active Directory 等)。

在那個中央身份儲存中,每個人都有一個個人帳戶,他們自己只知道密碼。對於額外的權限,他們獲得一個或多個額外的組成員身份,並從這些成員中派生基於組的權限(sudo和其他權限)。因此沒有人需要管理員密碼。

也許您想避免 ssh 登錄的密碼驗證,並希望使用 ssh 公鑰驗證。

OpenSSH 有一個鮮為人知的功能,它允許您配置您的 sshd 守護程序以執行特定的幫助程序來檢索您通常儲存和部署在使用者文件AuthorizedKeysCommand中的公鑰。˜/.ssh/authorized_keys

例如,該幫助程序可以查詢數據庫伺服器、LDAP 伺服器或任何其他可能適合您的目的的伺服器。

這避免了使用配置管理工具將密鑰部署到文件或使用包含文件˜/.ssh/authorized_keys的(管理員/使用者)主目錄安裝網路共享 的常見替代方法。˜/.ssh/authorized_keys

然後,在任何地方撤銷訪問都變得像從中央伺服器中刪除公鑰一樣簡單。

有關 LDAP 範例,請參閱此問答,當您還擁有 LDAP 作為帳戶的中央身份儲存時很有用:使用 LDAP 的 SSH 密鑰身份驗證


作為一個稍微簡化的派生,您可以省略將中央身份儲存與所有人的個人帳戶和基於組的訪問權限的集成。

這為您提供了一個共享帳戶,您的所有支持人員都可以在他們的公鑰被集中註冊和啟用後使用他們的個人私鑰登錄。刪除他們的公共 ssh 密鑰,他們的訪問權限將被撤銷。

  • 在需要管理的每台伺服器上創建單個本地帳戶。例如serverfault-support.
  • sudo使用 NOPASSWD 選項為該帳戶設置合適的策略。也許比這更嚴格一些:
serverfault-support  ALL = NOPASSWD: AL
  • 在一個中心位置收集所有員工的公共 ssh 密鑰。
  • 以所需的授權密鑰格式生成(無論何時發生人員變動)這些 public_keys 的列表。
from="10.80.0.0/14" ssh-ed25519 AAAAC3NzaB0x***...***== rob.smith@serverfault
from="10.80.0.0/14" ssh-rsa AAAAB3NzaC1y***...***== rob.jones@serverfault

**細化:**考慮在那裡添加額外的公鑰選項,例如只允許從您的 VPN 中使用的 IP 地址範圍使用這些密鑰,而不是在整個網際網路上使用。

  • 請注意,公鑰不是特別敏感的數據,因此您可以在方便的地方發布它們,例如https://www.example.com/current_authorized_keys

**細化:**生成動態列表,而不是靜態列表。然後,您還可以將輸出限制為僅顯範例如匹配的公鑰:特定指紋和/或特定遠端使用者或更多,以提高安全性和性能。

  • 在每台伺服器上:在 中設置一個Match指令/etc/ssh/sshd_config以啟用AuthorizedKeysCommandserverfault-support 使用者:
# /etc/ssh/sshd_config
# ...
Match User serverfault-support
     PasswordAuthentication no
     AuthorizedKeysCommand /usr/bin/curl https://www.example.com/current_authorized_keys?user=%u&fingerprint=%f
     AuthorizedKeysCommandUser nobody
     AuthorizedKeysFile /dev/null

該選項AuthorizedKeysFile /dev/null可防止使用者成功向本地添加其他密鑰~/.ssh/authorized_keys並繞過 AuthorizedKeysCommand。

  • 您需要使用 ssh 指紋而不是用於登錄的使用者名來監控訪問

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