1. 程式人生 > 實用技巧 >linux 搭建vsftpd服務詳解

linux 搭建vsftpd服務詳解

FTP服務

FTP 是File Transfer Protocol(檔案傳輸協議)的英文簡稱,而中文簡稱為“文傳協議”。用於Internet上的控制檔案的雙向傳輸。同時,它也是一個應用程式(Application)。基於不同的作業系統有不同的FTP應用程式,而所有這些應用程式都遵守同一種協議以傳輸檔案。在FTP的使用當中,使用者經常遇到兩個概念:"下載"(Download)和"上傳"(Upload)。"下載"檔案就是從遠端主機拷貝檔案至自己的計算機上;"上傳"檔案就是將檔案從自己的計算機中拷貝至遠端主機上。用Internet語言來說,使用者可通過客戶機程序向(從)遠端主機上傳(下載)檔案。

FTP原理

FTP只通過TCP連線,沒有用於FTP的UDP元件。

FTP不同於其他服務的是它使用了兩個埠, 一個數據埠和一個命令埠(或稱為控制埠)。通常21埠是命令埠,20埠是資料埠。當混入主動/被動模式的概念時,資料埠就有可能不是20了。

工作模式 FTP支援兩種模式:

  • Standard (PORT方式,主動方式)

  • Passive (PASV,被動方式)。

Port模式

主動模式下,FTP客戶端從任意的非特殊的埠(N > 1023)連入到FTP伺服器的命令埠--21埠。然後客戶端在N+1(N+1 >= 1024)埠監聽,並且通過N+1(N+1 >= 1024)埠傳送命令給FTP伺服器。伺服器會反過來連線使用者本地指定的資料埠,比如20埠。

以伺服器端防火牆為立足點,要支援主動模式FTP需要開啟如下互動中使用到的埠:

  • FTP伺服器命令(21)埠接受客戶端任意埠(客戶端初始連線)

  • FTP伺服器命令(21)埠到客戶端埠(>1023)(伺服器響應客戶端命令)

  • FTP伺服器資料(20)埠到客戶端埠(>1023)(伺服器初始化資料連線到客戶端資料埠)

  • FTP伺服器資料(20)埠接受客戶端埠(>1023)(客戶端傳送ACK包到伺服器的資料埠)

Passive模式

為了解決伺服器發起到客戶的連線的問題,人們開發了一種不同的FTP連線方式。這就是所謂的被動方式,或者叫做PASV,當客戶端通知伺服器它處於被動模式時才啟用。

在被動方式FTP中,命令連線和資料連線都由客戶端,這樣就可以解決從伺服器到客戶端的資料埠的入方向連線被防火牆過濾掉的問題。當開啟一個FTP連線時,客戶端開啟兩個任意的非特權本地埠(N >; 1024和N+1)。第一個埠連線伺服器的21埠,但與主動方式的FTP不同,客戶端不會提交PORT命令並允許伺服器來回連它的資料埠,而是提交PASV命令。這樣做的結果是伺服器會開啟一個任意的非特權埠(P >; 1024),併發送PORT P命令給客戶端。然後客戶端發起從本地埠N+1到伺服器的埠P的連線用來傳送資料。

對於伺服器端的防火牆來說,必須允許下面的通訊才能支援被動方式的FTP:

  • FTP伺服器命令(21)埠接受客戶端任意埠(客戶端初始連線)

  • FTP伺服器命令(21)埠到客戶端埠(>1023)(伺服器響應客戶端命令)

  • FTP伺服器資料埠(>1023)接受客戶端埠(>1023)(客戶端初始化資料連線到伺服器指定的任意埠)

  • FTP伺服器資料埠(>1023)到客戶端埠(>1023)(伺服器傳送ACK響應和資料到客戶端的資料埠)

主動FTP:

  1. 命令連線:客戶端 >1023埠 -> 伺服器 21埠

  2. 資料連線:客戶端 >1023埠 <- 伺服器 20埠

被動FTP:

  1. 命令連線:客戶端 >1023埠 -> 伺服器 21埠

  2. 資料連線:客戶端 >1023埠 -> 伺服器 >1023埠

下面是主動與被動FTP優缺點的簡要總結:

主動FTP對FTP伺服器的管理有利,但對客戶端的管理不利。因為FTP伺服器企圖與客戶端的高位隨機埠建立連線,而這個埠很有可能被客戶端的防火牆阻塞掉。被動FTP對FTP客戶端的管理有利,但對伺服器端的管理不利。因為客戶端要與伺服器端建立兩個連線,其中一個連到一個高位隨機埠,而這個埠很有可能被伺服器端的防火牆阻塞掉。

幸運的是,有折衷的辦法。既然FTP伺服器的管理員需要他們的伺服器有最多的客戶連線,那麼必須得支援被動FTP。我們可以通過為FTP伺服器指定一個有限的埠範圍來減小伺服器高位埠的暴露。這樣,不在這個範圍的任何埠會被伺服器的防火牆阻塞。雖然這沒有消除所有針對伺服器的危險,但它大大減少了危險。

VSFTPD 軟體

如果你想在你的Linux/Unix伺服器上搭建一個安全、高效能、穩定性好的FTP伺服器,那麼vsftpd可能是你的首選應用。vsftpd意思為“very secure FTP daemon(非常安全的FTP程序)”,是一個基於GPL釋出的類UNIX類作業系統上執行的伺服器的名字(是一種守護程序),可以執行在諸如Linux、BSD、Solaris、HP-UX以及Irix等系統上面。vsftpd支援很多其他傳統的FTP伺服器不支援的良好特性。

最新的vsftpd版本可在其官網獲取:www.vsftpd.org

vsftpd 是“very secure FTP daemon”的縮寫,安全性是它的一個最大的特點。vsftpd 是一個 UNIX 類作業系統上執行的伺服器的名字,它可以執行在諸如 Linux、BSD、Solaris、 HP-UNIX等系統上面,是一個完全免費的、開發原始碼的ftp伺服器軟體,支援很多其他的 FTP 伺服器所不支援的特徵。比如:非常高的安全性需求、頻寬限制、良好的可伸縮性、可建立虛擬使用者、支援IPv6、速率高等。

看看都有哪些網站在使用vsftpd吧:

   ftp.RedHat.com
ftp.SUSE.com
ftp.debian.org
ftp.openbsd.org
ftp.freebsd.org
ftp.gnu.org
ftp.gnome.org
ftp.kde.org
ftp.kernel.org
rpmfind.net
ftp.linux.org.uk
ftp.gimp.org
ftp-stud.fht-esslingen.de
gd.tuwien.ac.at
ftp.sunet.se
ftp.ximian.com
ftp.engardelinux.org
ftp.sunsite.org.uk
ftp.isc.org

什麼是vsftpd

Vsftpd是一種在GPL許可下開放原始碼的FTP伺服器,用於多種UNIX系統和Linux系統。Vsftpd也稱為Very Secure FTP Daemon,它是一種安全、快速、穩定的FTP伺服器,能夠高效地處理大量的併發連線。

Vsftpd的主要特點包括:

  • 提供安全的體系結構,根據任務的最低特權需求單獨執行每個任務。

  • 支援虛擬IP配置,可以在提供一個IP地址的情況下,在域中用該地址建立多個FTP伺服器。

  • 允許配置並使用虛擬使用者,從而與系統使用者賬戶分離。

  • 支援TCP封裝。

  • 允許配置匿名伺服器,使用者可以在不需要身份驗證的情況下上傳和下載檔案。

  • 效能穩定,可以處理大量的併發連線。

  • 可以配置為獨立的伺服器。

  • Vsftpd伺服器支援頻寬控制。

r 真實使用者

這類使用者是指在FTP服務上擁有帳號,即/etc/passwd裡的使用者。當這類使用者登入FTP伺服器的時候,其預設的主目錄就是其帳號命名的目錄。但是,其還可以變更到其他目錄中去。如系統的主目錄等等。

g 來賓使用者

在vsFTP軟體裡沒有這類使用者,但是在FTP伺服器中有,我們往往會給不同的部門或者某個特定的使用者設定一個帳戶。但是,這個賬戶有個特點,就是其只能夠訪問自己的主目錄。伺服器通過這種方式來保障FTP服務上其他檔案的安全性。這類帳戶,在Vsftpd軟體中就叫做Guest使用者。擁有這類使用者的帳戶,只能夠訪問其主目錄下的目錄,而不得訪問主目錄以外的檔案。

a 匿名使用者

Anonymous(匿名)使用者,這也是我們通常所說的匿名訪問。這類使用者是指在FTP伺服器中沒有指定帳戶,但是其仍然可以進行匿名訪問某些公開的資源。在組建FTP伺服器的時候,我們就需要根據使用者的型別,對使用者進行歸類。預設情況下,Vsftpd伺服器會把建立的所有帳戶都歸屬為Real使用者。但是,這往往不符合企業安全的需要。因為這類使用者不僅可以訪問自己的主目錄,而且,還可以訪問其他使用者的目錄。這就給其他使用者所在的空間帶來一定的安全隱患。所以,企業要根據實際情況,修改使用者所在的類別。

案例:搭建一個真實使用者訪問的vsftpd 伺服器

1. rpm -ivhvsftpd-3.0.2-22.el7.x86_64.rpm

或者用yum -y install vsftpd

2. 建立一個使用者用來訪問ftp伺服器

useradd -s /sbin/nologin test -M

passwd test 建立登入密碼

-s /sbin/nologin 是確定這個使用者不能登入系統,不作為系統使用者,-M是不在/home目錄下生成使用者檔案

3.建立使用者目錄

mkdir /home/ftp  建立ftp訪問目錄

useradd -d /home/ftp test

4. 更改ftp訪問目錄的使用者名稱和使用者組

chown -R test.test /home/ftp

這個目錄預設是root ,我們的使用者test是無法訪問的

5. 配置/etc/vsftpd/vsftpd.conf

anonymous_enable=NO  關掉匿名訪問

chroot_local_user=YES  是否將所有使用者限制在主目錄,YES為啟用 NO禁用.(該項預設值是NO,即在安裝vsftpd後不做配置的話,ftp使用者是可以向上切換到要目錄之外的)

allow_writeable_chroot=YES  配置檔案中allow_writeable_chroot=YES無法識別,如果不新增的話檔案無法上傳,報錯550 Permission denied

listen_port=21  監聽埠

pasv_enable=YES  開啟被動模式
pasv_min_port=30000  被動模式埠範圍
pasv_max_port=31000

userlist_enable=YES  設定只允許登入的使用者賬號,當vsftpd.conf配置檔案中包括以下設定時,只有vsftpd.user_list檔案中的使用者賬號能夠進行FTP登入

userlist_deny=NO

userlist_file=/etc/vsftpd/vsftpd.user_list

6. 將test使用者新增進訪問控制列表:test > /etc/vsftpd/vsftpd.user_list

7. 關掉selinux

setenforce 0

8.防火牆埠設定

firewall-cmd --permanent --add-port=21/tcp
firewall-cmd --permanent --add-port=30000-31000/tcp
firewall-cmd --reload

9. 重啟服務:service vsftpd restart

10. 訪問:可以通過域名訪問;命令列訪問;資料夾訪問

這邊以命令訪問為例:

瞭解vsftpd的配置檔案

配置檔案說明
/etc/vsftpd/vsftpd.conf 主配置檔案
/usr/sbin/vsftpd Vsftpd的主程式
/etc/rc.d/init.d/vsftpd 啟動指令碼
/etc/pam.d/vsftpd PAM認證檔案(此檔案中file=/etc/vsftpd/ftpusers欄位,指明阻止訪問的使用者來自/etc/vsftpd/ftpusers檔案中的使用者)
/etc/vsftpd/ftpusers 禁止使用vsftpd的使用者列表檔案。記錄不允許訪問FTP伺服器的使用者名稱單,管理員可以把一些對系統安全有威脅的使用者賬號記錄在此檔案中,以免使用者從FTP登入後獲得大於上傳下載操作的權利,而對系統造成損壞。
/etc/vsftpd/user_list 禁止或允許使用vsftpd的使用者列表檔案。這個檔案中指定的使用者預設情況(即在/etc/vsftpd/vsftpd.conf中設定userlist_deny=YES)下也不能訪問FTP伺服器,在設定了userlist_deny=NO時,僅允許user_list中指定的使用者訪問FTP伺服器。
/var/ftp 匿名使用者主目錄;本地使用者主目錄為:/home/使用者主目錄,即登入後進入自己家目錄
/var/ftp/pub 匿名使用者的下載目錄,此目錄需賦權根chmod 1777 pub(1為特殊許可權,使上載後無法刪除)
/etc/logrotate.d/vsftpd.log Vsftpd的日誌檔案
vsftpd的主配置檔案/etc/vsftpd/vsftpd.conf說明

和Linux系統中的大多數配置檔案一樣,vsftpd的配置檔案中以#開始註釋。


是否允許匿名登入FTP伺服器,預設設定為YES允許
# 使用者可使用使用者名稱ftp或anonymous進行ftp登入,口令為使用者的E-mail地址。
# 如不允許匿名訪問則設定為NO
anonymous_enable=YES
# 是否允許本地使用者(即linux系統中的使用者帳號)登入FTP伺服器,預設設定為YES允許
# 本地使用者登入後會進入使用者主目錄,而匿名使用者登入後進入匿名使用者的下載目錄/var/ftp/pub
# 若只允許匿名使用者訪問,前面加上#註釋掉即可阻止本地使用者訪問FTP伺服器
local_enable=YES
# 是否允許本地使用者對FTP伺服器檔案具有寫許可權,預設設定為YES允許
write_enable=YES
# 掩碼,本地使用者預設掩碼為077
# 你可以設定本地使用者的檔案掩碼為預設022,也可根據個人喜好將其設定為其他值
#local_umask=022
# 是否允許匿名使用者上傳檔案,須將全域性的write_enable=YES。預設為YES
#anon_upload_enable=YES
# 是否允許匿名使用者建立新資料夾
#anon_mkdir_write_enable=YES
# 是否啟用目錄歡迎資訊功能
# 當用戶用CMD模式首次訪問伺服器上某個目錄時,FTP伺服器將顯示歡迎資訊
# 預設情況下,歡迎資訊是通過該目錄下的.message檔案獲得的
# 此檔案儲存自定義的歡迎資訊,由使用者自己建立
#dirmessage_enable=YES
# 是否讓系統自動維護上傳和下載的日誌檔案
# 預設情況該日誌檔案為/var/log/vsftpd.log,也可以通過下面的xferlog_file選項對其進行設定
# 預設值為NO
xferlog_enable=YES
# Make sure PORT transfer connections originate from port 20 (ftp-data).
# 是否設定FTP伺服器將啟用FTP資料埠的連線請求
# ftp-data資料傳輸,21為連線控制埠
connect_from_port_20=YES
# 設定是否允許改變上傳檔案的屬主,與下面一個設定項配合使用
# 注意,不推薦使用root使用者上傳檔案
#chown_uploads=YES
# 設定想要改變的上傳檔案的屬主,如果需要,則輸入一個系統使用者名稱
# 可以把上傳的檔案都改成root屬主。whoever:任何人
#chown_username=whoever
# 設定系統維護記錄FTP伺服器上傳和下載情況的日誌檔案
# /var/log/vsftpd.log是預設的,也可以另設其它
#xferlog_file=/var/log/vsftpd.log
# 是否以標準xferlog的格式書寫傳輸日誌檔案
# 預設為/var/log/xferlog,也可以通過xferlog_file選項對其進行設定
# 預設值為NO
#xferlog_std_format=YES
# 以下是附加配置,新增相應的選項將啟用相應的設定
# 是否生成兩個相似的日誌檔案
# 預設在/var/log/xferlog和/var/log/vsftpd.log目錄下
# 前者是wu_ftpd型別的傳輸日誌,可以利用標準日誌工具對其進行分析;後者是vsftpd型別的日誌
#dual_log_enable
# 是否將原本輸出到/var/log/vsftpd.log中的日誌,輸出到系統日誌
#syslog_enable
# 設定資料傳輸中斷間隔時間,此語句表示空閒的使用者會話中斷時間為600秒
# 即當資料傳輸結束後,使用者連線FTP伺服器的時間不應超過600秒。可以根據實際情況對該值進行修改
#idle_session_timeout=600
# 設定資料連線超時時間,該語句表示資料連線超時時間為120秒,可根據實際情況對其個修改
#data_connection_timeout=120
# 執行vsftpd需要的非特權系統使用者,預設是nobody
#nopriv_user=ftpsecure
# 是否識別非同步ABOR請求。
# 如果FTP client會下達“async ABOR”這個指令時,這個設定才需要啟用
# 而一般此設定並不安全,所以通常將其取消
#async_abor_enable=YES
# 是否以ASCII方式傳輸資料。預設情況下,伺服器會忽略ASCII方式的請求。
# 啟用此選項將允許伺服器以ASCII方式傳輸資料
# 不過,這樣可能會導致由"SIZE /big/file"方式引起的DoS攻擊
#ascii_upload_enable=YES
#ascii_download_enable=YES
# 登入FTP伺服器時顯示的歡迎資訊
# 如有需要,可在更改目錄歡迎資訊的目錄下建立名為.message的檔案,並寫入歡迎資訊儲存後
#ftpd_banner=Welcome to blah FTP service.
# 黑名單設定。如果很討厭某些email address,就可以使用此設定來取消他的登入許可權
# 可以將某些特殊的email address抵擋住。
#deny_email_enable=YES
# 當上面的deny_email_enable=YES時,可以利用這個設定項來規定哪些郵件地址不可登入vsftpd伺服器
# 此檔案需使用者自己建立,一行一個email address即可
#banned_email_file=/etc/vsftpd/banned_emails
# 使用者登入FTP伺服器後是否具有訪問自己目錄以外的其他檔案的許可權
# 設定為YES時,使用者被鎖定在自己的home目錄中,vsftpd將在下面chroot_list_file選項值的位置尋找chroot_list檔案
# 必須與下面的設定項配合
#chroot_list_enable=YES
# 被列入此檔案的使用者,在登入後將不能切換到自己目錄以外的其他目錄
# 從而有利於FTP伺服器的安全管理和隱私保護。此檔案需自己建立
#chroot_list_file=/etc/vsftpd/chroot_list
# 是否允許遞迴查詢。預設為關閉,以防止遠端使用者造成過量的I/O
#ls_recurse_enable=YES
# 是否允許監聽。
# 如果設定為YES,則vsftpd將以獨立模式執行,由vsftpd自己監聽和處理IPv4埠的連線請求
listen=YES
# 設定是否支援IPV6。如要同時監聽IPv4和IPv6埠,
# 則必須執行兩套vsftpd,採用兩套配置檔案
# 同時確保其中有一個監聽選項是被註釋掉的
#listen_ipv6=YES
# 設定PAM外掛模組提供的認證服務所使用的配置檔名,即/etc/pam.d/vsftpd檔案
# 此檔案中file=/etc/vsftpd/ftpusers欄位,說明了PAM模組能抵擋的帳號內容來自檔案/etc/vsftpd/ftpusers中
#pam_service_name=vsftpd
# 是否允許ftpusers檔案中的使用者登入FTP伺服器,預設為NO
# 若此項設為YES,則user_list檔案中的使用者允許登入FTP伺服器
# 而如果同時設定了userlist_deny=YES,則user_list檔案中的使用者將不允許登入FTP伺服器,甚至連輸入密碼提示資訊都沒有
#userlist_enable=YES/NO
# 設定是否阻扯user_list檔案中的使用者登入FTP伺服器,預設為YES
#userlist_deny=YES/NO
# 是否使用tcp_wrappers作為主機訪問控制方式。
# tcp_wrappers可以實現linux系統中網路服務的基於主機地址的訪問控制
# 在/etc目錄中的hosts.allow和hosts.deny兩個檔案用於設定tcp_wrappers的訪問控制
# 前者設定允許訪問記錄,後者設定拒絕訪問記錄。
# 如想限制某些主機對FTP伺服器192.168.57.2的匿名訪問,編緝/etc/hosts.allow檔案,如在下面增加兩行命令:
# vsftpd:192.168.57.1:DENY 和vsftpd:192.168.57.9:DENY
# 表明限制IP為192.168.57.1/192.168.57.9主機訪問IP為192.168.57.2的FTP伺服器
# 此時FTP伺服器雖可以PING通,但無法連線
tcp_wrappers=YES

除了上述那些基本設定,我們還可以在vsftpd.conf檔案中新增更多的安全選項。其中幾個常用的如下:

限制最大連線數和傳輸速率

在FTP伺服器的管理中,無論對本地使用者還是匿名使用者,對於FTP伺服器資源的使用都需要進行控控制,避免由於負擔過大造成FTP伺服器執行異常,可以新增以下配置項對FTP客戶機使用FTP伺服器資源進行控制:

  • max_client設定項 用於設定FTP伺服器所允許的最大客戶端連線數,值為0時表示不限制。例如max_client=100表示FTP伺服器的所有客戶端最大連線數不超過100個。

  • max_per_ip設定項 用於設定對於同一IP地址允許的最大客戶端連線數,值為0時表示不限制。例如max_per_ip=5表示同一IP地址的FTP客戶機與FTP伺服器建立的最大連線數不超過5個。

  • local_max_rate設定項 用於設定本地使用者的最大傳輸速率,單位為B/s,值為0時表示不限制。例如local_max_rate=500000表示FTP伺服器的本地使用者最大傳輸速率設定為500KB/s.

  • anon_max_rate設定項 用於設定匿名使用者的最大傳輸速率,單位為B/s,值為0表示不限制。例如ano_max_rate=200000,表示FTP伺服器的匿名使用者最大傳輸速率設定為200KB/s.

指定使用者的許可權設定

vsftpd.user_list檔案需要與vsftpd.conf檔案中的配置項結合來實現對於vsftpd.user_list檔案中指定使用者賬號的訪問控制:

(1)設定禁止登入的使用者賬號

vsftpd.conf配置檔案中包括以下設定時,vsftpd.user_list檔案中的使用者賬號被禁止進行FTP登入:


userlist_enable=YES
userlist_deny=YES

userlist_enable設定項設定使用vsftpd.user_list檔案,userlist_deny設定為YES表示vsftpd.user_list檔案用於設定禁止的使用者賬號。

(2)設定只允許登入的使用者賬號

當vsftpd.conf配置檔案中包括以下設定時,只有vsftpd.user_list檔案中的使用者賬號能夠進行FTP登入:


userlist_enable=YES
userlist_deny=NO

userlist_enable設定項設定使用vsftpd.user_list檔案,userlist _deny設定為NO表示vsftpd.usre_list檔案用於設定只允許登入的使用者賬號,檔案中未包括的使用者賬號被禁止FTP登入。

userlist_denyuserlist_enable選項限制使用者登入FTP伺服器(使用userlist_deny選項和user_list檔案一起能有效阻止root,apache,www等系統使用者登入FTP伺服器,從而保證FTP伺服器的分級安全性)。以下是兩個選項的具體表現形式和兩種搭配使用方式的效果:

配置說明
Userlist_enable=YES Ftpusers中使用者允許訪問;User_list中使用者允許訪問
Userlist_enable=NO Ftpusers中使用者禁止訪問;User_list中使用者允許訪問
Userlist_deny=YES Ftpusers中使用者禁止訪問(登入時可以看到密碼輸入提示,但仍無法訪問);user_list 中使用者禁止訪問
Userlist_deny=NO ftpusers中使用者禁止訪問;user_list中使用者允許訪
Userlist_enable=YES 並且Userlist_deny=YES Ftpusers中使用者禁止訪問;User_list中使用者禁止訪問(登入時不會出現密碼提示,直接被伺服器拒絕)
Userlist_enable=YES 並且Userlist_deny=NO Ftpusers中使用者禁止訪問;User_list中使用者允許訪問

修改預設埠

預設FTP伺服器埠號是21,出於安全目的,有時需修改預設埠號,修改/etc/vsftpd/vsftpd.conf,新增語句(例):

listen_port=4449

語句指定了修改後FTP伺服器的埠號,應儘量大於4000。修改後訪問

#ftp 192.168.57.2 4449

注意這裡需加上正確的埠號了,否則不能正常連線。

設定使用者組

有關FTP使用者和使用者組的重要性,我們在之前介紹vsftpd的時候便已經提到過。這裡主要是簡單的說明使用者組的技術實現,至於具體如何應用,還是具體需求具體對待。


mkdir -p /home/try 遞迴建立新目錄
groupadd try 新建組
useradd -g try -d /home/try try1 新建使用者try1並指定家目錄和屬組
useradd -g try -d /home/try try2 新建使用者try2並指定家目錄和屬組
useradd -g try -d /home/try try3 新建使用者try3並指定家目錄和屬組
passwd try1 為新使用者設密碼
passwd try2 為新使用者設密碼
passwd try3 為新使用者設密碼
chown try1 /home/try 設定目錄屬主為使用者try1
chown .try /home/try 設定目錄屬組為組try
chmod 750 /home/try 設定目錄訪問許可權try1為讀,寫,執行;try2,try3為讀,執行

由於本地使用者登入FTP伺服器後進入自己主目錄,而try1,try2 try3對主目錄/home/try分配的許可權不同,所以通過FTP訪問的許可權也不同,try1訪問許可權為:上傳,下載,建目錄;try2,try3訪問許可權為下載,瀏覽,不能建目錄和上傳。實現了群組中使用者不同訪問級別,加強了對FTP伺服器的分級安全管理。

連線超時(本部分內容由李洋提供)

配置空閒的使用者會話的中斷時間:如下配置將在使用者會話空閒5分鐘後被中斷,以釋放伺服器的資源

Idle_session_timeout=300

配置空閒的資料連線的中斷時間:如下配置將在資料空閒連線1分鐘後被中斷,同樣也是為了釋放伺服器的資源

Data_connection_timeout=60

配置客戶端空閒時的自動中斷和啟用連線的時間:如下配置將使客戶端空閒1分鐘後自動中斷連線,並在30秒後自動啟用連線


Accept_timeout=60
Connect_timeout=30
vsftpd的日誌

常見的vsftpd日誌解決方案

在vsftpd.conf中有如下內容定義了日誌的記錄方式:


# 表明FTP伺服器記錄上傳下載的情況
xferlog_enable=YES
# 表明將記錄的上傳下載情況寫在xferlog_file所指定的檔案中,即xferlog_file選項指定的檔案中
xferlog_std_format=YES
xferlog_file=/var/log/xferlog
# 啟用雙份日誌。在用xferlog檔案記錄伺服器上傳下載情況的同時,
# vsftpd_log_file所指定的檔案,即/var/log/vsftpd.log也將用來記錄伺服器的傳輸情況
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log

vsftpd的兩個日誌檔案分析如下:

/var/log/xferlog

記錄內容舉例


Thu Sep 6 09:07:48 2007 7 192.168.57.1 4323279 /home/student/phpMyadmin-2.11.0-all-languages.tar.gz b -i r student ftp 0 * c

/var/log/vsftpd.log

記錄內容舉例


Tue Sep 11 14:59:03 2007 [pid 3460] CONNECT: Client "127.0.0.1"
Tue Sep 11 14:59:24 2007 [pid 3459] [ftp] OK LOGIN;Client "127.0.0.1" ,anon password ”

/var/log/xferlog日誌檔案中資料的分析和引數說明

|記錄資料|引數名稱|引數說明||Thu Sep 6 09:07:48 2007|當前時間|當前伺服器本地時間,格式為: DDD MMM dd hh:mm:ss YYY||7|傳輸時間|傳送檔案所用時間,單位為秒||192.168.57.1|遠端主機名稱/IP|遠端主機名稱/IP||4323279|檔案大小|傳送檔案的大小,單位為byte||/home/student/phpMyadmin-2.11.0-all-languages.tar.gz|檔名|傳輸檔名,包括路徑||b|傳輸型別|傳輸方式的型別,包括兩種:a以ASCII傳輸 b以二進位制檔案傳輸||–|特殊處理標誌|特殊處理的標誌位,可能的值包括:_ 不做任何特殊處理;C 檔案是壓縮格式;U 檔案是非壓縮格式;T 檔案是tar格式||i|傳輸方向|檔案傳輸方向,包括兩種:o 從FTP伺服器向客戶端傳輸;i 從客戶端向FTP伺服器傳輸||r|訪問模式|使用者訪問模式,包括:a 匿名使用者;g 來賓使用者;r 真實使用者,即系統中的使用者||student|使用者名稱|使用者名稱稱||ftp|服務名|所使用的服務名稱,一般為FTP||0|認證方式|認證方式,包括:0 無;1 RFC931認證|||認證使用者id|認證使用者的id,如果使用,則表示無法獲得該id||c|完成狀態|傳輸的狀態:c 表示傳輸已完成;i 表示傳輸示完成|

常見的FTP命令,以及FTP數字程式碼的意義

命令格式如下顯示:


FTP命令
功能
FTP命令
功能

ls
顯示伺服器上的目錄
ls [remote-dir][local-file]
顯示遠端目錄remote-dir,並存入本地檔案local-file


get remote-file [local-file]
從伺服器下載指定檔案到客戶端
mget remote-files
下載多個遠端檔案(mget命令允許用萬用字元下載多個檔案)


put local-file [remote-file]
從客戶端上傳指定檔案到伺服器
mput local-file
將多個檔案上傳至遠端主機(mput命令允許用萬用字元上傳多個檔案)


open
連線FTP伺服器
mdelete [remote-file]
刪除遠端主機檔案


close
中斷與遠端伺服器的ftp會話(與open對應)
mkdir dir-name
在遠端主機中建立目錄


open host[port]
建立指定的ftp伺服器連線,可指定連線埠
newer file-name
如果遠端主機中file-name的修改時間比本地硬碟同名檔案的時間更近,則重傳該檔案


cd directory
改變伺服器的工作目錄
rename [from][to]
更改遠端主機的檔名


lcd directory
在客戶端上(本地)改變工作目錄
pwd
顯示遠端主機的當前工作目錄


bye
退出FTP命令狀態
quit
同bye,退出ftp會話


ascii
設定檔案傳輸方式為ASCII模式
reget remote-file [local-file]
類似於get,但若local-file存在,則從上次傳輸中斷處續傳


binary
設定檔案傳輸方式為二進位制模式
rhelp [cmd-name]
請求獲得遠端主機的幫助


![cmd [args]]
在本地主機中互動shell後退回到ftp環境,如:!ls *.zip
rstatus [file-name]
若未指定檔名,則顯示遠端主機的狀態,否則顯示檔案狀態


accout [password]
提供登入遠端系統成功後訪問系統資源所需的密碼
hash
每傳輸1024位元組,顯示一個hash符號(#)


append local-file [remote-file]
將本地檔案追加到遠端系統主機,若未指定遠端系統檔名,則使用本地檔名
restart marker
從指定的標誌marker處,重新開始get或put,如restart 130


bye
退出ftp會話過程
rmdir dir-name
刪除遠端主機目錄


case
在使用mget命令時,將遠端主機檔名中的大寫轉為小寫字母
size file-name
顯示遠端主機檔案大小,如:
size idle 7200


cd remote-dir
進入遠端主機目錄
status
顯示當前ftp狀態


cdup
進入遠端主機目錄的父目錄
system
顯示遠端主機的作業系統


delete remote-file
刪除遠端主機檔案
user user-name [password][account]
向遠端主機表明自己的身份,需要密碼時,必須輸入密碼,如:user anonymous my@email


dir [remote-dir][local-file]
顯示遠端主機目錄,並將結果存入本地檔案
help [cmd]
顯示ftp內部命令cmd的幫助資訊,如help get

FTP數字程式碼的意義


110 重新啟動標記應答。
120 服務在多久時間內ready。
125 資料鏈路埠開啟,準備傳送。
150 檔案狀態正常,開啟資料連線埠。
200 命令執行成功。
202 命令執行失敗。
211 系統狀態或是系統求助響應。
212 目錄的狀態。
213 檔案的狀態。
214 求助的訊息。
215 名稱系統型別。
220 新的聯機服務ready。
221 服務的控制連線埠關閉,可以登出。
225 資料連結開啟,但無傳輸動作。
226 關閉資料連線埠,請求的檔案操作成功。
227 進入passive mode。
230 使用者登入。
250 請求的檔案操作完成。
257 顯示目前的路徑名稱。
331 使用者名稱稱正確,需要密碼。
332 登入時需要賬號資訊。
350 請求的操作需要進一部的命令。
421 無法提供服務,關閉控制連結。
425 無法開啟資料鏈路。
426 關閉聯機,終止傳輸。
450 請求的操作未執行。
451 命令終止:有本地的錯誤。
452 未執行命令:磁碟空間不足。
500 格式錯誤,無法識別命令。
501 引數語法錯誤。
502 命令執行失敗。
503 命令順序錯誤。
504 命令所接的引數不正確。
530 未登入。
532 儲存檔案需要賬戶登入。
550 未執行請求的操作。
551 請求的命令終止,型別未知。
552 請求的檔案終止,儲存位溢位。
553 未執行請求的的命令,名稱不正確。