歡迎您光臨本站 註冊首頁

如何用Linux構建起最好FTP伺服器

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

  在眾多網路應用中,FTP(文件傳輸協議)有著非常重要的地位。Internet中一個十分重要的資源就是軟體資源,而各種各樣的軟體資源大多數都放在 FTP伺服器中。與大多數Internet服務一樣,FTP也是一個客戶機/伺服器系統。用戶通過一個支持FTP協議的客戶機程序,連接到主機上的FTP 伺服器程序。用戶通過客戶機程序向伺服器程序發出命令,伺服器程序執行用戶發出的命令,並將執行結果返回給客戶機。FTP服務可以根據服務對象的不同分為兩類:系統FTP伺服器只允許系統上的合法用戶使用;匿名FTP伺服器(Anonymous FTP Server)允許任何人登錄到FTP伺服器去獲取文件。

  FTP的數據傳輸模式針對FTP數據連接而言,分為主動傳輸模式、被動傳輸模式和單埠傳輸模式三種。

  1.主動傳輸模式

  當FTP的控制連接建立,客戶提出目錄列表、傳輸文件時,客戶端發出PORT命令與伺服器進行協商,FTP伺服器使用一個標準埠20作為伺服器端的數據連接埠(ftp-data),與客戶建立數據連接。埠20隻用於連接源地址是伺服器端的情況,並且埠20沒有監聽進程來監聽客戶請求。

  在主動傳輸模式下,FTP的數據連接和控制連接方向相反,由伺服器向客戶端發起一個用於數據傳輸的連接。客戶端的連接埠由伺服器端和客戶端通過協商確定。

  2.被動傳輸模式

  當FTP的控制連接建立,客戶提出目錄列表、傳輸文件時,客戶端發送PASV命令使伺服器處於被動傳輸模式,FTP伺服器等待客戶與其聯繫。FTP伺服器在非20埠的其它數據傳輸埠上監聽客戶請求。

  在被動傳輸模式下,FTP的數據連接和控制連接方向一致,由客戶端向伺服器發起一個用於數據傳輸的連接。客戶端的連接埠是發起該數據連接請求時使用的埠。當FTP客戶在防火牆之外訪問FTP伺服器時,需要使用被動傳輸模式。

  3.單埠模式

  除上述兩種模式之外,還有一種單埠模式。該模式的數據連接請求由FTP伺服器發起。使用該傳輸模式時,客戶端的控制連接埠和數據連接埠一致。因為這種模式無法在短時間連續輸入數據、傳輸命令,因此並不常用。

  Linux下有很多可用的FTP伺服器,其中比較流行的有WU-FTP(Washington University FTP)和VSFTP。Red Hat 8.0中自帶了WU-FTP和VSFTP兩個軟體。WU-FTP是一個著名的FTP伺服器軟體,它功能強大,能夠很好地運行於眾多Unix操作系統中。不過作為後起之秀的VSFTP越來越流行,在Red Hat 9.0發行版中就只帶有VSFTP。

  VSFTP中VS的意思是「Very Secure」。從名稱可以看出,從一開始,軟體的編寫者就非常注重其安全性。除與生俱來的安全性外,VSFTP還具有高速、穩定的性能特點。在穩定性方面,VSFTP可以在單機(非集群)上支持4000個以上的併發用戶同時連接。據ftp.redhat.com的數據,VSFTP最多可以支持15000 個併發用戶。

快速構建FTP伺服器

  FTP伺服器實現的基本功能是上傳下載,下面就分幾個步驟來搭建一個可以實現下載功能的簡易FTP伺服器。

  1.安裝FTP伺服器

  如果在安裝系統時沒有選擇安裝FTP伺服器,可以通過Red Hat 9.0中的「添加/刪除應用程序」工具進行安裝。具體方法是,選擇「主選單」→「系統設置」→「添加/刪除應用程序」,在彈出的界面中選中FTP伺服器,單擊「更新」即可。

  如果無法確認是否安裝了該軟體,可以使用以下命令查看:
CODE:
#rpm -qa|grep vsftpd vsftpd-1.1.3-8

  2.啟動FTP伺服器

  套用Red Hat 9.0的預設範例直接啟動VSFTP。
CODE:
# /sbin/service vsftpd start

  為vsftpd啟動vsftpd: [確定]

  3.在/var/ftp/pub目錄下創建一個名為test.txt的文件

  文件內容為「This is a test file」。

  4.測試

  使用FTP客戶端登錄到本地伺服器,然後以匿名身份(anonymous)登錄:
CODE:
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.1.3)
Name (127.0.0.1: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伺服器。可以顯示伺服器目錄列表如下:
CODE:
ftp> ls
227 Entering Passive Mode (127,0,0,1,63,15)
drwxr-xr-x 2 0 0 4096 Dec 04 01:35 pub
226 Directory send OK.

  切換到pub目錄下,並顯示目錄內容,可以找到剛才創建的文件test.txt:
CODE:
ftp> cd pub
250 Directory successfully changed.
ftp> ls
227 Entering Passive Mode (127,0,0,1,232,34)
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 21 Dec 04 01:35 test.txt
226 Directory send OK.

  下載test.txt文件:
CODE:
ftp> mget test.txt
mget test.txt? y
227 Entering Passive Mode (127,0,0,1,186,210)
150 Opening BINARY mode data connection for test.txt (21 bytes).
226 File send OK.
21 bytes received in 0.0108 secs (1.9 Kbytes/sec)

  查看本機目錄內容,可以看到test.txt已成功下載到本機。
CODE:
ftp> !ls
a EIO_Binders initrd mnt proc tftpboot ylg.txt
bin etc lib mymnt root tmp
boot home lost+found myshare sbin usr
dev id_dsas.pub misc opt test.txt var

  嘗試上傳名為ylg.txt的文件,可以看到請求被拒絕了。
CODE:
ftp> put ylg.txt
local: ylg.txt remote: ylg.txt
227 Entering Passive Mode (127,0,0,1,243,10)
550 Permission denied.

  退出登錄:

  ftp> bye

  221 Goodbye.

  由測試可以看出,已經可以下載文件,但不能上傳文件(也不能在伺服器上創建目錄和文件)。實際上這是一個專門提供下載服務的匿名FTP伺服器。

  從上面的步驟可以看出,並不需要做什麼配置就可以完成一個簡易FTP伺服器的架設。這是因為Red Hat已經配置好一個預設的FTP伺服器。不過在實際應用中,大部分情況下這個簡易的伺服器並不能滿足需求。

進一步配置FTP伺服器

  下面將創建一個能夠滿足常用需求的FTP伺服器。實際應用中,FTP伺服器一般要同時提供上傳和下載功能。此外,出於安全考慮,還需要有用戶身份驗證、用戶許可權設置及空間管理等。下面就來搭建這樣一個FTP伺服器。

  1.創建歡迎語

  如果希望使用者在進入目錄時,能夠看到歡迎語或對本目錄的介紹,可以通過以下方法來實現。

  確定/etc/vsftpd/vsftpd.conf文件中dirmessage_enable=YES,默認情況下,Red Hat 9.0有此設置。接著,在目錄中新增名為.message的文件。本例在/home/ylg目錄下創建一個.message文件,其內容為「歡迎來到我的 FTP站點」。

  2.更換FTP伺服器的默認埠

  將預設的21埠改為2121,這樣做是基於安全的考慮。更改方法為,使用vi打開/etc/vsftpd/vsftpd.conf:#vi /etc/vsftpd/vsftpd.conf

  在文件最後增加如下一行內容:
CODE:
listen_port=2121

  3.取消anonymous登錄的功能

  在vsftpd.conf文件中找到如下一行,並將其值改為「NO」:anonymous_enable=YES

  4.設定使用者不得更改目錄

  這樣做的目的也是基於安全性的考慮。一般情況下,使用者的預設目錄為/home/username。若是不希望使用者在登錄后能夠切換至上一層目錄/home,則可通過以下設置來實現。在/etc/vsftpd/vsftpd.conf文件中找到以下三行內容:
CODE:
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list

  將其改為:
CODE:
chroot_list_enable=YES
# (default follows)
chroot_list_file=/etc/vsftpd/chroot_list

  新增一個文件/etc/vsftpd/chroot_list,文件內容為兩個用戶名:

  ylg

  user1

  5.針對不同的使用者限制不同的速度

  假設用戶ylg所能使用的最高速度為500Kb/s,用戶user1所能使用的最高速度為250Kb/s,可以通過以下方法設置。在/etc/vsftpd/vsftpd.conf文件尾部新增以下一行:
CODE:
user_config_dir=/etc/vsftpd/userconf

  增加一個名為/etc/vsftpd/userconf的目錄:
CODE:
#mkdir /etc/vsftpd/userconf

  在/etc/vsftpd/userconf下新增一個名為ylg的文件,其內容如下所示:
CODE:
local_max_rate=500000

  在/etc/vsftpd/userconf目錄下新增一個名為user1的文件,其內容如下所示:
CODE:
local_max_rate=250000

  VSFTP對於速度的限制範圍大概在80%到120%之間,也就是限制最高速度為100Kb/s,但實際的速度可能在80Kb/s到120Kb/s之間。如果頻寬不足,數值會低於此限制。6.對於每一個聯機用戶,都以獨立的進程來運行。一般情況下,在啟動VSFTP時,只會看到一個名為vsftpd的進程在運行。但若是讀者希望每一個聯機用戶都能以獨立的進程來呈現,則可通過在/etc/vsftpd/vsftpd.conf文件中增加以下一行來實現:
CODE:
setproctitle_enable=YES

  7.保存/etc/vsftpd/vsftpd.conf文件,然後重新啟動vsftpd:
CODE:
#service vsftpd restart

  8.測試剛創建的FTP伺服器

  以預設方式登錄會被拒絕,因為此時的默認埠號已經更改為2121,所以登錄時需指定埠。
CODE:
# ftp 127.0.0.1

ftp: connect: Connection refused

  此時也不能再使用匿名方式登錄:
CODE:
# ftp 127.0.0.1 2121
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.1.3)
Name (127.0.0.1:root): anonymous
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.

  如果以用戶ylg則可以成功登錄(指定埠2121),並顯示歡迎信息:
CODE:
# ftp 127.0.0.1 2121
Connected to 127.0.0.1 (127.0.0.1).
220 (vsFTPd 1.1.3)
Name (127.0.0.1:root): ylg
331 Please specify the password.
Password:
230-歡迎來到我的FTP站點
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.

  因為在設置中設定了不能切換目錄,所以下列命令無法正確執行:
CODE:
ftp> cd /home

550 Failed to change directory.

  再來測試一下上傳和下載。首先下載伺服器目錄中的test.txt文件:
CODE:
ftp> get test.txt
local: test.txt remote: test.txt
227 Entering Passive Mode (127,0,0,1,243,215)
150 Opening BINARY mode data connection for test.txt (21 bytes).
226 File send OK.
21 bytes received in 0.00308 secs (6.7 Kbytes/sec)

  可以通過!ls命令看到本機目錄中已成功下載該文件。然後上傳本機目錄中的ylg.txt文件到伺服器:
CODE:
ftp> put ylg.txt
local: ylg.txt remote: ylg.txt
227 Entering Passive Mode (127,0,0,1,133,248)
150 Ok to send data.
226 File receive OK.
19 bytes sent in 0.0401 secs (0.46 Kbytes/sec)

  用ls命令查看伺服器目錄,會發現該文件已成功上傳。

  為了測試不同連機用戶使用的是不同進程,可以使用ps -ef指令,顯示如下所示:
CODE:
# ps -ef|grep ftp
root 12972 1356 0 13:44 pts/1 00:00:00 ftp 127.0.0.1 2121
nobody 12973 12908 0 13:44 ? 00:00:00 [vsftpd]
ylg 12975 12973 0 13:44 ? 00:00:00 [vsftpd]
user1 13013 13011 0 13:46 ? 00:00:00 [vsftpd]
root 13041 13015 0 13:47 pts/4 00:00:00 grep ftp

  到現在為止,一個基本可以滿足普通使用需求的FTP伺服器就已經架設完成。

  在實際應用中,有時為了增加安全性,會將FTP伺服器置於防火牆之後。如本文開頭所述,被動傳輸模式適合於帶有防火牆的情況。下面就來創建一個防火牆后的FTP伺服器,該伺服器FTP埠為2121,數據傳輸埠為2020。

  執行以下兩行指令,只允許2121和2020埠打開,其餘埠關閉:用Linux構建最好的FTP伺服器
CODE:
#iptables -A INPUT -p tcp -m multiport --dport 2121,2020 -j ACCEPT

#iptables -A INPUT -p tcp -j REJECT --reject-with tcp-reset

  修改/etc/vsftpd/vsftpd.conf文件,在文本最後添加以下兩行:
CODE:
listen_port=2121

ftp_data_port=2020

  重新啟動vsftpd:
CODE:
#service vsftpd restart

  有時希望直接在/etc/hosts.allow中定義允許或拒絕某一源地址,可以通過以下配置來實現。先確保/etc/vsftpd/vsftpd.conf中tcp_wrappers=YES,Red Hat 9.0中,這是默認值。重新啟動vsftpd:
CODE:
#service vsftpd restart

  假設提供168.192.2.1和210.31.8.1到210.31.8.254的連接,則可對/etc/hosts.allow進行如下設定:
CODE:
vsftpd : 168.192.2.1 210.31.8. : allow


[火星人 ] 如何用Linux構建起最好FTP伺服器已經有473次圍觀

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