如何使用Linux構建高效FTP伺服器
在網路應用中FTP有著非常重要的地位,是十分重要的軟體資源,那麼你知道在linux字型中如何構建高效FTP伺服器嗎?接下來的內容中小編將介紹Linux構建高效FTP伺服器的方法。
在眾多網路應用中,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伺服器,單擊“更新”即可。
如果無法確認是否安裝了該軟體,可以使用以下命令檢視:
#rpm -qa|grep vsftpd
vsftpd-1.1.3-8
2.啟動FTP伺服器
套用Red Hat 9.0的預設範例直接啟動VSFTP。
# /sbin/service vsftpd start
為vsftpd啟動vsftpd: [確定]
3.在/var/ftp/pub目錄下建立一個名為test.txt的檔案,檔案內容為“This is a test file”。
4.測試
使用FTP客戶端登入到本地伺服器,然後以匿名身份(anonymous)登入:
# 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伺服器。可以顯示伺服器目錄列表如下:
ftp> ls
227 Entering Passive Mode (127,0,0,1,63,15)
150 Here comes the directory listing.
drwxr-xr-x? 2 0? 0? 4096 Dec 04 01:35 pub
226 Directory send OK.
切換到pub目錄下,並顯示目錄內容,可以找到剛才建立的檔案test.txt:
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檔案:
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已成功下載到本機。
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的檔案,可以看到請求被拒絕了。
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
在檔案最後增加如下一行內容:
listen_port=2121
3.取消anonymous登入的功能。在vsftpd.conf檔案中找到如下一行,並將其值改為“NO”:
anonymous_enable=YES
4.設定使用者不得更改目錄。這樣做的目的也是基於安全性的考慮。一般情況下,使用者的預設目錄為/home/username。若是不希望使用者在登入後能夠切換至上一層目錄/home,則可透過以下設定來實現。在/etc/vsftpd/vsftpd.conf檔案中找到以下三行內容:
#chroot_list_enable=YES
# (default follows)
#chroot_list_file=/etc/vsftpd.chroot_list
將其改為:
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檔案尾部新增以下一行:
user_config_dir=/etc/vsftpd/userconf
增加一個名為/etc/vsftpd/userconf的目錄:
#mkdir /etc/vsftpd/userconf
在/etc/vsftpd/userconf下新增一個名為ylg的檔案,其內容如下所示:
local_max_rate=500000
在/etc/vsftpd/userconf目錄下新增一個名為user1的檔案,其內容如下所示:
local_max_rate=250000
VSFTP對於速度的限制範圍大概在80%到120%之間,也就是限制最高速度為100Kb/s,但實際的速度可能在80Kb/s到120Kb/s之間。如果頻寬不足,數值會低於此限制。
6.對於每一個聯機使用者,都以獨立的程式來執行。一般情況下,在啟動VSFTP時,只會看到一個名為vsftpd的程式在執行。但若是讀者希望每一個聯機使用者都能以獨立的程式來呈現,則可透過在/etc/vsftpd/vsftpd.conf檔案中增加以下一行來實現:
setproctitle_enable=YES
7.儲存/etc/vsftpd/vsftpd.conf檔案,然後重新啟動vsftpd:
#service vsftpd restart
8.測試剛建立的FTP伺服器。
以預設方式登入會被拒絕,因為此時的預設埠號已經更改為2121,所以登入時需指定埠。
# ftp 127.0.0.1
ftp: connect: Connection refused
此時也不能再使用匿名方式登入:
# 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),並顯示歡迎資訊:
# 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.
因為在設定中設定了不能切換目錄,所以下列命令無法正確執行:
ftp> cd /home
550 Failed to change directory.
再來測試一下上傳和下載。首先下載伺服器目錄中的test.txt檔案:
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檔案到伺服器:
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指令,顯示如下所示:
# 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埠開啟,其餘埠關閉:
#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檔案,在文字最後新增以下兩行:
listen_port=2121
ftp_data_port=2020
重新啟動vsftpd:
#service vsftpd restart
有時希望直接在/etc/hosts.allow中定義允許或拒絕某一源地址,可以透過以下配置來實現。先確保/etc/vsftpd/vsftpd.conf中tcp_wrappers=YES,Red Hat 9.0中,這是預設值。重新啟動vsftpd
#service vsftpd restart
假設提供168.192.2.1和210.31.8.1到210.31.8.254的連線,則可對/etc/hosts.allow進行如下設定:
vsftpd : 168.192.2.1 210.31.8. : allow
ALL : ALL : DENY
配置虛擬使用者FTP
上面配置的FTP伺服器有一個特點,就是FTP伺服器的使用者本身也是系統使用者。這顯然是一個安全隱患,因為這些使用者不僅能夠訪問FTP,也能夠訪問其它的系統資源。如何解決這個問題呢?答案就是建立一個虛擬使用者的FTP伺服器。虛擬使用者的特點是隻能訪問伺服器為其提供的FTP服務,而不能訪問系統的其它資源。所以,如果想讓使用者對FTP伺服器站內具有寫許可權,但又不允許訪問系統其它資源,可以使用虛擬使用者來提高系統的安全性。
在VSFTP中,認證這些虛擬使用者使用的是單獨的口令庫檔案(pam_userdb),由可插入認證模組(PAM)認證。使用這種方式更加安全,並且配置更加靈活。
下面介紹配置過程。
1.生成虛擬使用者口令庫檔案。為了建立此口令庫檔案,先要生成一個文字檔案。該檔案的格式如下,單數行為使用者名稱,偶數行為口令:
#vi account.txt
ylg
1234
zhanghong
4321
gou
5678
2.生成口令庫檔案,並修改其許可權:
#db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db
#chmod 600 /etc/vsftpd/account.db
3.新建一個虛擬使用者的PAM檔案。加上如下兩行內容:
#vi /etc/pam.d/vsftp.vu
auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account
account required /lib/security/pam_userdb.so db=/etc/vsftpd/account
4.建立虛擬使用者,設定該使用者所要訪問的目錄,並設定虛擬使用者訪問的許可權:
#useradd -d /ftpsite virtual_user
#chmod 700 /ftpsite
經過該步驟的設定,/ftpsite就是virtual_user使用者的主目錄,該使用者也是/ftpsite目錄的擁有者。除root使用者之外,只有該使用者具有對該目錄的讀、寫和執行的許可權。
5.生成一個測試檔案。先切換至virtual_user使用者身份,然後在/ftpsite目錄下建立一個檔案:
#su -virtual_user
$vi /ftpsite/mytest
This is a test file.
$su - root
6.編輯/etc/vsftpd/vsftpd.conf檔案,使其整個檔案內容如下所示(去掉了註釋內容):
anonymous_enable=NO
local_enable=YES
local_umask=022
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
>
chroot_local_user=YES
ftpd_banner=Welcom to my FTP server.
anon_world_readable_only=NO
guest_enable=YES
guest_username=virtual_user
pam_service_name=vsftp.vu
上面程式碼中,guest_enable=YES表示啟用虛擬使用者;guest_username=virtual則是將虛擬使用者對映為本地使用者,這樣虛擬使用者登入後才能進入本地使用者virtual的目錄/ftpsite;pam_service_name=vsftp.vu指定PAM的配置檔案為vsftp.vu。
7.重新啟動VSFTP
#service vsftpd restart
8.以虛擬使用者gou(Linux中並無該賬號)進行測試:
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcom to my FTP server.
Name (127.0.0.1:root): gou
331 Please specify the password.
Password:
230 Login successful. Have fun.
Remote system type is UNIX.
Using binary mode to transfer files.
測試下載伺服器目錄中的一個檔案mytest:
ftp> get mytest
local: mytest remote: mytest
227 Entering Passive Mode (127,0,0,1,159,19)
150 Opening BINARY mode data connection for mytest (21 bytes).
226 File send OK.
21 bytes received in 0.00038 secs (54 Kbytes/sec)
測試上傳本機目錄中的檔案vsftpd.conf:
ftp> !ls
account.db? chroot_list? k? mytest? userconf? vsftpd.conf
ftp> put vsftpd.conf
local: vsftpd.conf remote: vsftpd.conf
227 Entering Passive Mode (127,0,0,1,117,203)
150 Ok to send data.
226 File receive OK.
4229 bytes sent in 0.00195 secs (2.1e+03 Kbytes/sec)
可以看到,使用沒有系統賬號的虛擬使用者可以成功完成上傳、下載的工作。但該FTP虛擬伺服器只允許虛擬使用者登入,其它系統使用者無法登入,如系統使用者user1不是虛擬使用者,則不能登入該虛擬伺服器。
# ftp 127.0.0.1
Connected to 127.0.0.1 (127.0.0.1).
220 Welcom to my FTP server.
Name (127.0.0.1:root): user1
331 Please specify the password.
Password:
530 Login incorrect.
Login failed.
在虛擬FTP伺服器中,也可以對各個使用者的許可權進行設定。方法是在/etc/vsftpd.conf檔案中新增如下一行:
user_config_dir=使用者配置檔案目錄
然後在使用者配置檔案目錄下建立相應的使用者配置檔案,比如為上述名為gou的使用者建立一個配置檔案(假設配置檔案目錄為/etc/user_config_dir):
#vi /etc/user_config_dir/gou
write_enable=NO
anono_upload_enable=NO
重啟FTP伺服器,這時再使用賬號gou來登入,就已經沒有上傳的許可權
上文就是關於Linux構建高效FTP伺服器的方法介紹,希望能對您有所幫助
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69993754/viewspace-2752796/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 構建FTP伺服器FTP伺服器
- ftp上傳工具下載,ftp上傳工具下載使用教程,Linux如何配置ftp伺服器?FTPLinux伺服器
- TinyWeb–C++構建高效能Web伺服器WebC++伺服器
- Linux伺服器---ftp配置Linux伺服器FTP
- Linux 搭建FTP伺服器LinuxFTP伺服器
- 如何構建一個高效的開發流程
- 【MySQL】如何構建高效能MySQL系統MySql
- 如何構建高效資料流通交易體系
- Linux伺服器---ftp限制ipLinux伺服器FTP
- Linux伺服器---ftp黑名單Linux伺服器FTP
- 如何構建一臺機器學習伺服器機器學習伺服器
- 如何使用webpack構建UeditorWeb
- 經驗分享:我們如何使用AWS構建無伺服器架構 - hypertrack伺服器架構
- 如何構建高效自主的容器雲交付平臺?
- Golang:使用 httprouter 構建 API 伺服器GolangHTTPAPI伺服器
- 構建高效能web之路------web伺服器長連線Web伺服器
- Linux下搭建FTP伺服器教程LinuxFTP伺服器
- Linux伺服器---ftp限制頻寬Linux伺服器FTP
- Linux篇---ftp伺服器的搭建LinuxFTP伺服器
- Linux教學資源伺服器構建Linux伺服器
- 如何構建“高效能”“大小無限”(磁碟)佇列?佇列
- 使用Hudson搭建自動構建伺服器伺服器
- FTP伺服器——使用vsftpd搭建FTP伺服器
- 《高效能Linux伺服器構建實戰Ⅱ》熱銷中,附試讀章節下載Linux伺服器
- 使用 Go 構建高效能檔案上傳器Go
- ftp伺服器軟體,ftp伺服器軟體哪個好,怎麼使用FTP伺服器
- 構建高效的 API 規範API
- 如何搭建免費的ftp伺服器FTP伺服器
- 創業公司如何快速構建高效的監控系統?創業
- 如何高效的構建螢幕適配方案的專案
- 如何構建一個高效的 golang web 開發環境GolangWeb開發環境
- Linux下新增FTP賬號和伺服器、增加密碼和使用者,更改FTP目錄LinuxFTP伺服器加密密碼
- vb如何使用ftp函式,vb如何使用ftp函式要知道這些FTP函式
- 伺服器FTP工具,Windows伺服器FTP工具伺服器FTPWindows
- ftp工具,ftp工具怎麼使用,如何操作?使用教程圖解。FTP圖解
- 如何使用Docker構建前端專案Docker前端
- 如何使用Webpack工具構建專案Web
- 如何使用MySQL Workbench構建ER圖?MySql