在實際的產品服務發布環境中,Linux伺服器通常禁止使用遠程ROOT帳戶登錄,僅僅允許最小權限的遠程帳戶使用SSH登錄後,再切換帳戶達到管理伺服器的目的。下面我們就總結一下如何創建安全的SSH登錄帳戶。
【運行環境】
CentOS,OpenSSH
1.在客戶端生成證書秘鑰對,生成的文件默認存在~/.ssh/目錄下,包括id_rsa與id_rsa.pub兩個文件。
ssh_keygen
2.從~/.ssh/目錄下,拷貝id_ras.pub文件內容到伺服器端登錄帳戶下~/.ssh/authorized_keys文件中。這樣就可以從客戶端直接使用證書登錄遠程伺服器了。
cat ~/.ssh/id_rsa.pub | ssh serveruser@servername 'cat >> .ssh/authorized_keys'
3.配置OpenSSH伺服器,禁止使用密碼登錄。在伺服器端編輯/etc/ssh/sshd_config文件,將PasswordAuthentication設定為no,默認為yes.
-PasswordAuthentication yes+PasswordAuthentication no
禁用challenge-response。因為如果使用了PAM的challenge-response認證,就會跳過密碼認證直接登錄。
ChallengeResponseAuthentication no
4.禁止使用root帳戶登錄,將PermitRootLogin設定為no,默認為yes或prohibit-password。
-PermitRootLogin yes-PermitRootLogin no
【更安全的策略】
經過以上設定,我們的SSH登錄就基本安全了。但是,我們可以更進一步~
1.限定用戶(user)、用戶組(group)和訪問主機(host)。
在sshd_config文件中,有以下四個標籤,可以分別指定允許、禁止的用戶和用戶組
- DenyUsers
- AllowUsers
- DenyGroups
- AllowGroups
例如
AllowUsers test@testhost test2AllowGroup testgroup test2group
僅僅允許testhost主機通過test帳戶訪問或者test2從任意機器訪問。
僅僅允許屬於testgroup或test2group的用戶
2.修改OpenSSH的埠。
這個就不多說了,默認埠22一定是攻擊的目標。
3.限制訪問主機和可執行的命令。
在authorized_key文件中,除了rsa_key指定了公鑰之外,還可以添加from,commad,no-pty,no-port-forwarding等選項進行登錄用戶限制。
常用設定如下
from='hostname1,hostname2,'' - 此證書允許指定的IP或主機使用command='command' - 登錄之後僅能運行指定的命令no-pty - 禁止分配pty(不允許交互登錄)no-port-forwarding - 禁止埠轉發
4.加密known_hosts。
客戶端訪問過服務端後,會在.ssh/目錄下known_hosts存儲你的訪問記錄,包括IP/hostname,加密算法,秘鑰。如果你使用的是公共伺服器或者你的密碼被盜了。那後果就非常嚴重了!
ssh-keygen -H -f ~/.ssh/known_hosts
ssh-keygen -H -f ~/.ssh/known_hosts
使用以上命令可以將known_hosts的內容加密,但是要注意,此命令執行後原有的內容會備份到known_hosts.old文件中。刪掉這個文件!
5.隱藏SSH登錄後的系統信息。用戶登錄後,一般的都會但是系統的基本信息和每日更新、補丁的狀態,我們應該儘可能減少信息的公布。
解決方法:假如伺服器端的SSH帳戶為test,touch /home/test/.hushlogin
【總結】
安全這個話題,通常只有被黑客攻擊後才會想起來,但是為時已晚。默認的配置總是最方便也總是被大眾所知的,所以,花點時間配置一下伺服器也是值得的。
轉載於:https://www.cnblogs.com/pumasun/p/9253810.html
其他:
通過 ssh 免密登錄時總是提示需要輸入密碼時,請檢查 ssh 權限是否合適:
~/.ssh/authorized_keys 其中 .ssh 目錄的權限設置為 700 ,authorized_keys 文件的權限應設置為 600 ,文件和目錄的 owner 必須為當前用保護。
新創建的 linux 用戶沒有 .ssh 目錄,需在其家目錄下手動創建或通過該帳戶生成 ssh 秘鑰等信息。