歡迎您光臨本站 註冊首頁

使用vsftpd構建安全的FTP服務

←手機掃碼閱讀     火星人 @ 2014-03-29 , reply:0

來源:中科院計算所
FTP協議的安全隱患不能成為拒絕使用FTP的原因,本文介紹一種構建安全FTP服務的方法。

  文件傳輸協議(FTP)是互聯網上用戶使用頻率很高的一種協議,它基於客戶機/伺服器(client/server)架構,主要用來提供用戶的文件傳輸以及上傳下載功能。然而,由於該協議在最初的設計過程當中沒有充分考慮到網路日益發展的今天可能存在的諸多安全性問題,因而存在著很大的安全隱患。本文將對該文件傳輸協議進行原理介紹,並講述如何在Linux環境下,使用vsftpd(very secure FTP daemon)來構建安全的FTP應用。

  vsftpd的特性

  vsftpd 是一個基於GPL發布的類Unix類操作系統上運行的伺服器的名字(是一種守護進程),它可以運行在諸如Linux、BSD、Solaris、HP-UX以及IRIX上面。它支持很多其他傳統的FTP伺服器所不支持的特徵。它具有如下特點:非常高的安全性、帶寬限制、良好的擴展性 、支持創建虛擬用戶、支持IPv6、支持虛擬IP、高速、穩定。



vsftpd的名字代表「very secure FTP daemon」,它的開發者Chris Evans考慮的首要問題就是數據傳輸的安全性。所以,在上述所有的特性當中,較高的安全性是處於最重要的地位。vsftpd比其他諸如Wu-ftpd和Proftpd之類的FTP伺服器更加優越。另外,在速度方面,據統計,使用ASCⅡ模式下載數據的速度是Wu-ftpd的兩倍。在Linux2.4系列版本的內核下,千兆乙太網的下載速度可以達到86MB/S;在穩定性方面,根據ftp.redhat.com的數據,它可以支持15000個併發用戶,所以其總體性能也是非常高的。

  vsftpd的安裝過程

  vsftpd 守護程序的安裝相當簡單,在每個主要發行版中都可以找到vsftpd的RPM包,很多情況下,它已經被裝上了。如果沒有的話,源代碼可以在網站:http://vsftpd.beasts.org/上找到,下載后執行手工安裝。目前最新的版本為:vsftpd2.0.3。

  得到源代碼並解開tar包后,進入新建的目錄,並運行make。下面是進行手工安裝的示例:

# tar xzvf vsftpd-2.0.3.tar.gz

# cd vsftpd-2.0.3

# make



  這之前我們應該看看用戶「nobody」和目錄「/usr/share/empty」是否存在,如果需要的話我們就新建這一對用戶和目錄。如果我們允許用戶匿名訪問,用戶「ftp」和目錄「var/ftp」也需要創建。使用如下兩個命令完成:

# mkdir /var/ftp

# useradd -d /var/ftp ftp



  由於安全原因,目錄 「/var/ftp」 不應該屬於用戶 「ftp」,也不應該有寫許可權。如果用戶已經存在的話,用下面的兩個命令,我們可以改變目錄的所有者並去掉其他用戶的寫許可權:

# chown root.root /var/ftp

# chmod og-w /var/ftp



  達到了所有的先決條件后,我們可以安裝 vsftp-daemon 了。

# make install


  這樣,就完成了vsftpd的安裝,當然,這個安裝過程比較複雜,在我們現在使用的Linux系統當中,很多都是使用RPM包來安裝的,這樣簡單快捷,下面介紹如何通過使用RPM包來安裝vsftpd。

  在RedHat Linux9中自帶了vsftpd,下面是安裝的步驟:

  1. 首先查看是否安裝了vsftpd,如果已經安裝,則可以直接使用。

# rpm - q|grep vsftpd


  2. 沒有安裝的話,將下載來的vsftpd-1.1.3-8.i386.rpm的RPM包進行安裝。

# rpm - vh vsftpd-1.1.3-8.i386.rpm


  通過以上兩步,就能順利地完成安裝過程。

  配置文件介紹

  配置文件的路徑為 /etc/vsftpd.conf。和Linux系統中的大多數配置文件一樣,vsftpd的配置文件中以#開始註釋,下面對配置文件的重要內容選項進行詳細的介紹,合理的使用配置文件是保證FTP安全傳輸的前提。

  查看配置文件:

#vi /etc/vsftpd.conf


  設置是否允許匿名訪問:

# Anonymus FTP-access permitted? YES/NO

anonymous_enable=NO



  設置是否允許匿名上傳文件:

# Permit anonymus upload? YES/NO

anon_upload_enable=NO



  設置是否運允許匿名建立目錄:

# Permission for anonymus users to make new directories? YES/NO

anon_mkdir_write_enable=NO



  設置是否允許匿名用戶進行刪除或者改名等操作:

# Permission for anonymus users to do other write operations - like renaming or deleting? YES/NO

anon_other_write_enable=NO



  設置是否允許本地用戶登錄:

# Log on by local users permitted? YES/NO

local_enable=YES



  設置是否將本地用戶鎖定在主目錄:

# Shall local users be locked into their home directory? YES/NO

chroot_local_user=YES



  設置最高傳輸速度:

# Highest permitted data transfer rate in bytes per second for local logged on users. Default = 0 (unlimited)

local_max_rate=7200



  設置是否允許通常的寫操作:

# General write permission? YES/NO

write_enable=YES



  設置是否在改變目錄后發送消息:

# Enable messages when changing directories? YES/NO

dirmessage_enable=YES



  設置伺服器向登錄客戶端發送的歡迎信息:

# Welcome banner at users logon.

ftpd_banner="Welcome to neo5k's FTP service."



  設置是否激活日誌功能:

# Activate logging? YES/NO

xferlog_enable=YES



  設置是否對所有的FTP操作作日誌,如果設置是,則可能產生巨大的數據:

# Logging of all FTP activities? YES/NO

# Careful! This can generate large quantities of data.

log_ftp_protocol=NO



  設置是否只允許在埠20建立連接:

# Confirm connections are established on port 20 (ftp data) only. YES/NO

connect_from_port_20=YES



  設置無任何操作的超時時間:

# Timeout during idle sessions

idle_session_timeout=600



  設置數據連接的超時時間:

# Data connection timeout

data_connection_timeout=120



  設置訪問所使用的PAM:

# Access through Pluggable Authentication Modules (PAM)

pam_service_name=vsftpd



  設置工作模式是否為獨立模式:

# Standalone operation? YES/NO - depending on operation mode (inetd, xinetd, Standalone)

# The author's FTP service is being startet with xinetd, therefore the value here is NO.

listen=YES



  設置是否使用tcp_wrappers作為主機訪問控制方式:

tcp_wrappers =YES


  啟動 FTP 服務

  啟動vsftpd可以採用三種方式:inetd、xinetd和standalone(獨立)工作模式。由於目前使用的xinetd擴展了inetd,它比inetd更加高效和實用,包括諸如請求記錄、訪問控制、將業務與網路介面綁定等改進,所以通常使用xinetd,本文將介紹xinetd以及standalone兩種啟動方式。

  1. xinetd方式啟動

  使用該啟動方式,在上述的配置文件當中,應該將listen=YES設為list=NO,並且將tcp_wrappers=YES設為tcp_wrappers=NO,並且使用如下命令將vsftpd的文檔目錄拷貝到/etc/xinetd.d目錄下:

# cp /usr/share/doc/vsftpd-1.1.3/vsftpd.xinetd /etc/xinetd.d/vsftpd

# vi /etc/xinetd.d/vsftpd



  將disable=yes設為disable=no即可。一個關於該啟動方式的的配置文件如下所示:

# cat /etc/xinetd.d/vsftpd

# default: on

# description: The vsftpd FTP server serves FTP connections. It uses \

# normal, unencrypted usernames and passwords for authentication.

service ftp

{

socket_type = stream

wait = no

user = root

server = /usr/sbin/vsftpd

nice = 10

disable = no

flags = IPv4

}



  現在,就可以使用如下命令來啟動vsftpd了。

  停止獨立運行的vsftpd:

# service vsftpd stop


  重新啟動xinetd守護進程:

# service xinetd restart


  另外一點需要說明的是:如果想在系統啟動時就自動運行該服務,那麼需要使用setup命令,在網路服務配置的項目中,選中vsftpd守護進程即可。

  2. 獨立工作模式啟動

  vsftpd也可以工作在獨立工作模式下。這樣,我們需要再次打開「/etc/vsftpd.conf」做如下修改:

# Shall the vsftp daemon run in standalone operation? YES/NO

listen=YES



  在這項設置之後,守護進程可以用如下方式啟動:

# service vsftpd start


  同樣地,在獨立工作模式下,我們必須保證vsftpd沒有被xinetd啟動,這個可以使用如下命令來進行檢查:

# pstree|grep vsftpd


  測試運行

  在成功地安裝和配置之後,我們將對該FTP伺服器進行簡單的測試運行,示例如下:

# ftp liyang

Connected to liyang.

220 (vsFTPd 1.1.3)

Name (liyang:root): anonymous

331 Please specify the password.

Password:

230 Login successful. Have fun.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> ls -l

229 Entering Extended Passive Mode

150 Here comes the directory listing

drwxr-xr-x 20 500 100 400 Jun 04 16:14 mp3

drwxr-xr-x 3 500 100 464 Feb 09 21:28 test

drwxr-xr-x 57 500 100 5143 Jun 15 19:23 working

226 Directory send OK.



  上述過程測試了FTP伺服器的成功運行,並且瀏覽了伺服器上的幾個文件夾。我們注意到,vsftpd的安裝和配置都很簡單,但它提供了很多特性和很高的安全性。一個非常顯著的例子就是vsftpd是在chroot模式下工作的。chroot模式就是登錄的用戶單獨指定一個固定的目錄,這個目錄一般是用戶登錄的主目錄。在使用過程當中,用戶被限制不能訪問除那個目錄之外的其他任何程序和文件,所以這樣就使得在系統中潛在的攻擊者被嚴格地和其他用戶目錄空間隔離開來,從而不能破壞提供服務的FTP伺服器。這樣即算出現攻擊事件,也極大地縮小了受損的範圍空間和大部分的程序文件,從而提高了系統的安全性。

  當然,本文僅僅是對vsftpd的配置使用和啟動作了簡單的介紹,這個伺服器還提供了大量的可供設置的選項,包括基本性能的配置、安全選項的使用、基於本地用戶的訪問控制、基於主機的訪問控制策略等等,這些都需要用戶在長期的實踐過程當中加以摸索和總結,才能極大地發揮這個FTP伺服器的性能和安全效果。

[火星人 ] 使用vsftpd構建安全的FTP服務已經有679次圍觀

http://coctec.com/docs/linux/show-post-204650.html