安全和穩(wěn)定是Linux操作系統(tǒng)的兩大特點(diǎn)。由于Linux采取了許多安全技術(shù)措施,包括讀/寫權(quán)限控制、帶保護(hù)的子系統(tǒng)、審計(jì)跟蹤、核心授權(quán)等,為網(wǎng)絡(luò)多用戶環(huán)境中的用戶提供了必要的安全保障,因此越來(lái)越多的用戶開(kāi)始學(xué)習(xí)和使用Linux。但是Linux的安全要建立在有效的防范基礎(chǔ)上,如果是一個(gè)不加任何防范和限制的Linux系統(tǒng),同樣也有較多漏洞。以傳統(tǒng)的網(wǎng)絡(luò)服務(wù)程序?yàn)槔現(xiàn)TP、R Shell和Telnet等服務(wù)在本質(zhì)上都存在不安全因素,因?yàn)樗鼈冊(cè)诰W(wǎng)絡(luò)上用“明文”傳送口令和數(shù)據(jù),使別有用心的人很容易截獲這些口令和數(shù)據(jù)。同時(shí)這些服務(wù)程序的安全驗(yàn)證方式也有弱點(diǎn),很容易受到“中間人”(man-in-the-middle)的攻擊。所謂“中間人”的攻擊方式,即“中間人”冒充真正的服務(wù)器接收用戶傳給服務(wù)器的數(shù)據(jù),然后再冒充該用戶把數(shù)據(jù)傳給真正的服務(wù)器。服務(wù)器和用戶之間的數(shù)據(jù)傳送被“中間人”做了手腳之后,會(huì)出現(xiàn)很嚴(yán)重的問(wèn)題。所以,盡可能地使用安全的工具來(lái)管理系統(tǒng)顯得愈發(fā)重要。
傳統(tǒng)遠(yuǎn)程管理工具的特點(diǎn)
遠(yuǎn)程登錄的作用就是讓用戶以模擬終端的方式,登錄到Internet的某臺(tái)主機(jī)上。一旦連接成功,這些個(gè)人計(jì)算機(jī)就像遠(yuǎn)程計(jì)算機(jī)的一個(gè)終端,可以像使用終端計(jì)算機(jī)一樣輸入命令,并運(yùn)行遠(yuǎn)程計(jì)算機(jī)中的程序。
在企業(yè)通常的使用環(huán)境中,服務(wù)器放在ISP托管中心或其服務(wù)器機(jī)房?jī)?nèi),只有少數(shù)人才能進(jìn)入并接觸到主機(jī)。因此管理員通常會(huì)在服務(wù)器上開(kāi)啟Telnet服務(wù)守護(hù)進(jìn)程,以便能夠隨時(shí)觀察服務(wù)器上的變化,并登錄到服務(wù)器上進(jìn)行維護(hù);如果管理員需要在服務(wù)器調(diào)試程序,還會(huì)開(kāi)啟FTP服務(wù)進(jìn)程,從本地機(jī)上傳程序到服務(wù)器進(jìn)行調(diào)試(如圖1所示)。可見(jiàn)這種終端的服務(wù)對(duì)網(wǎng)絡(luò)管理員來(lái)說(shuō)非常重要。
圖1 管理員利用終端服務(wù)對(duì)ISP進(jìn)行操控
一般在遠(yuǎn)程管理中經(jīng)常使用遠(yuǎn)程管理Telnet的工具有CRT、NetTerm、ShellNet,以及Rlogin、Rcp、Rexec、Rsh(所有以“R”開(kāi)頭的服務(wù)都建立在不與外界進(jìn)行任何聯(lián)系的基礎(chǔ)上。出于安全方面的考慮,必須禁止這些進(jìn)程的啟動(dòng))。這些工具的優(yōu)點(diǎn)是使用方便、配置簡(jiǎn)單;缺點(diǎn)是不夠安全。以Telnet為例,因?yàn)槠湟?#8220;明碼”傳輸,所以不能稱為一個(gè)很好的聯(lián)機(jī)方式。什么是“明碼”?簡(jiǎn)單地說(shuō),使用Telnet時(shí),系統(tǒng)會(huì)出現(xiàn)一個(gè)主機(jī)界面,如果沒(méi)有設(shè)置系統(tǒng)的issue.net文件為空,系統(tǒng)默認(rèn)出現(xiàn)的界面就會(huì)泄露一些對(duì)用戶不利的信息給別人,如圖2所示。
圖2 Telnet登錄主機(jī)界面
用戶需要輸入賬號(hào)與密碼,當(dāng)主機(jī)接受資料后才能進(jìn)行確認(rèn)。此時(shí),用戶資料就會(huì)經(jīng)過(guò)Telnet協(xié)議傳輸?shù)街鳈C(jī)上。如果有人正在某個(gè)router節(jié)點(diǎn)監(jiān)聽(tīng)封包,就可以輕而易舉地截獲資料封包,并可以通過(guò)解讀竊取賬號(hào)和密碼。建議非必要時(shí)不要激活Telnet;如果一定要激活,必須確定限制的聯(lián)機(jī)范圍,并使用iptables設(shè)定聯(lián)機(jī)的限制區(qū)域。此外,還要隨時(shí)注意登錄檔案里關(guān)于登錄的事項(xiàng),不要讓root用戶以Telnet方式登入Linux主機(jī)。
SSH及OpenSSH簡(jiǎn)介
SSH(Secure Shell)是以遠(yuǎn)程聯(lián)機(jī)服務(wù)方式操作服務(wù)器時(shí)的較為安全的解決方案。它最初由芬蘭的一家公司開(kāi)發(fā),但由于受版權(quán)和加密算法的限制,很多人轉(zhuǎn)而使用免費(fèi)的替代軟件OpenSSH。
用戶通過(guò)SSH可以把所有傳輸?shù)臄?shù)據(jù)進(jìn)行加密,使“中間人”的攻擊方式不可能實(shí)現(xiàn),而且也能夠防止DNS和IP欺騙。它還有一個(gè)額外的好處是傳輸?shù)臄?shù)據(jù)是經(jīng)過(guò)壓縮的,可以加快傳輸?shù)乃俣取SH作用廣泛,既可以代替Telnet,又可以為FTP、POP,甚至為PPP提供一個(gè)安全的“通道”。SSH協(xié)議在預(yù)設(shè)的狀態(tài)中,提供兩個(gè)服務(wù)器功能:一個(gè)是類似Telnet的遠(yuǎn)程聯(lián)機(jī)使用Shell服務(wù)器,即俗稱SSH功能;另一個(gè)是類似FTP服務(wù)的SFTP-Server功能,可提供更安全的FTP服務(wù)。
SSH的安全驗(yàn)證如何工作呢?主要依靠聯(lián)機(jī)加密技術(shù)。從客戶端來(lái)看,有以下兩種安全驗(yàn)證級(jí)別:
1.基于口令的安全驗(yàn)證(ssh1) 只要知道自己的賬號(hào)和口令,就可以登錄到遠(yuǎn)程主機(jī)。所有傳輸?shù)臄?shù)據(jù)都將被加密,但是不能保證正在連接的服務(wù)器就是想要連接的服務(wù)器。可能受到“中間人”的攻擊。
2.基于密匙的安全驗(yàn)證(ssh2) 需要依靠密匙,即用戶必須為自己創(chuàng)建一對(duì)密匙,并把公用密匙放在需要訪問(wèn)的服務(wù)器上。如果要連接到SSH服務(wù)器上,客戶端軟件就會(huì)向服務(wù)器發(fā)出請(qǐng)求,請(qǐng)求用密匙進(jìn)行安全驗(yàn)證。服務(wù)器收到請(qǐng)求之后,先在該服務(wù)器的home目錄下尋找公用密匙,然后把它和發(fā)送過(guò)來(lái)的公用密匙進(jìn)行比較。如果兩個(gè)密匙一致,服務(wù)器就用公用密匙加密“質(zhì)詢”(challenge),并把它發(fā)送給客戶端軟件。客戶端軟件收到“質(zhì)詢”后,就可以用私人密匙解密再把它發(fā)送給服務(wù)器。使用這種方式,用戶必須知道自己密匙的口令。與第一種級(jí)別相比,這種級(jí)別不需要在網(wǎng)絡(luò)上傳送口令,不僅加密所有傳送的數(shù)據(jù),而且阻止了“中間人”攻擊方式。整個(gè)登錄的過(guò)程一般需要10秒。
OpenSSH的安裝和啟動(dòng)
OpenSSH的安裝非常簡(jiǎn)便,操作如下。
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啟動(dòng)進(jìn)程
# cd /etc/rc.d/rc3.d/
# ln -s ../init.d/sshd S59sshd
|
重啟計(jì)算機(jī)以后,用下列命令進(jìn)行測(cè)試:
# 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將顯示不能識(shí)別該主機(jī)。鍵入“yes”,把主機(jī)的“識(shí)別標(biāo)記”加到“~/.ssh/know_hosts”文件中。第二次訪問(wèn)這臺(tái)主機(jī)的時(shí)候就不會(huì)再顯示這條提示信息。然后,OpenSSH提示輸入遠(yuǎn)程主機(jī)上的賬號(hào)及口令。輸入完后就建立了SSH連接,可以像使用Telnet一樣使用OpenSSH。
配置基于密鑰認(rèn)證的OpenSSH
缺省情況下,SSH將默認(rèn)使用口令驗(yàn)證方式。不需要對(duì)系統(tǒng)進(jìn)行任何配置就可以使用賬號(hào)和口令登錄到遠(yuǎn)程主機(jī)。下面介紹如何配置并使用基于密匙認(rèn)證的OpenSSH(假設(shè)用戶名為geminis,主機(jī)IP為192.168.0.1)。
首先創(chuàng)建一對(duì)密匙(包括公匙和密匙,并且用公匙加密的數(shù)據(jù)只能用密匙解密),把公匙放到需要遠(yuǎn)程服務(wù)器上。當(dāng)?shù)卿涍h(yuǎn)程服務(wù)器時(shí),客戶端軟件會(huì)向服務(wù)器發(fā)出請(qǐng)求,請(qǐng)求用密匙進(jìn)行認(rèn)證,代碼如下:
# ssh-keygen -d
// 加上參數(shù)d是創(chuàng)建一個(gè)一基于ssh2的密匙對(duì)
#Generating public/private DSA key pair.
// 生成DSA加密模式的密匙對(duì)
# Enter file in which to save the key (/home/geminis/.ssh/id_dsa):
//存放密匙文件的路徑,直接回車為默認(rèn)目錄
# Enter passphrase (empty for no passphrase):
//必須輸入一個(gè)>4個(gè)字符的標(biāo)識(shí)符
# 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
|
接下來(lái),把id_dsa.pub發(fā)布到服務(wù)器上。通過(guò)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)限不正確,會(huì)導(dǎo)致SSH連接失敗。
服務(wù)器收到請(qǐng)求之后,在該服務(wù)器的宿主目錄下尋找公匙,然后檢查該公匙是否合法。如果合法就用公匙加密一隨機(jī)數(shù)(即所謂的challenge)并發(fā)送給客戶端軟件。客戶端軟件收到后就用私匙解密再把它發(fā)送給服務(wù)器。因?yàn)橛霉准用艿臄?shù)據(jù)只能用密匙解密,服務(wù)器經(jīng)過(guò)比較就可以知道該客戶連接的合法性。連接代碼如下:
# ssl -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平臺(tái)
客戶端通常使用Windows平臺(tái),操作較為直觀。下面對(duì)幾種客戶端工具進(jìn)行介紹。
◆ PuTTY
在客戶端使用SSH較好的工具是PuTTY,這是一個(gè)開(kāi)源軟件。用戶可以根據(jù)自己的配置情況對(duì)該軟件進(jìn)行修改,如圖3所示。
圖3 PuTTY配置界面
如果是第一次使用該軟件,系統(tǒng)會(huì)提示下載有關(guān)主機(jī)的“識(shí)別標(biāo)記”,選擇“yes”,下次登錄就不會(huì)出現(xiàn)提示框。
◆ Filezilla
Filezilla是客戶端使用SFTP的一款不錯(cuò)的開(kāi)源軟件,對(duì)中文支持很好,配置界面如圖4所示。
圖4 Filezilla配置界面
2. Linux終端
在Linux終端下使用SSH,優(yōu)點(diǎn)是操作更方便,無(wú)須其它軟件;缺點(diǎn)是不太直觀。使用方法及命令介紹如下:
◆ SSH的使用
# ssh -l geminis www.test.com
Enter passphrase for key '/home/geminis/.ssh/id_dsa':
//輸入以前設(shè)置的標(biāo)識(shí)符
|
◆ SFTP的使用
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è)置說(shuō)明如表2所示。
表2 SSH配置選項(xiàng)說(shuō)明
配置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
|