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 -ivh vsftpd-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 未執行請求的的命令,名稱不正確。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM