基本上,所有的 sshd 服務器詳細設定都放在 /etc/ssh/sshd_config 里面!不過,每個 Linux distribution 的預設設定都不太相同,所以我們有必要來了解一下整個設定值的意義為何才好! 同時請注意,在預設的檔案內,只要是預設有出現且被批注的設定值 (設定值前面加 #),即為『默認值!』,你可以依據它來修改的哩
[root@www ~]# vim /etc/ssh/sshd_config # 1. 關於 SSH Server 的整體設定,包含使用的 port 啦,以及使用的密碼演算方式 # Port 22 # SSH 預設使用 22 這個port,也可以使用多個port,即重復使用 port 這個設定項目! # 例如想要開放 sshd 在 22 與 443 ,則多加一行內容為:『 Port 443 』 # 然后重新啟動 sshd 這樣就好了!不過,不建議修改 port number 啦! Protocol 2 # 選擇的 SSH 協議版本,可以是 1 也可以是 2 ,CentOS 5.x 預設是僅支援 V2。 # 如果想要支持舊版 V1 ,就得要使用『 Protocol 2,1 』才行。 # ListenAddress 0.0.0.0 # 監聽的主機適配器!舉個例子來說,如果你有兩個 IP,分別是 192.168.1.100 及 # 192.168.100.254,假設你只想要讓 192.168.1.100 可以監聽 sshd ,那就這樣寫: # 『 ListenAddress 192.168.1.100 』默認值是監聽所有接口的 SSH 要求 # PidFile /var/run/sshd.pid # 可以放置 SSHD 這個 PID 的檔案!上述為默認值 # LoginGraceTime 2m # 當使用者連上 SSH server 之后,會出現輸入密碼的畫面,在該畫面中, # 在多久時間內沒有成功連上 SSH server 就強迫斷線!若無單位則默認時間為秒! # Compression delayed # 指定何時開始使用壓縮數據模式進行傳輸。有 yes, no 與登入后才將數據壓縮 (delayed) # 2. 說明主機的 Private Key 放置的檔案,預設使用下面的檔案即可! # HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私鑰 # HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私鑰 # HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私鑰 # 還記得我們在主機的 SSH 聯機流程里面談到的,這里就是 Host Key ~ # 3. 關於登錄文件的訊息數據放置與 daemon 的名稱! SyslogFacility AUTHPRIV # 當有人使用 SSH 登入系統的時候,SSH 會記錄信息,這個信息要記錄在什么 daemon name # 底下?預設是以 AUTH 來設定的,即是 /var/log/secure 里面!什么?忘記了! # 回到 Linux 基礎去翻一下。其他可用的 daemon name 為:DAEMON,USER,AUTH, # LOCAL0,LOCAL1,LOCAL2,LOCAL3,LOCAL4,LOCAL5, # LogLevel INFO # 登錄記錄的等級!嘿嘿!任何訊息!同樣的,忘記了就回去參考! # 4. 安全設定項目!極重要! # 4.1 登入設定部分 # PermitRootLogin yes # 是否允許 root 登入!預設是允許的,但是建議設定成 no! # StrictModes yes # 是否讓 sshd 去檢查用戶家目錄或相關檔案的權限數據, # 這是為了擔心使用者將某些重要檔案的權限設錯,可能會導致一些問題所致。 # 例如使用者的 ~.ssh/ 權限設錯時,某些特殊情況下會不許用戶登入 # PubkeyAuthentication yes # AuthorizedKeysFile .ssh/authorized_keys # 是否允許用戶自行使用成對的密鑰系統進行登入行為,僅針對 version 2。 # 至於自制的公鑰數據就放置於用戶家目錄下的 .ssh/authorized_keys 內 PasswordAuthentication yes # 密碼驗證當然是需要的!所以這里寫 yes 啰! # PermitEmptyPasswords no # 若上面那一項如果設定為 yes 的話,這一項就最好設定為 no , # 這個項目在是否允許以空的密碼登入!當然不許! # 4.2 認證部分 # RhostsAuthentication no # 本機系統不使用 .rhosts,因為僅使用 .rhosts太不安全了,所以這里一定要設定為 no # IgnoreRhosts yes # 是否取消使用 ~/.ssh/.rhosts 來做為認證!當然是! # RhostsRSAAuthentication no # # 這個選項是專門給 version 1 用的,使用 rhosts 檔案在 /etc/hosts.equiv # 配合 RSA 演算方式來進行認證!不要使用啊! # HostbasedAuthentication no # 這個項目與上面的項目類似,不過是給 version 2 使用的! # IgnoreUserKnownHosts no # 是否忽略家目錄內的 ~/.ssh/known_hosts 這個檔案所記錄的主機內容? # 當然不要忽略,所以這里就是 no 啦! ChallengeResponseAuthentication no # 允許任何的密碼認證!所以,任何 login.conf 規定的認證方式,均可適用! # 但目前我們比較喜歡使用 PAM 模塊幫忙管理認證,因此這個選項可以設定為 no 喔! UsePAM yes # 利用 PAM 管理使用者認證有很多好處,可以記錄與管理。 # 所以這里我們建議你使用 UsePAM 且 ChallengeResponseAuthentication 設定為 no # 4.3 與 Kerberos 有關的參數設定!因為我們沒有 Kerberos 主機,所以底下不用設定! # KerberosAuthentication no # KerberosOrLocalPasswd yes # KerberosTicketCleanup yes # KerberosTgtPassing no # 4.4 底下是有關在 X-Window 底下使用的相關設定! X11Forwarding yes # X11DisplayOffset 10 # X11UseLocalhost yes # 比較重要的是 X11Forwarding 項目,他可以讓窗口的數據透過 ssh 信道來傳送喔! # 在本章后面比較進階的 ssh 使用方法中會談到。 # 4.5 登入后的項目: # PrintMotd yes # 登入后是否顯示出一些信息呢?例如上次登入的時間、地點等等,預設是 yes # 亦即是打印出 /etc/motd 這個檔案的內容。但是,如果為了安全,可以考慮改為 no ! # PrintLastLog yes # 顯示上次登入的信息!可以啊!預設也是 yes ! # TCPKeepAlive yes # 當達成聯機后,服務器會一直傳送 TCP 封包給客戶端藉以判斷對方式否一直存在聯機。 # 不過,如果聯機時中間的路由器暫時停止服務幾秒鍾,也會讓聯機中斷喔! # 在這個情況下,任何一端死掉后,SSH可以立刻知道!而不會有僵屍程序的發生! # 但如果你的網絡或路由器常常不穩定,那么可以設定為 no 的啦! UsePrivilegeSeparation yes # 是否權限較低的程序來提供用戶操作。我們知道 sshd 啟動在 port 22 , # 因此啟動的程序是屬於 root 的身份。那么當 student 登入后,這個設定值 # 會讓 sshd 產生一個屬於 sutdent 的 sshd 程序來使用,對系統較安全 MaxStartups 10 # 同時允許幾個尚未登入的聯機畫面?當我們連上 SSH ,但是尚未輸入密碼時, # 這個時候就是我們所謂的聯機畫面啦!在這個聯機畫面中,為了保護主機, # 所以需要設定最大值,預設最多十個聯機畫面,而已經建立聯機的不計算在這十個當中 # 4.6 關於用戶抵擋的設定項目: DenyUsers * # 設定受抵擋的使用者名稱,如果是全部的使用者,那就是全部擋吧! # 若是部分使用者,可以將該賬號填入!例如下列! DenyUsers test DenyGroups test # 與 DenyUsers 相同!僅抵擋幾個群組而已! # 5. 關於 SFTP 服務與其他的設定項目! Subsystem sftp /usr/lib/ssh/sftp-server # UseDNS yes # 一般來說,為了要判斷客戶端來源是正常合法的,因此會使用 DNS 去反查客戶端的主機名 # 不過如果是在內網互連,這項目設定為 no 會讓聯機達成速度比較快。
預設的 sshd 服務已經算是挺安全的了,不過還不夠!建議你 (1)將 root 的登入權限取消; (2)將 ssh 版本設定為 2 。其他的設定值就請你依照自己的喜好來設定了。 通常不建議進行隨便修改啦!另外,如果你修改過上面這個檔案(/etc/ssh/sshd_config),那么就必需要重新啟動一次 sshd 這個 daemon 才行!亦即是:
/etc/init.d/sshd restart