SSH-Server配置指南
一、SSH簡介
SSH (Secure Shell)是一個應用程序中提供安全通信的協議,通過SSH協議可以安全地訪問服務器,因為SSH 具有成熟的公鑰加密體系,在數據進行傳輸時進行加密,保證數據在傳輸時不被惡意篡改、破壞和泄露,能有效防止網絡嗅探和IP欺騙等攻擊。
二、服務器端Ubuntu平臺下OpenSSH server的安裝
SSH是由芬蘭的一家公司開發的,但是因為受版權和加密算法的限制,現在很多人都轉而使用OpenSSH。OpenSSH是SSH的替代軟件,而且是免費的。
下以命令均是以管理員身份登錄使用
1. 在Ubuntu終端使用apt命令
如果下載失敗,可能是由于系統需要更新的緣故,嘗試更新一下,就可以了。使用一下命令:
2. 配置openssh server,可以按照需求修改配置文件
3. 重啟服務器
配置“/etc/ssh/ssh_config”文件
“/etc/ssh/ssh_config” 文件是OpenSSH系統范圍的配置文件,允許你通過設置不同的選項來改變客戶端程序的運行方式。這個文件的每一行
包含“關鍵詞-值”的匹配,其中“關鍵詞”是忽略大小寫的。下面列出來的是最重要的關鍵詞,用man命令查看幫助頁(ssh (1))可以得到
詳細的列表。
編輯“ssh_config”文件(vi /etc/ssh/ssh_config),添加或改變下面的參數:
下面逐行說明上面的選項設置:
Host *
選項“Host”只對能夠匹配后面字串的計算機有效。“*”表示所有的計算機。
ForwardAgent no
“ForwardAgent”設置連接是否經過驗證代理(如果存在)轉發給遠程計算機。
ForwardX11 no
“ForwardX11”設置X11連接是否被自動重定向到安全的通道和顯示集(DISPLAY set)。
RhostsAuthentication no
“RhostsAuthentication”設置是否使用基于rhosts的安全驗證。
RhostsRSAAuthentication no
“RhostsRSAAuthentication”設置是否使用用RSA算法的基于rhosts的安全驗證。
RSAAuthentication yes
“RSAAuthentication”設置是否使用RSA算法進行安全驗證。
PasswordAuthentication yes
“PasswordAuthentication”設置是否使用口令驗證。
FallBackToRsh no
“FallBackToRsh”設置如果用ssh連接出現錯誤是否自動使用rsh。
UseRsh no
“UseRsh”設置是否在這臺計算機上使用“rlogin/rsh”。
BatchMode no
“BatchMode”如果設為“yes”,passphrase/password(交互式輸入口令)的提示將被禁止。當不能交互式輸入口令的時候,這個選項對腳本
文件和批處理任務十分有用。
CheckHostIP yes
“CheckHostIP”設置ssh是否查看連接到服務器的主機的IP地址以防止DNS欺騙。建議設置為“yes”。
StrictHostKeyChecking no
“StrictHostKeyChecking”如果設置成“yes”,ssh就不會自動把計算機的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦計算機的密
匙發生了變化,就拒絕連接。
IdentityFile ~/.ssh/identity
“IdentityFile”設置從哪個文件讀取用戶的RSA安全驗證標識。
Port 22
“Port”設置連接到遠程主機的端口。
Cipher blowfish
“Cipher”設置加密用的密碼。
EscapeChar ~
“EscapeChar”設置escape字符。
配置“/etc/ssh/sshd_config”文件
“/etc/ssh/sshd_config”是OpenSSH的配置文件,允許設置選項改變這個daemon的運行。這個文件的每一行包含“關鍵詞-值”的匹配,其中
“關鍵詞”是忽略大小寫的。下面列出來的是最重要的關鍵詞,用man命令查看幫助頁(sshd (8))可以得到詳細的列表。
編輯“sshd_config”文件(vi /etc/ssh/sshd_config),加入或改變下面的參數:
下面逐行說明上面的選項設置:
Port 22
“Port”設置sshd監聽的端口號。
ListenAddress 192.168.1.1
“ListenAddress”設置sshd服務器綁定的IP地址。
HostKey /etc/ssh/ssh_host_key
“HostKey”設置包含計算機私人密匙的文件。
ServerKeyBits 1024
“ServerKeyBits”定義服務器密匙的位數。
LoginGraceTime 600
“LoginGraceTime”設置如果用戶不能成功登錄,在切斷連接之前服務器需要等待的時間(以秒為單位)。
KeyRegenerationInterval 3600
“KeyRegenerationInterval”設置在多少秒之后自動重新生成服務器的密匙(如果使用密匙)。重新生成密匙是為了防止用盜用的密匙解密被
截獲的信息。
PermitRootLogin no
“PermitRootLogin”設置root能不能用ssh登錄。這個選項一定不要設成“yes”。
IgnoreRhosts yes
“IgnoreRhosts”設置驗證的時候是否使用“rhosts”和“shosts”文件。
IgnoreUserKnownHosts yes
“IgnoreUserKnownHosts”設置ssh daemon是否在進行RhostsRSAAuthentication安全驗證的時候忽略用戶的“$HOME/.ssh/known_hosts”
StrictModes yes
“StrictModes”設置ssh在接收登錄請求之前是否檢查用戶家目錄和rhosts文件的權限和所有權。這通常是必要的,因為新手經常會把自己的
目錄和文件設成任何人都有寫權限。
X11Forwarding no
“X11Forwarding”設置是否允許X11轉發。
PrintMotd yes
“PrintMotd”設置sshd是否在用戶登錄的時候顯示“/etc/motd”中的信息。
SyslogFacility AUTH
“SyslogFacility”設置在記錄來自sshd的消息的時候,是否給出“facility code”。
LogLevel INFO
“LogLevel”設置記錄sshd日志消息的層次。INFO是一個好的選擇。查看sshd的man幫助頁,已獲取更多的信息。
RhostsAuthentication no
“RhostsAuthentication”設置只用rhosts或“/etc/hosts.equiv”進行安全驗證是否已經足夠了。
RhostsRSAAuthentication no
“RhostsRSA”設置是否允許用rhosts或“/etc/hosts.equiv”加上RSA進行安全驗證。
RSAAuthentication yes
“RSAAuthentication”設置是否允許只有RSA安全驗證。
PasswordAuthentication yes
“PasswordAuthentication”設置是否允許口令驗證。
PermitEmptyPasswords no
“PermitEmptyPasswords”設置是否允許用口令為空的帳號登錄。
AllowUsers admin
“AllowUsers”的后面可以跟著任意的數量的用戶名的匹配串(patterns)或user@host這樣的匹配串,這些字符串用空格隔開。主機名可以是
DNS名或IP地址。
使用SFTP代替FTP傳輸文件
FTP(文件傳輸協議)是一種使用非常廣泛的在網絡中傳輸文件的方式,但是,它也同樣存在被網絡竊聽的危險,因為它也是以明文傳送用戶認證信息。其實在SSH軟件包中,已經包含了一個叫作SFTP(Secure FTP)的安全文件傳輸子系統,SFTP本身沒有單獨的守護進程,它必須使用sshd守護進程(端口號默認是22)來完成相應的連接操作,所以從某種意義上來說,SFTP并不像一個服務器程序,而更像是一個客戶端程序。SFTP同樣是使用加密傳輸認證信息和傳輸的數據,所以,使用SFTP是非常安全的。但是,由于這種傳輸方式使用了加密/解密技術,所以傳輸效率比普通的FTP要低得多,如果您對網絡安全性要求更高時,可以使用SFTP代替FTP。若要開啟 SFTP功能可以修改sshd2_config文件的下列內容:
去掉行首的“#”,然后重新啟動SSH服務器,這樣在進行SSH連接時就可以同時使用SFTP傳輸文件。
關于客戶端設置
以上是對服務器的設置,其實在SSH服務器中已經包含了一些客戶端工具(如SSH,SFTP工具)。但是,更多的客戶端用戶使用Windows系統,下
面就對Windows上的客戶端系統設置加以說明。
首先從上文給出的網址下載“SSHSecureShellClient-3.2.3.exe”文件并安裝。安裝完成后,在桌面上會產成兩個快捷方式,一個是“SSH
Secure Shell Client”,用于遠程管理,另一個是“SSH Secure File Transfer Client”,用于和服務器進行文件傳輸。在工具欄中點擊
“quick connnect”,輸入正確的主機名和用戶名,然后在彈出的對話框中輸入密碼完成登錄,即可開始執行命令或者傳輸文件。在使用SFTP
時,默認只能顯示用戶的宿主目錄的內容和非隱藏文件。但是,有時候您可能還要查看其它目錄或者隱藏文件,這時只需要在菜單“eidt-
>setting-> file transfer”的選項中選中“show root directory”和“show hidden file”兩個選項即可。
使普通用戶僅使用SFTP而沒有使用Shell的權限
默認情況下管理員給系統添加的賬號將同時具有SFTP和SSH的權限。讓普通用戶使用shell執行命令也是有很大的安全隱患的,如果能夠禁止用
戶使用shell執行命令而僅使用SFTP傳輸文件,就能消除這種安全隱患,完全實現FTP的功能,
正如上文所述,SFTP沒有單獨的守護進程,只能借助于sshd守護進程,所以我們仍然需要使用SSH服務器,要保證sshd守護進程處于運行狀態。
具體實現方法如下:
首先,在編譯安裝時,編譯中一定要有“–enable-static” 選項。安裝成功后,在安裝目錄下的bin目錄中執行下面的命令:
將看到下列輸出內容:
其中帶“static”后綴名,且比較大的兩個文件就是加上“–enable-static”選項后生成的,后面我們將用到這里兩個文件。
下面以添加普通賬號test為例講述具體操作步驟。
1.在“/home”目錄(或者將要存放普通用戶宿主目錄的目錄)下創建“bin”子目錄,并將兩個static文件復制到此目錄下(復制后改名去掉static后綴),執行如下命令:
2.添加一個組,使以后所有禁止使用shell的用戶都屬于這個組,這樣便于管理更多的用戶:
[root@localhost bin]#groupadd template
3.在添加系統賬號時使用如下命令:
3.用戶添加成功后,還需要修改/etc/ssh2/sshd2_config文件,將下列內容:
#ChRootGroups sftp,guest
改為:
ChRootGroups sftp,guest,template
修改上面這行內容,主要是為了禁止普通用戶查看系統的其它目錄,把其權限限制在自己的主目錄下。重新啟動SSH服務器程序,在客戶端使用SSH Secure File Transfer Client登錄,即使選擇顯示根目錄,普通用戶也看不到其它的任何目錄,而是把自己的主目錄當作根目錄。注意,這里使用的是按用戶所屬組限制,這樣可以使包含在template組內的所有用戶都可以實現此功能。若您只要限制個別用戶的話,可以修改下面的內容:
事實證明SSH是一種非常好的網絡安全解決方案,但是,目前仍有很多管理員使用Telnet或FTP這種非常不安全的工具,希望盡快轉移到SSH上來,以減少網絡安全隱患。
新聞熱點
疑難解答