OpenSSH:讓遠(yuǎn)程管理更安全
安全和穩(wěn)定是Linux操作系統(tǒng)的兩大特點(diǎn)。由于Linux采取了許多安全技術(shù)措施,包括讀/寫權(quán)限控制、帶保護(hù)的子系統(tǒng)、審計(jì)跟蹤、核心授權(quán)等,為網(wǎng)絡(luò)多用戶環(huán)境中的用戶提供了必要的安全保障,因此越來越多的用戶開始學(xué)習(xí)和使用Linux。但是Linux的安全要建立在有效的防范基礎(chǔ)上,如果是一個不加任何防范和限制的Linux系統(tǒng),同樣也有較多漏洞。以傳統(tǒng)的網(wǎng)絡(luò)服務(wù)程序?yàn)槔現(xiàn)TP、R Shell和Telnet等服務(wù)在本質(zhì)上都存在不安全因素,因?yàn)樗鼈冊诰W(wǎng)絡(luò)上用“明文”傳送口令和數(shù)據(jù),使別有用心的人很容易截獲這些口令和數(shù)據(jù)。同時這些服務(wù)程序的安全驗(yàn)證方式也有弱點(diǎn),很容易受到“中間人”(man-in-the-middle)的攻擊。所謂“中間人”的攻擊方式,即“中間人”冒充真正的服務(wù)器接收用戶傳給服務(wù)器的數(shù)據(jù),然后再冒充該用戶把數(shù)據(jù)傳給真正的服務(wù)器。服務(wù)器和用戶之間的數(shù)據(jù)傳送被“中間人”做了手腳之后,會出現(xiàn)很嚴(yán)重的問題。所以,盡可能地使用安全的工具來管理系統(tǒng)顯得愈發(fā)重要。傳統(tǒng)遠(yuǎn)程管理工具的特點(diǎn)
遠(yuǎn)程登錄的作用就是讓用戶以模擬終端的方式,登錄到Internet的某臺主機(jī)上。一旦連接成功,這些個人計(jì)算機(jī)就像遠(yuǎn)程計(jì)算機(jī)的一個終端,可以像使用終端計(jì)算機(jī)一樣輸入命令,并運(yùn)行遠(yuǎn)程計(jì)算機(jī)中的程序。
在企業(yè)通常的使用環(huán)境中,服務(wù)器放在ISP托管中心或其服務(wù)器機(jī)房內(nèi),只有少數(shù)人才能進(jìn)入并接觸到主機(jī)。因此管理員通常會在服務(wù)器上開啟Telnet服務(wù)守護(hù)進(jìn)程,以便能夠隨時觀察服務(wù)器上的變化,并登錄到服務(wù)器上進(jìn)行維護(hù);如果管理員需要在服務(wù)器調(diào)試程序,還會開啟FTP服務(wù)進(jìn)程,從本地機(jī)上傳程序到服務(wù)器進(jìn)行調(diào)試(如圖1所示)。可見這種終端的服務(wù)對網(wǎng)絡(luò)管理員來說非常重要。
圖1 管理員利用終端服務(wù)對ISP進(jìn)行操控
一般在遠(yuǎn)程管理中經(jīng)常使用遠(yuǎn)程管理Telnet的工具有CRT、 NetTerm、ShellNet,以及Rlogin、Rcp、Rexec、Rsh(所有以“R”開頭的服務(wù)都建立在不與外界進(jìn)行任何聯(lián)系的基礎(chǔ)上。出于安全方面的考慮,必須禁止這些進(jìn)程的啟動)。這些工具的優(yōu)點(diǎn)是使用方便、配置簡單;缺點(diǎn)是不夠安全。以Telnet為例,因?yàn)槠湟浴懊鞔a”傳輸,所以不能稱為一個很好的聯(lián)機(jī)方式。什么是“明碼”?簡單地說,使用Telnet時,系統(tǒng)會出現(xiàn)一個主機(jī)界面,如果沒有設(shè)置系統(tǒng)的issue.net文件為空,系統(tǒng)默認(rèn)出現(xiàn)的界面就會泄露一些對用戶不利的信息給別人,如圖2所示。
圖2 Telnet登錄主機(jī)界面
用戶需要輸入賬號與密碼,當(dāng)主機(jī)接受資料后才能進(jìn)行確認(rèn)。此時,用戶資料就會經(jīng)過 Telnet協(xié)議傳輸?shù)街鳈C(jī)上。如果有人正在某個router節(jié)點(diǎn)監(jiān)聽封包,就可以輕而易舉地截獲資料封包,并可以通過解讀竊取賬號和密碼。建議非必要時不要激活Telnet;如果一定要激活,必須確定限制的聯(lián)機(jī)范圍,并使用iptables設(shè)定聯(lián)機(jī)的限制區(qū)域。此外,還要隨時注意登錄檔案里關(guān)于登錄的事項(xiàng),不要讓root用戶以Telnet方式登入Linux主機(jī)。
SSH及OpenSSH簡介
SSH(Secure Shell)是以遠(yuǎn)程聯(lián)機(jī)服務(wù)方式操作服務(wù)器時的較為安全的解決方案。它最初由芬蘭的一家公司開發(fā),但由于受版權(quán)和加密算法的限制,很多人轉(zhuǎn)而使用免費(fèi)的替代軟件OpenSSH。
用戶通過SSH可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,使“中間人”的攻擊方式不可能實(shí)現(xiàn),而且也能夠防止DNS和IP欺騙。它還有一個額外的好處是傳輸?shù)臄?shù)據(jù)是經(jīng)過壓縮的,可以加快傳輸?shù)乃俣取SH作用廣泛,既可以代替Telnet,又可以為FTP、POP,甚至為PPP提供一個安全的“通道”。SSH協(xié)議在預(yù)設(shè)的狀態(tài)中,提供兩個服務(wù)器功能:一個是類似Telnet的遠(yuǎn)程聯(lián)機(jī)使用Shell服務(wù)器,即俗稱SSH功能;另一個是類似FTP服務(wù)的SFTP-Server功能,可提供更安全的FTP服務(wù)。
SSH的安全驗(yàn)證如何工作呢?主要依靠聯(lián)機(jī)加密技術(shù)。從客戶端來看,有以下兩種安全驗(yàn)證級別:
1.基于口令的安全驗(yàn)證(ssh1) 只要知道自己的賬號和口令,就可以登錄到遠(yuǎn)程主機(jī)。所有傳輸?shù)臄?shù)據(jù)都將被加密,但是不能保證正在連接的服務(wù)器就是想要連接的服務(wù)器。可能受到“中間人”的攻擊。
2.基于密匙的安全驗(yàn)證(ssh2) 需要依靠密匙,即用戶必須為自己創(chuàng)建一對密匙,并把公用密匙放在需要訪問的服務(wù)器上。如果要連接到SSH服務(wù)器上,客戶端軟件就會向服務(wù)器發(fā)出請求,請求用密匙進(jìn)行安全驗(yàn)證。服務(wù)器收到請求之后,先在該服務(wù)器的home目錄下尋找公用密匙,然后把它和發(fā)送過來的公用密匙進(jìn)行比較。如果兩個密匙一致,服務(wù)器就用公用密匙加密“質(zhì)詢”(challenge),并把它發(fā)送給客戶端軟件。客戶端軟件收到“質(zhì)詢”后,就可以用私人密匙解密再把它發(fā)送給服務(wù)器。使用這種方式,用戶必須知道自己密匙的口令。與第一種級別相比,這種級別不需要在網(wǎng)絡(luò)上傳送口令,不僅加密所有傳送的數(shù)據(jù),而且阻止了“中間人”攻擊方式。整個登錄的過程一般需要10秒。
OpenSSH的安裝和啟動
OpenSSH的安裝非常簡便,操作如下。
1.下載軟件包。到http://www.openssh.com下載最新軟件包OpenSSH 3.6.1(最好下載源程序軟件包后自行編譯)。本文以openssh-3.5p1.tar.gz為例進(jìn)行介紹,安裝環(huán)境為Red Hat 7.1/kernel 2.4.8/gcc-2.96-98。
2. 解壓及安裝,代碼如下:
# tar zxvf openssh-3.5p1.tar.gz
# cd openssh-3.5p1
# ./configure --prefix=/opt --sysconfdir=/etc/openssh
# make
# make install
# cd /etc/rc.d/init.d/
# vi sshd
//加入/opt/sbin/sshd啟動進(jìn)程
# cd /etc/rc.d/rc3.d/
# ln -s ../init.d/sshd S59sshd
重啟計(jì)算機(jī)以后,用下列命令進(jìn)行測試:
# ssh -l geminis www.test.com
The authenticity of host 'www.test.com (*.*.*.*)' can't be established.
RSA key fingerprint is a7:35:3c:bd:47:b0:5d:30:68:f1:15:77:1a:b1:67:dd.
Are you sure you want to continue connecting (yes/no)?
因?yàn)槭堑谝淮蔚卿浿鳈C(jī),OpenSSH將顯示不能識別該主機(jī)。鍵入“yes”,把主機(jī)的“識別標(biāo)記”加到“~/.ssh/know_hosts”文件中。第二次訪問這臺主機(jī)的時候就不會再顯示這條提示信息。然后,OpenSSH提示輸入遠(yuǎn)程主機(jī)上的賬號及口令。輸入完后就建立了SSH連接,可以像使用 Telnet一樣使用OpenSSH。
配置基于密鑰認(rèn)證的OpenSSH
缺省情況下,SSH將默認(rèn)使用口令驗(yàn)證方式。不需要對系統(tǒng)進(jìn)行任何配置就可以使用賬號和口令登錄到遠(yuǎn)程主機(jī)。下面介紹如何配置并使用基于密匙認(rèn)證的OpenSSH(假設(shè)用戶名為geminis,主機(jī)IP為192.168.0.1)。
首先創(chuàng)建一對密匙(包括公匙和密匙,并且用公匙加密的數(shù)據(jù)只能用密匙解密),把公匙放到需要遠(yuǎn)程服務(wù)器上。當(dāng)?shù)卿涍h(yuǎn)程服務(wù)器時,客戶端軟件會向服務(wù)器發(fā)出請求,請求用密匙進(jìn)行認(rèn)證,代碼如下:
# ssh-keygen -d
// 加上參數(shù)d是創(chuàng)建一個一基于ssh2的密匙對
#Generating public/private DSA key pair.
// 生成DSA加密模式的密匙對
# Enter file in which to save the key (/home/geminis/.ssh/id_dsa):
//存放密匙文件的路徑,直接回車為默認(rèn)目錄
# Enter passphrase (empty for no passphrase):
//必須輸入一個>4個字符的標(biāo)識符
# Enter same passphrase again:
//重新確認(rèn)一次
如果創(chuàng)建成功,系統(tǒng)將返回以下信息:
Your identification has been saved in /home/geminis/.ssh/id_dsa.
Your public key has been saved in /home/geminis/.ssh/id_dsa.pub.
The key fingerprint is:
29:1b:46:00:08:38:d5:87:da:96:e7:c4:a3:6b:b1:3f geminis@www.test.com
接下來,把id_dsa.pub發(fā)布到服務(wù)器上。通過FTP將公匙文件“/home/admin/.ssh/id_dsa.pub”,復(fù)制到遠(yuǎn)程服務(wù)器的“/home/admin/.ssh”目錄。如果.ssh目錄不存在,可以用mkdir命令先建立。然后,將“id_dsa.pub”重命名為“authorized_keys2”,代碼如下:
# mv id_dsa.pub authorized_keys2
# chmod 644 authorized_keys2
注意,如果authorized_keys2文件的權(quán)限不正確,會導(dǎo)致SSH連接失敗。
服務(wù)器收到請求之后,在該服務(wù)器的宿主目錄下尋找公匙,然后檢查該公匙是否合法。如果合法就用公匙加密一隨機(jī)數(shù)(即所謂的challenge)并發(fā)送給客戶端軟件。客戶端軟件收到后就用私匙解密再把它發(fā)送給服務(wù)器。因?yàn)橛霉准用艿臄?shù)據(jù)只能用密匙解密,服務(wù)器經(jīng)過比較就可以知道該客戶連接的合法性。連接代碼如下:
# ssh -l geminis www.test.com
系統(tǒng)返回以下信息:
# Enter passphrase for key '/home/geminis/.ssh/id_dsa': ******
Last login: Wed Apr 16 12:31:49 2003 from www.geminis.com
OpenSSH客戶端使用方法
1. Windows平臺
客戶端通常使用Windows平臺,操作較為直觀。下面對幾種客戶端工具進(jìn)行介紹。
◆ PuTTY
在客戶端使用SSH較好的工具是PuTTY,這是一個開源軟件。用戶可以根據(jù)自己的配置情況對該軟件進(jìn)行修改,如圖3所示。
圖3 PuTTY配置界面
如果是第一次使用該軟件,系統(tǒng)會提示下載有關(guān)主機(jī)的“識別標(biāo)記”,選擇“yes”,下次登錄就不會出現(xiàn)提示框。
◆ Filezilla
Filezilla是客戶端使用SFTP的一款不錯的開源軟件,對中文支持很好,配置界面如圖4所示。
圖4 Filezilla配置界面
2. Linux終端
在Linux終端下使用SSH,優(yōu)點(diǎn)是操作更方便,無須其它軟件;缺點(diǎn)是不太直觀。使用方法及命令介紹如下:
◆ SSH的使用
# ssh -l geminis www.test.com
Enter passphrase for key '/home/geminis/.ssh/id_dsa':
//輸入以前設(shè)置的標(biāo)識符
◆ SFTP的使用
# sftp www.test.com
SFTP相關(guān)命令的使用方法如表1所示。
3.進(jìn)階提高要點(diǎn)
配置SSH客戶端文件“/etc/ssh/ssh_config”,如圖5所示。
圖5 配置“/etc/ssh/ssh_config”文件
表1 SFTP相關(guān)命令的使用方法
選項(xiàng)設(shè)置說明如表2所示。
表2 SSH配置選項(xiàng)說明
配置SSH服務(wù)器端文件“/etc/ssh/sshd_config”,取消口令驗(yàn)證。把“PasswordAuthentication Yes”改為“no”,可以禁止使用第一種口令驗(yàn)證。
配置“/etc/ssh/sshd_config”文件,編輯“sshd_config”文件,加入或改變下面的參數(shù):
# This is ssh server systemwide configuration file.
Port 22
ListenAddress 192.168.1.1
HostKey /etc/ssh/ssh_host_key
ServerKeyBits 1024
LoginGraceTime 600
KeyRegenerationInterval 3600
PermitRootLogin no
IgnoreRhosts yes
IgnoreUserKnownHosts yes
StrictModes yes
X11Forwarding no
PrintMotd yes
SyslogFacility AUTH
LogLevel INFO
RhostsAuthentication no
RhostsRSAAuthentication no
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers admin
posted on 2005-10-08 16:52 風(fēng) 閱讀(1015) 評論(0) 編輯 收藏 所屬分類: linux