安全和穩定是Linux操作系統的兩大特點。由於Linux采取了許多安全技術措施,包括讀/寫權限控制、帶保護的子系統、審計跟蹤、核心授權等,為網絡多用戶環境中的用戶提供了必要的安全保障,因此越來越多的用戶開始學習和使用Linux。但是Linux的安全要建立在有效的防范基礎上,如果是一個不加任何防范和限制的Linux系統,同樣也有較多漏洞。以傳統的網絡服務程序為例,FTP、R Shell和Telnet等服務在本質上都存在不安全因素,因為它們在網絡上用“明文”傳送口令和數據,使別有用心的人很容易截獲這些口令和數據。同時這些服務程序的安全驗證方式也有弱點,很容易受到“中間人”(man-in-the-middle)的攻擊。所謂“中間人”的攻擊方式,即“中間人”冒充真正的服務器接收用戶傳給服務器的數據,然後再冒充該用戶把數據傳給真正的服務器。服務器和用戶之間的數據傳送被“中間人”做了手腳之後,會出現很嚴重的問題。所以,盡可能地使用安全的工具來管理系統顯得愈發重要。
傳統遠程管理工具的特點
遠程登錄的作用就是讓用戶以模擬終端的方式,登錄到Internet的某台主機上。一旦連接成功,這些個人計算機就像遠程計算機的一個終端,可以像使用終端計算機一樣輸入命令,並運行遠程計算機中的程序。
在企業通常的使用環境中,服務器放在ISP托管中心或其服務器機房內,只有少數人才能進入並接觸到主機。因此管理員通常會在服務器上開啟Telnet服務守護進程,以便能夠隨時觀察服務器上的變化,並登錄到服務器上進行維護;如果管理員需要在服務器調試程序,還會開啟FTP服務進程,從本地機上傳程序到服務器進行調試(如圖1所示)。可見這種終端的服務對網絡管理員來說非常重要。
圖1 管理員利用終端服務對ISP進行操控
一般在遠程管理中經常使用遠程管理Telnet的工具有CRT、 NetTerm、ShellNet,以及Rlogin、Rcp、Rexec、Rsh(所有以“R”開頭的服務都建立在不與外界進行任何聯系的基礎上。出於安全方面的考慮,必須禁止這些進程的啟動)。這些工具的優點是使用方便、配置簡單;缺點是不夠安全。以Telnet為例,因為其以“明碼”傳輸,所以不能稱為一個很好的聯機方式。什麼是“明碼”?簡單地說,使用Telnet時,系統會出現一個主機界面,如果沒有設置系統的issue.net文件為空,系統默認出現的界面就會洩露一些對用戶不利的信息給別人,如圖2所示。
圖2 Telnet登錄主機界面
用戶需要輸入賬號與密碼,當主機接受資料後才能進行確認。此時,用戶資料就會經過 Telnet協議傳輸到主機上。如果有人正在某個router節點監聽封包,就可以輕而易舉地截獲資料封包,並可以通過解讀竊取賬號和密碼。建議非必要時不要激活Telnet;如果一定要激活,必須確定限制的聯機范圍,並使用iptables設定聯機的限制區域。此外,還要隨時注意登錄檔案裡關於登錄的事項,不要讓root用戶以Telnet方式登入Linux主機。
SSH及OpenSSH簡介
SSH(Secure Shell)是以遠程聯機服務方式操作服務器時的較為安全的解決方案。它最初由芬蘭的一家公司開發,但由於受版權和加密算法的限制,很多人轉而使用免費的替代軟件OpenSSH。
用戶通過SSH可以把所有傳輸的數據進行加密,使“中間人”的攻擊方式不可能實現,而且也能夠防止DNS和IP欺騙。它還有一個額外的好處是傳輸的數據是經過壓縮的,可以加快傳輸的速度。SSH作用廣泛,既可以代替Telnet,又可以為FTP、POP,甚至為PPP提供一個安全的“通道”。SSH協議在預設的狀態中,提供兩個服務器功能:一個是類似Telnet的遠程聯機使用Shell服務器,即俗稱SSH功能;另一個是類似FTP服務的SFTP-Server功能,可提供更安全的FTP服務。
SSH的安全驗證如何工作呢?主要依靠聯機加密技術。從客戶端來看,有以下兩種安全驗證級別:
1.基於口令的安全驗證(ssh1) 只要知道自己的賬號和口令,就可以登錄到遠程主機。所有傳輸的數據都將被加密,但是不能保證正在連接的服務器就是想要連接的服務器。可能受到“中間人”的攻擊。
2.基於密匙的安全驗證(ssh2) 需要依靠密匙,即用戶必須為自己創建一對密匙,並把公用密匙放在需要訪問的服務器上。如果要連接到SSH服務器上,客戶端軟件就會向服務器發出請求,請求用密匙進行安全驗證。服務器收到請求之後,先在該服務器的home目錄下尋找公用密匙,然後把它和發送過來的公用密匙進行比較。如果兩個密匙一致,服務器就用公用密匙加密“質詢”(challenge),並把它發送給客戶端軟件。客戶端軟件收到“質詢”後,就可以用私人密匙解密再把它發送給服務器。使用這種方式,用戶必須知道自己密匙的口令。與第一種級別相比,這種級別不需要在網絡上傳送口令,不僅加密所有傳送的數據,而且阻止了“中間人”攻擊方式。整個登錄的過程一般需要10秒。
OpenSSH的安裝和啟動
OpenSSH的安裝非常簡便,操作如下。
1.下載軟件包。到http://www.openssh.com下載最新軟件包OpenSSH 3.6.1(最好下載源程序軟件包後自行編譯)。本文以openssh-3.5p1.tar.gz為例進行介紹,安裝環境為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啟動進程
# cd /etc/rc.d/rc3.d/
# ln -s ../init.d/sshd S59sshd
重啟計算機以後,用下列命令進行測試:
# 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)?
因為是第一次登錄主機,OpenSSH將顯示不能識別該主機。鍵入“yes”,把主機的“識別標記”加到“~/.ssh/know_hosts”文件中。第二次訪問這台主機的時候就不會再顯示這條提示信息。然後,OpenSSH提示輸入遠程主機上的賬號及口令。輸入完後就建立了SSH連接,可以像使用 Telnet一樣使用OpenSSH。
配置基於密鑰認證的OpenSSH
缺省情況下,SSH將默認使用口令驗證方式。不需要對系統進行任何配置就可以使用賬號和口令登錄到遠程主機。下面介紹如何配置並使用基於密匙認證的OpenSSH(假設用戶名為geminis,主機IP為192.168.0.1)。
首先創建一對密匙(包括公匙和密匙,並且用公匙加密的數據只能用密匙解密),把公匙放到需要遠程服務器上。當登錄遠程服務器時,客戶端軟件會向服務器發出請求,請求用密匙進行認證,代碼如下:
# ssh-keygen -d
// 加上參數d是創建一個一基於ssh2的密匙對
#Generating public/private DSA key pair.
// 生成DSA加密模式的密匙對
# Enter file in which to save the key (/home/geminis/.ssh/id_dsa):
//存放密匙文件的路徑,直接回車為默認目錄
# Enter passphrase (empty for no passphrase):
//必須輸入一個>4個字符的標識符
# Enter same passphrase again:
//重新確認一次
如果創建成功,系統將返回以下信息:
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
[email protected]
接下來,把id_dsa.pub發布到服務器上。通過FTP將公匙文件“/home/admin/.ssh/id_dsa.pub”,復制到遠程服務器的“/home/admin/.ssh”目錄。如果.ssh目錄不存在,可以用mkdir命令先建立。然後,將“id_dsa.pub”重命名為“authorized_keys2”,代碼如下:
# mv id_dsa.pub authorized_keys2
# chmod 644 authorized_keys2
注意,如果authorized_keys2文件的權限不正確,會導致SSH連接失敗。
服務器收到請求之後,在該服務器的宿主目錄下尋找公匙,然後檢查該公匙是否合法。如果合法就用公匙加密一隨機數(即所謂的challenge)並發送給客戶端軟件。客戶端軟件收到後就用私匙解密再把它發送給服務器。因為用公匙加密的數據只能用密匙解密,服務器經過比較就可以知道該客戶連接的合法性。連接代碼如下:
# ssl -l geminis www.test.com
系統返回以下信息:
# 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平台,操作較為直觀。下面對幾種客戶端工具進行介紹。
◆ PuTTY
在客戶端使用SSH較好的工具是PuTTY,這是一個開源軟件。用戶可以根據自己的配置情況對該軟件進行修改,如圖3所示。
圖3 PuTTY配置界面
如果是第一次使用該軟件,系統會提示下載有關主機的“識別標記”,選擇“yes”,下次登錄就不會出現提示框。
◆ Filezilla
Filezilla是客戶端使用SFTP的一款不錯的開源軟件,對中文支持很好,配置界面如圖4所示。
圖4 Filezilla配置界面
2. Linux終端
在Linux終端下使用SSH,優點是操作更方便,無須其它軟件;缺點是不太直觀。使用方法及命令介紹如下:
◆ SSH的使用
# ssh -l geminis www.test.com
Enter passphrase for key '/home/geminis/.ssh/id_dsa':
//輸入以前設置的標識符
◆ SFTP的使用
# sftp www.test.com
SFTP相關命令的使用方法如表1所示。
3.進階提高要點
配置SSH客戶端文件“/etc/ssh/ssh_config”,如圖5所示。
圖5 配置“/etc/ssh/ssh_config”文件
表1 SFTP相關命令的使用方法
選項設置說明如表2所示。
表2 SSH配置選項說明
配置SSH服務器端文件“/etc/ssh/sshd_config”,取消口令驗證。把“PassWordAuthentication Yes”改為“no”,可以禁止使用第一種口令驗證。
配置“/etc/ssh/sshd_config”文件,編輯“sshd_config”文件,加入或改變下面的參數:
# 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
[返回列表]
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
[返回列表]
RSAAuthentication yes
PasswordAuthentication yes
PermitEmptyPasswords no
AllowUsers admin
[返回列表]