
如果 UNIX 使用者透過 SSH 存取伺服器,而我們只想允許 pubkey 登錄,是否還有其他我應該關心的項目需要添加到此列表中?
- 允許伺服器上的檔案
pubkey login
。sshd_config
- 預設密碼的注意事項,例如“!”或者“*”
答案1
如果您能告訴我們您需要什麼 SSH 伺服器以及什麼(一組)Unix 系統,那就太好了。
!
當您在或(用於讀取這些條目)中看到它們時,和*
不是密碼。/etc/passwd
/etc/shadow
getent
它們是表示帳戶是否有密碼以及是否已鎖定的標記。
這是一個重要的區別,取決於 PAM 的配置和版本以及發行版,如果你使用的是 Linux。如果鎖定,您不太可能被允許登錄,但另一方面,它可能在舊系統上開箱即用(至少這是我的經驗)。
您可以使用(作為超級用戶)passwd -l <name>
鎖定帳戶 ( !
) 或passwd -d <name>
從中刪除密碼 ( *
),您也可以將兩者結合起來,這將簡單地確保刪除任何現有密碼:passwd -dl <name>
。
你沒有說,但假設 OpenSSH /etc/ssh/sshd_config
(路徑可能有所不同)中的相關指令是:
HostKey ...
伺服器必須有一個主機金鑰或 RSA2 或 DSA(更現代的實作也增加了兩個橢圓曲線實作)。 RSA1 早已被所有常見的 SSH 伺服器實作所放棄。
然後:
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no
我還始終建議設定/etc/sudoers
並完全禁止root
透過 SSH 登入 ( PermitRootLogin no
)。但是,當磁碟已滿且您的非特權sudo
成員無法寫入磁碟時root
(由於保留空間),這種更安全的設定可能會有一個小缺點。所以YMMV。
還有兩個建議
分配一個群組來限制 SSH 訪問
建立一個群組ssh-users
(或您喜歡的任何名稱)並在 中設定相應的指令sshd_config
。root
根據您根據上述資訊選擇的策略,請確保該群組是否是該群組的成員。
AllowGroups ssh-users
分配一個群組來限制用戶僅有的SFTP存取
接下來sshd_config
將確保用戶無法逃脫/home
並且某些功能會被停用。
Match group sftponly
ChrootDirectory /home
X11Forwarding no
AllowTcpForwarding no
ForceCommand internal-sftp
PasswordAuthentication no
結論
所以,是的,如果在 Linux 上,則必須加入 PAM 作為考慮因素。
還包括是否允許代理轉發或將其留給您的使用者。
最後但並非最不重要的一點是是否允許它們轉送連接埠或 X11 連線。尤其是連接埠可能是不可取的,因為它們允許用戶使用您的伺服器作為代理。
該Match
指令還允許您限制使用者的連線位置(防火牆或 TCP 包裝器也可以做到這一點)。
您是否希望允許您的使用者管理金鑰,還是希望將其抽象化並使authorized_keys
他們無法直接存取?
當然還有更多方面,但它們大多處於更細粒度的細節級別,因此是上述要點的變體。
答案2
無論用戶想要什麼,都要考慮有關密碼複雜性的任何策略。如果唯一的訪問是透過 SSH並且PasswordAuthentication
位於no
sshd_config
,那麼密碼是什麼並不重要。另請注意,中的條目shadow
!
是加密密碼,因此和的值*
不是密碼- 但字串不是有效的加密值,從而阻止基於密碼的登入。
答案3
假設您正在執行類似 RHEL/CentOS w/ OpenSSH 的系統,這些是我在無密碼時通常會執行的操作:
- 設定 sshd_config 僅接受 pubkey 驗證 (
PubkeyAuthentication yes, PasswordAuthentication no, ChallengeResponseAuthentication no, UsePAM no
) - 將所有現有使用者設定為無效密碼 (
chpasswd -e 'pubkey!!' <username>
) - 刪除所有現有使用者的密碼過期 (
chage -M -1 <username>
) - 如果使用 sudo,請確保所有使用者規格都標記為 NOPASSWD(例如
%wheel ALL=(ALL) NOPASSWD: ALL
) - 確保您的使用者建立過程將滿足這些要求(例如
useradd -p 'pubkey!!' -K MAX_PASS_DAYS=-1 <username>
)
在鎖定密碼存取之前,請雙重確保您能夠透過 pubkey 成功進行身份驗證。確保您的 /home 分割區不在網路掛載上(或任何其他可能不總是可用的分割區)。沒有什麼比因為無法存取您的公鑰而無法存取您的伺服器更糟糕的了。如果系統是無頭系統,請確保您有某種方法可以在緊急情況下快速直接存取控制台(KVM、虛擬控制台、急救車等)。
話雖如此,我會考慮為任何具有完全 sudo 存取權限的人的帳戶設定密碼,並配置 sudoers 以要求他們提供密碼。如果其他所有內容都按上述配置,他們仍然無法使用此密碼登入伺服器,但它會給您一點額外的保護,防止有人坐在命令提示字元中做「壞事(tm)」 。
答案4
如果這是 UNIX (HP UX) 電腦而不是 Linux,那麼您需要將rcommand
其新增至 sshd 帳戶下的 pam.conf 中。
sshd account sufficient /usr/lib/security/libpam_ldap.1 rcommand
否則,當您嘗試 ssh 進入電腦時,您將收到密碼提示,而該提示將不會出現。