前面我們討論了如何《保護SSH免受強力口令破解攻擊》。今天繼續討論如何限制用戶的登錄。OpenSSH包括許多用途廣泛的并且十分流行的程序。無論是作為客戶端或服務器,其廣泛性和SSH的實用性,無疑都使SSH成為一些公共的攻擊目標。由此導致的結果是,人們開發了許多工具用以對付一些常見的強力攻擊企圖。
然而,這些攻擊不僅僅會轉換為一種惱人的東西,更是一種對日志文件空間的浪費。對于剛開始對付這種攻擊的人員來說,明確地設置誰能夠通過OpenSSH登錄到系統中將有助于擊潰大約99%的強力攻擊,而不管你的系統真實的安全程度如何。
首先,千萬不要準許以根用戶身份通過SSH登錄進入,除非你絕對有必要這樣做,而且需要采用SSH密鑰。千萬不要允許在不需要口令(空口令)的情況下以根據用戶登錄到系統中。為此,編輯/etc/ssh/sshd_config(在某些系統中即為/etc/sshd_config),并增加:
PermitRootLogin without-password |
這就會容許根用戶身份登錄,不過只能采用一個恰當的SSH密鑰才可以登錄,其對應的公共部分必須在/root/.ssh/authorized_keys中設置。
其次,明確地定義哪些用戶能夠登錄。因此需要再次編輯sshd_config文件,并增加:
AllowUsers root AllowUsers freedom |
上述的命令僅允許用戶root和freedom通過ssh登錄。在這里需要注意,一旦你啟用了AllowUsers選項,任何沒有被列示的用戶將不能登錄。換句話說,雖然進行了PermitRootLogin設置,如果我們沒有設置PermitRootLogin,并將“AllowUsers freedom”放置在配置文件中,即使用了一個正確的口令,根用戶也不能登錄。因此,隨著時間的推移,需要不斷地關注這個列表,并確保不再需要訪問系統的用戶要從列表中清除。
實際上,你不但可以通過指定所允許的用戶來強化安全,還可以通過設定一個“用戶@主機”模式指定用戶可以從哪臺主機登錄。
讓我們舉個例子,如果你設置了freedom@192.168.2.18,那么授與給用戶賬戶“freedom”的訪問權將只能源自IP地址為192.168.2.18的計算機。在這里我們可以指定多種模式,如freedom@192.168.2.*,就會允許用戶freedom可以從網絡192.168.2.0的所有主機登錄。
OpenBSD的Manual Pages列示了可允許模式的更祥細信息(網址為:http://www.openbsd.org/cgi-bin/man.cgi?query=ssh_config),您不妨一看。
最后一點,如果你不需要基于PAM驗證,就要設置:
UsePAM no |
這本來是默認的選項,如果你需要基于PAM的身份驗證(sshd自身不能實現)時,就應當啟用之。例如,如果擁有一個通過LDAP驗證的用戶賬戶時,就需要啟用。如果不啟用UsePAM,此用戶將永遠不能登錄。不過,一旦你啟用了UsePAM,其它選項并不會象你所期望的那樣工作。例如,“PermitRootLogin without-password”就不會正常工作,而且如果沒有提供一個合法的ssh密鑰,就會退回到這樣一種情況:對根用戶的口令,需要根據身份驗證的提示才得以實現。
在這一點上,僅通過采用AllowUsers關鍵字,就可以減輕多數的強力攻擊企圖,因為攻擊不但需要猜測正確的口令,還需要猜測正確的賬戶。
任何通過其他用戶(即不在被準許用戶列表中的用戶)的登錄企圖都會導致失敗,即使提供了正確的口令也是如此。