歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> 用SRP建立安全的Linux FTP服務器

用SRP建立安全的Linux FTP服務器

日期:2017/3/6 15:33:11   编辑:關於Unix
在中小型異構 網絡 中,很多用戶選擇Linux作為 網絡 操作系統,利用其簡單的配置和用戶熟悉的圖形界面提供Inte .net 服務,FTP便是其提供的服務之一。在眾多 網絡 應用中,FTP(文件傳輸協議)有著非常重要的地位。互聯網一個十分重要的資源就是軟件資源,而

  在中小型異構網絡中,很多用戶選擇Linux作為網絡操作系統,利用其簡單的配置和用戶熟悉的圖形界面提供Inte.net服務,FTP便是其提供的服務之一。在眾多網絡應用中,FTP(文件傳輸協議)有著非常重要的地位。互聯網一個十分重要的資源就是軟件資源,而各種各樣的軟件資源大多數都放在FTP服務器中。與大多數互聯網服務一樣,FTP也是一個客戶機/服務器系統。

  FTP是傳統的網絡服務程序,在本質上是不安全的,因為它們在網絡上用明文傳送口令和數據,別有用心的人非常容易就可以截獲這些口令和數據。而且,這些服務程序的安全驗證方式也是有其弱點的,就是很容易受到“中間人”(man-in-the-middle)這種方式的攻擊。所謂“中間人”的攻擊方式,就是“中間人”冒充真正的服務器接收你傳給服務器的數據,然後再冒充你把數據傳給真正的服務器。服務器和你之間的數據傳送被“中間人”轉手後做了手腳之後,就會出現很嚴重的問題。 截獲這些口令的方式主要為暴力破解。另外使用sniffer程序監視網絡封包捕捉FTP開始的會話信息,便可順手截獲root密碼。
  SSH(Secure Shell)是以遠程聯機服務方式操作服務器時的較為安全的解決方案。它最初由芬蘭的一家公司開發,但由於受版權和加密算法的限制,很多人轉而使用免費的替代軟件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),並把它發送給客戶端軟件。客戶端軟件收到“質詢”後,就可以用私人密匙解密再把它發送給服務器。使用這種方式,用戶必須知道自己密匙的口令。與第一種級別相比,這種級別不需要在網絡上傳送口令,不僅加密所有傳送的數據,而且阻止了“中間人”攻擊方式。OpenSSH目前存在兩個安全遺患:口令、密匙破解(利用字典文件去解密碼)和OpenSSH中可能被安放木馬。

  一、SRP簡介

  SRP全稱:Secure Remote Password(安全遠程密碼),它是一個開放源代碼認證協議。使用SRP的客戶機/服務器不會在網絡上以明文或加密的方式傳送密碼,這樣可以完全消除密碼欺騙行為。保證口令可以安全地在網絡上面傳送。基本的思想是,防止有被動或主動網絡入侵者使用字典攻擊。Standford大學計算機系開發了SRP軟件包,提供基於口令認證和會話加密的安全機制,而不需要用戶或者是網管參與密鑰的管理或分發。SRP為每一個人提供透明的密碼安全,而沒有其他昂貴的起始開銷,比如阻止其他安全套件軟件的使用等。不像其他的安全軟件,SRP套件是一個完全的實現密碼認證的軟件包,不是臨時的解決方案。和標准的/etc/shadow-style 安全比較,SRP在每一個方面都是比較好的。使用SRP對用戶和管理者都有以下的好處:

  SRP抵制“password sniffing”(口令監聽)攻擊。在一個使用SRP認證的會話中,監聽者不會監視到任何在網絡中傳送的口令。在遠程登陸軟件中,明文的密碼傳送是最大的安全漏洞。任何人可以用一個簡單的嗅探器(sniffer)工具得到你登陸到遠程系統的密鑰。
SRP抵制字典攻擊。一個系統保護簡單的密碼監聽是不夠的。如果攻擊者使用強力攻擊,例如字典攻擊等,他們不是簡單的直接監聽密碼,而是跟蹤整個的會話過程,然後把整個的信息和字典中的普通密碼對照。甚至有的Kerberos系統對這樣的攻擊也是脆弱的。SRP在抵制字典攻擊的前,就進行口令的安全處理了。使用的算法就是在攻擊者進行強力攻擊前就要求攻擊者必須執行一次不可能的的大的計算。SRP甚至保護針對口令的“active”攻擊。因此,即使入侵者有能力和網絡接觸,也不能攻破SRP。所以即使是用戶使用的是很脆弱的口令,也不會讓入侵者很容易地破解的。SRP對於終端用戶是完全透明的。因為沒有所謂的“密鑰鏈”(keyrings)以及“證書”(certificates),或者“票據”(ticket)。你的口令就是密鑰。SRP簡單地保護這個密鑰,但要比老的、弱的密鑰保護機制要好。SRP從管理者的角度來說也是容易實施的。沒有所謂的“密鑰服務器”、“證書認證”,以及“認證服務器”等這樣的概念。SRP口令文件在標准的Unix口令文件的旁邊,軟件本身協同這兩個系統口令和SRP口令文件的一致性,沒有多余的維護系統的機制。SRP在認證一個用戶的時候交換一個加密的密鑰。這就意味著一個登陸會話是可以被加密,而抵制所謂的網絡監聽和惡意地篡改。用戶在遠程閱讀他們的信箋,是使用128-bit加密後的信息,這是當用戶登陸後自動處理的,而用戶本身不必關心到底需要不需要加密。系統完成加密,然後送到用戶的這裡。另外SRP不使用加密進行認證,這使得它比基於公用/私用密匙的認證方式速度更快捷、安全。SRP缺省使用的128-bit的CAST加密算法。CAST-128在RFC2144(http://srp.stanford.edu/srp/rfc2144.txt)中有定義。標准的SRP也支持56-bit的DES以及48位的DES。高級的支持Triple-DES加密手段。本文將介紹如何建立基於SRP的Telnet服務器。操作環境Redhat Linux 9.0。

  二、軟件下載和編譯

  SRP軟件主頁是:http://srp.stanford.edu 最新版本2.1.1,安裝SRP前先要安裝OpenSSL。

#wget http://srp.stanford.edu/source/srp-2.1.1.tar.gz

#cp /usr/src/redhat/SOURCES

#./configure --with-openssl=/usr/src/redhat/SOURCES/openssl-0.9.6 \

--with-pam

#make;make install


  三、建立指數密碼系統EPS

  EPS全稱:Exponential Password System(指數密碼系統),SRP軟件包中已經包括EPS源代碼。

  1. 安裝PAM模塊

  PAM簡介:

  PAM全稱:Pluggable Authentication Module (嵌入式認證模塊)。它最初有SUN公司開發;很快被Linux社區的接受,並且開發了更多的模塊。其目標是提供一套可用於驗證用戶身份的函數庫,從而將認證從應用程序開發中獨立出來。Linux-PAM處理四種獨立的(管理)工作。它們是: 認證管理; 帳號管理; 會話期間管理;和密碼管理。

  PAM工作方式:

  (1) 調用某個應用程序,以得到該程序的服務。

  (2) PAM應用程序調用後台的PAM庫進行認證工作。

  (3) PAM庫在/etc/pam.d/目錄中查找有關應用程序細節的配置文件,該文件告訴PAM,本應用程序使用何種認證機制。

  (4) PAM庫裝載所需的認證模塊。

  (5) 這些模塊可以讓PAM與應用程序中的會話函數進行通信。

  (6) 會話函數向用戶要求有關信息。

  (7) 用戶對這些要求做出回應,提供所需信息。

  (8) PAM認證模塊通過PAM庫將認證信息提供給應用程序。

  (9) 認證完成後,應用程序做出兩種選擇:

  將所需權限賦予用戶,並通知用戶。

  認證失敗,並通知用戶。

  PAM工作流程見圖1。

圖1 PAM工作流程

  PAM具體使用方法:

#cd /usr/src/redhat/SOURCES/srp-2.1.1/base/pam_eps.

#install -m 644 pam_eps_auth.so pam_eps_passwd.so /lib/security


  上面命令會在/lib/security 目錄下安裝PAM模塊。然後使用命令:“/usr/local/bin/tconf”創建/etc/tpasswd 和 /etc/tpasswd.conf文件。

  2. 使用EPS PAM模塊進行密碼驗證

  (1) 首先備份 /etc/pam.d/system-auth文件

  (2) 修改 /etc/pam.d/system-auth文件如下形式:

auth required /lib/security/pam_unix.so likeauth nullok md5 shadow

auth sufficient /lib/security/pam_eps_auth.so

auth required /lib/security/pam_deny.so

aclearcase/" target="_blank" >ccount sufficient /lib/security/pam_unix.so

account required /lib/security/pam_deny.so

password required /lib/security/pam_cracklib.so retry=3

password required /lib/security/pam_eps_passwd.so

password sufficient /lib/security/pam_unix.so nullok use_authtok md5 shadow

password required /lib/security/pam_deny.so

session required /lib/security/pam_limits.so

session required /lib/security/pam_unix.so

  注意上面第一行黑體字表示PAM的eps_auth模塊可以滿足認證需求。第二行黑體字表示PAM 的pam_eps_passwd.so 模塊用來進行密碼管理。

  (3) 將標准密碼轉換為EPS格式

  (4) /etc/pam.d/system-auth 配置文件的模塊pam_eps_passwd.so 將EPS版本的密碼驗證字符串寫入/etc/tpasswd 文件中。 修改 /etc/pam.dpasswd文件如下形式:

auth required /lib/security/pam_stack.so service=system-auth

account required /lib/security/pam_stack.so service=system-auth

password required /lib/security/pam_stack.so service=system-auth

  四、啟動SRP版本下的FTP服務器

  (1)進入SRP源代碼FTP子目錄,分別建立FTP服務器文件和FTP客戶端文件:

#cd /usr/src/redhat/SOURCES/srp-2.2.1/ftp

#make;make install


  (2)建立超級訪問程序/etc/xinetd.d/srp-ftpd 內容如下:

service ftp

{

socket_type = stream

wait = no

user = root

server = /usr/local/sbin/ftpd

log_on_success += DURATION USERID

log_on_failure += USERID

nice = 10

disable = no

}


  (3)使用命令從新啟動xinetd

#killall -USR1 xinetd


  (4)建立/etc/pam.d/telnet 文件,內容如下:

#%PAM-1.0

auth required /lib/security/pam_listfile.so item=user \

sense=deny file=/etc/ftpusers onerr=succeed

auth required /lib/security/pam_stack.so service=srp-ftp

auth required /lib/security/pam_shells.so

account required /lib/security/pam_stack.so service=srp-ftp

session required /lib/security/pam_stack.so service=srp-ftp


  到此為止現在就建立了一個使用SRP服務的FTP服務器。首先在本地進行試驗。下面是一個典型會話:

$$ /usr/local/bin/ftp localhost

Connected to localhost.intevo.com.

220 k2.intevo.com FTP server (SRPftp 1.3) ready.

SRP accepted as authentication type.

Name (localhost:kabir): cao

SRP Password: xxxxxxxx

SRP authentication succeeded.

Using cipher CAST5_CBC and hash function SHA.

200 Protection level set to Private.

232 user kabir authorized by SRP.

230 User kabir logged in.

Remote system type is UNIX.

Using binary mode to transfer file


  如果希望在其他Linux計算機使用FTP登錄到SRP服務器,需要安裝SRP服務支持和SRP客戶機軟件。方法是和在SRP服務器端相同的。

  使用SRP的FTP服務中非常好下面的密碼公式:

NONE (1)

BLOWFISH_ECB (2)

BLOWFISH_CBC (3)

BLOWFISH_CFB64 (4)

BLOWFISH_OFB64 (5)

CAST5_ECB (6)

CAST5_CBC (7)

CAST5_CFB64 (8)

CAST5_OFB64 (9)

DES_ECB (10)

DES_CBC (11)

DES_CFB64 (12)

DES_OFB64 (13)

DES3_ECB (14)

DES3_CBC (15)

DES3_CFB64 (16)

DES3_OFB64 (17)


  SRP也支持MD5和SHA哈希函數。缺省情況下SRP使用CAST5_CBC 密碼和SHA 函數。要使用其它格式的密碼。可以使用-c或-h選項。

#/usr/local/bin/ftp -c blowfish_cfb64 “ip地址”


  上面的命令使用BLOWFISH_CFB64 密碼而不是缺省的CAST5_CBC。

#/usr/local/bin/ftp –h md5 “ip地址”


  上面的命令使用MD5函數而不是缺省的SHA函數。

  五、在非Linux平台上使用SRP客戶機

  SRP同樣支持其他流行的操作系統(Unix、BSD、Winodws、MacOS)。Kermit 95是一個工作在Windows 9x, ME, NT, and 2000, XP和 OS/2操作系統下的SRP客戶機。詳細情況前查看相關網址:http://www.columbia.edu/kermit/k95.html 。

  總結:詳細的SRP工作原理可以在SRP的有關站點發現。地址是http://srp.stanford.edu/srp,在這裡你可以得到有關協議的在線說明http://srp.standford.edu/srp/design.html或者是一個出版的關於SRP的技術白皮書http://srp.standford.edu/srp/ftp。 以上提供了相對OPENSSH更加安全快捷的FTP登錄遠程Linux服務器的方法,基於SRP服務 FTP應用與其他網絡應用一樣屬於客戶機/服務器模型,一旦連通後,客戶機可以享有服務器所提供的一切服務。

Copyright © Linux教程網 All Rights Reserved