天天看點

詳談 vsftpd 的設定

  VSFTPD

  施文建

0 關于本文檔

1 VSFTPD簡述

2 VSFTPD的安裝

2.1 RHL9+vsftpd-1.1.3-8.i386.rpm包的安裝

2.2 vsftpd-1.2.0.tar.gz的安裝

3 VSFTPD的檔案結構

4 VSFTPD的啟動與停止

5 VSFTPD的設定選項

5.1 連接配接選項

5.1.1 監聽位址與控制端口

5.1.2 FTP模式與資料端口

5.1.3 ASCII模式

5.2 性能與負載控制

5.2.1 逾時選項

5.2.2 負載控制

5.3 使用者選項

  5.3.1 匿名使用者

   5.3.2 本地使用者

5.3.3 虛拟使用者

5.4 安全措施

5.4.1 使用者登入控制

5.4.2 目錄通路控制

5.4.3 檔案操作控制

5.4.4 新增檔案權限設定

5.5 提示資訊

5.6 日志設定

5.7 其他設定

6 VSFTPD應用

6.1 允許匿名使用者上傳檔案

6.2 限制使用者在自家目錄

6.3 配置高安全級别的匿名FTP伺服器

6.4 基于IP位址的虛拟FTP伺服器

6.5 虛拟使用者的配置

6.5.1 VSFTPD的虛拟使用者介紹

6.5.2 使用者建立和目錄設定

6.5.3 配置檔案的設定

6.5.3.1 基本設定

6.5.3.2 權限設定

6.5.3.3 虛拟使用者的其他配置

6.5.3.4 虛拟使用者個人目錄設定

6.5.4 MySQL儲存虛拟使用者

-------------------------------------------

0、關于本文檔

  本文檔是個人的學習整理。允許大家翻閱,摘抄,引用。更歡迎指出其中不對之處。文檔的内容主要來自VSFTPD自身文檔、個人學習心得以及網絡資料,若有類同,實屬正常,∶)。

  本文檔基于RedHat Linux 9和VSFTPD-1.1.3-8。如果有不同版本,則有專門文字說明。

1、VSFTPD簡述

  如果試問哪種FTP伺服器最安全?那麼在UNIX和Linux中,首推的就是VSFTP(Very Secure FTP Daemon,非常安全的FTP伺服器)。顧名思義,VSFTPD設計的出發點就是安全性。同時随着版本的不斷更新,VSFTPD在性能和穩定性上也取得了極大的進展。象RedHat、SUSE、Debian、GNU、GNOME、KDE等一些大型站點都采用VSFTPD作為它們的FTP伺服器。大家可以到http://vsftpd.beasts.org/了解它的最新情況。

2、VSFTPD的安裝

2.1、RHL9+vsftpd-.1.1.3-8.i386.rpm包的安裝

  VSFTPD的安裝很簡單。在RHL9中,在圖形界面下依次執行“Main Menu”-“System Settings”-“Add/Remove Applications”-選擇FTP伺服器-“更新”,或者在字元界面中執行以下指令,就可以完成安裝。

  rpm -ivh vsftpd-1.1.3-8.i386.rpm

2.2、vsftpd-1.2.0.tar.gz的安裝

  ⑴準備條件

  VSFTPD預設配置中需要“nobody”使用者。在系統中添加此使用者,如果使用者已經存在,useradd指令有相應提示。

  [[email protected] root]# useradd nobody

  useradd: user nobody exists

  VSFTPD預設配置中需要“/usr/share/empty”目錄。在系統中此目錄,如果目錄已經存在,mkdir指令有相應提示。

  [[email protected] root]# mkdir /usr/share/empty/

  mkdir: cannot create directory '/usr/share/empty': File exists

  VSFTPD提供匿名FTP服務時,需要“ftp”使用者和一個有效的匿名目錄。

  [[email protected] root]# mkdir /var/ftp/

  [[email protected] root]# useradd -d /var/ftp ftp

  接下來的操作對于ftp使用者是否已經存在都是有用的。

  [[email protected] root]# chown root.root /var/ftp

  [[email protected] root]# chmod og-w /var/ftp

  ⑵編譯VSFTPD

  從官方站點下載下傳到/root目錄,執行以下指令:

  [[email protected] root]# tar zxvf vsftpd-1.2.0.tar.gz

  [[email protected] root]# cd vsftpd-1.2.0

  [[email protected] vsftpd-1.2.0]# make

  ⑶安裝編譯好的VSFTPD

  執行“make install”将編譯好的二進制檔案、手冊等複制到相應目錄。在RHL9上,可能需要手動執行以下複制:

  [[email protected] vsftpd-1.2.0]# cp vsftpd /usr/local/sbin/vsftpd

  [[email protected] vsftpd-1.2.0]# cp vsftpd.conf.5 /usr/local/share/man/man5

  [[email protected] vsftpd-1.2.0]# cp vsftpd.8 /usr/local/share/man/man8

  此外,“make install”沒有複制簡單的配置檔案,建議執行以下指令:

  [[email protected] vsftpd-1.2.0]# cp vsftpd.conf /etc

  ⑷為本地使用者設定PAM

  如果允許本地使用者登入VSFTPD,執行以下操作:

  [[email protected] vsftpd-1.2.0]# cp RedHat/vsftpd.pam /etc/pam.d/ftp

3、VSFTPD的檔案結構

  VSFTPD的檔案結構是很簡潔的,主要包括:

  /usr/sbin/vsftpd ---- VSFTPD的主程式

  /etc/rc.d/init.d/vsftpd ---- 啟動腳本

  /etc/vsftpd/vsftpd.conf ---- 主配置檔案

  /etc/pam.d/vsftpd ---- PAM認證檔案

  /etc/vsftpd.ftpusers ---- 禁止使用VSFTPD的使用者清單檔案

  /etc/vsftpd.user_list ---- 禁止或允許使用VSFTPD的使用者清單檔案

  /var/ftp ---- 匿名使用者主目錄

  /var/ftp/pub      ---- 匿名使用者的下載下傳目錄

  此外,還有一些說明文檔和手冊檔案。

  此外VSFTPD的日志檔案位于/etc/logrotate.d/vsftpd.log。

4、VSFTPD的啟動與停止

  VSFTPD可以單獨(Standalone)方式運作,如同httpd、named這類的伺服器的運作方式,這是RHL9中預設的方式;也可以采用xinetd方式運作,這是RHL7.x、8中的預設方式。具體的運作方式由參數listen決定。從RHL中VSFTPD的運作方式,也可以看出VSFTPD的逐漸發展。

  當listen參數值為YES時,RHL9中的預設值,VSFTPD單獨運作,我們可以使用腳本/etc/rc.d/init.d/vsftpd來啟動、關閉以及重新開機VSFTPD。指令如下:

  /etc/rc.d/init.d/vsftpd start|stop|restart

  如果說在RHL9上,您還希望使用Xinetd啟動VSFTPD的運作方式,那麼首先要将vsftpd.conf配置檔案中的listen參數值改為NO。其次,生成一個/etc/xinetd.d/vsftpd檔案,内容如下:

  service vsftpd

  {

  disable = no

  socket_type = stream

  wait = no

  user = root

  server = /usr/sbin/vsftpd

  port = 21

  log_on_success += PID HOST DURATION

  log_on_failure += HOST

  }

  通過修改disable值為no或yes,并重新啟動xinetd,進而啟動或停止VSFTPD。

  由于VSFTPD的單獨模式已經擁有足夠的能力,是以後面6中讨論到的應用,都是以單獨模式來運作的,而非Xinetd方式。

  注:還可以直接執行vsftpd來啟動FTP服務,關閉時使用“kill”指令。

  [[email protected] root]# /usr/local/sbin/vsftpd &

5、VSFTPD的設定選項

  VSFTPD的配置檔案/etc/vsftpd/vsftpd.conf是個文本檔案。以“#”字元開始的行是注釋行。每個選項設定為一行,格式為“option=value”,注意“=”号兩邊不能留白白符。除了這個主配置檔案外,還可以給特定使用者設定個人配置檔案,具體介紹見後。

  VSFTPD包中所帶的vsftpd.conf檔案配置比較簡單,而且非常偏執狂的(文檔自稱:-))。我們可以根據實際情況對其進行一些設定,以使得VSFTPD更加可用。

5.1、連接配接選項

  本部分主要是一些與建立FTP連結相關的選項。

5.1.1、監聽位址與控制端口

  listen_address=ip address

  此參數在VSFTPD使用單獨(standalone)模式下有效。此參數定義了在主機的哪個IP位址上監聽FTP請求,即在哪個IP位址上提供FTP服務。對于隻有一個IP位址的主機,不需要使用此參數。對于多址主機,不設定此參數,則監聽所有IP位址。預設值為無。

  listen_port=port_value

  指定FTP伺服器監聽的端口号(控制端口),預設值為21。此選項在standalone模式下生效。

5.1.2、FTP模式與資料端口

  FTP 分為兩類,PORT FTP和PASV FTP,PORT FTP是一般形式的FTP。這兩種FTP在建立控制連接配接時操作是一樣的,都是由用戶端首先和FTP伺服器的控制端口(預設值為21)建立控制連結,并通過此連結進行傳輸操作指令。它們的差別在于使用資料傳輸端口(ftp-data)的方式。PORT FTP由FTP伺服器指定資料傳輸所使用的端口,預設值為20。PASV FTP由FTP用戶端決定資料傳輸的端口。PASV FTP這種做法,主要是考慮到存在防火牆的環境下,由用戶端與伺服器進行溝通(用戶端向伺服器發出資料傳輸請求中包含了資料傳輸端口),決定兩者之間的資料傳輸端口更為友善一些。

  port_enable=YES|NO

  如果你要在資料連接配接時取消PORT模式時,設此選項為NO。預設值為YES。

  connetc_from_port_20=YES|NO

  控制以PORT模式進行資料傳輸時是否使用20端口(ftp-data)。YES使用,NO不使用。預設值為NO,但RHL自帶的vsftpd.conf檔案中此參數設為YES。

  ftp_data_port=port number

  設定ftp資料傳輸端口(ftp-data)值。預設值為20。此參數用于PORT FTP模式。

  port_promiscuous=YES|NO

  預設值為NO。為YES時,取消PORT安全檢查。該檢查確定外出的資料隻能連接配接到用戶端上。小心打開此選項。

  pasv_enable=YES|NO

  YES,允許資料傳輸時使用PASV模式。NO,不允許使用PASV模式。預設值為YES。

  pasv_min_port=port number

  pasv_max_port=port number

  設定在PASV模式下,建立資料傳輸所可以使用port範圍的下界和上界,0 表示任意。預設值為0。把端口範圍設在比較高的一段範圍内,比如50000-60000,将有助于安全性的提高。

  pasv_promiscuous=YES|NO

  此選項激活時,将關閉PASV模式的安全檢查。該檢查確定資料連接配接和控制連接配接是來自同一個IP位址。小心打開此選項。此選項唯一合理的用法是存在于由安全隧道方案構成的組織中。預設值為NO。

  pasv_address=

  此選項為一個數字IP位址,作為PASV指令的響應。預設值為none,即位址是從呼入的連接配接套接字(incoming connectd socket)中擷取。

5.1.3 ASCII模式

  預設情況下,VSFTPD是禁止使用ASCII傳輸模式。即使FTP用戶端使用asc指令,指明要使用ASCII模式,但是,VSFTPD表面上接受了asc指令,而在實際傳輸檔案時,還是使用二進制方式。下面選項控制VSFTPD是否使用ASCII傳輸模式。

  ascii_upload_enable=YES|NO

  控制是否允許使用ascii模式上傳檔案,YES允許,NO不允許,預設為NO。

  ascii_download_enable=YES|NO

  控制是否允許使用ascii模式下載下傳檔案,YES允許,NO不允許,預設為NO。

5.2、性能與負載控制

5.2.1、逾時選項

  idle_session_timeout=

  空閑(發呆)使用者會話的逾時時間,若是超出這時間沒有資料的傳送或是指令的輸入,則會強迫斷線。機關為秒,預設值為300。

  data_connection_timeout=

  空閑的資料連接配接的逾時時間。預設值為300 秒。

  accept_timeout=numerical value

  接受建立聯機的逾時設定,機關為秒。預設值為60。

  connect_timeout=numerical value

  響應PORT方式的資料聯機的逾時設定,機關為秒。預設值為60。以上兩個選項針對用戶端的,将使用戶端空閑1分鐘後自動中斷連接配接,并在中斷1分鐘後自動激活連接配接。

5.2.2 負載控制

  max_clients=numerical value

  此參數在VSFTPD使用單獨(standalone)模式下有效。此參數定義了FTP伺服器最大的并發連接配接數,當超過此連接配接數時,伺服器拒絕用戶端連接配接。預設值為0,表示不限最大連接配接數。

  max_per_ip=numerical value

  此參數在VSFTPD使用單獨(standalone)模式下有效。此參數定義每個IP位址最大的并發連接配接數目。超過這個數目将會拒絕連接配接。此選項的設定将影響到象網際快車這類的多程序下載下傳軟體。預設值為0,表示不限制。

  anon_max_rate=value

  設定匿名使用者的最大資料傳輸速度value,以Bytes/s為機關。預設無。

  local_max_rate=value

  設定使用者的最大資料傳輸速度value,以Bytes/s為機關。預設無。此選項對所有的使用者都生效。此外,也可以在使用者個人配置檔案中使用此選項,以指定特定使用者可獲得的最大資料傳輸速率。

  步驟如下:

  ①在vsftpd.conf中指定使用者個人配置檔案所在的目錄,如:

  user_config_dir=/etc/vsftpd/userconf

  ②生成/etc/vsftpd/userconf目錄。

  ③使用者個人配置檔案是在該目錄下,與特定使用者同名的檔案,如:

  /etc/vsftpd/userconf/xiaowang

  ④在使用者的個人配置檔案中設定local_max_rate參數,如:

  local_max_rate=80000

  以上步驟設定FTP使用者xiaowang的最大資料傳輸速度為80KBytes/s。

  VSFTPD 對于速度控制的變化範圍大概在80%到120%之間。比如我們限制最高速度為100KBytes/s, 但實際的速度可能在80KBytes/s 到120KBytes/s 之間。當然,若是線路帶寬不足時,速率自然會低于此限制。

5.3 使用者選項

  VSFTPD的使用者分為三類:匿名使用者、本地使用者(local user)以及虛拟使用者(guest)。

5.3.1、匿名使用者

  anonymous_enable=YES|NO

  控制是否允許匿名使用者登入,YES允許,NO不允許,預設值為YES。

  ftp_username=

  匿名使用者所使用的系統使用者名。預設下,此參數在配置檔案中不出現,值為ftp。

  no_anon_password=YES|NO

  控制匿名使用者登入時是否需要密碼,YES不需要,NO需要。預設值為NO。

  

  deny_email_enable=YES|NO

  此參數預設值為NO。當值為YES時,拒絕使用banned_email_file參數指定檔案中所列出的e-mail位址進行登入的匿名使用者。即,當匿名使用者使用banned_email_file檔案中所列出的e-mail進行登入時,被拒絕。顯然,這對于阻擊某些Dos攻擊有效。當此參數生效時,需追加banned_email_file參數

  banned_email_file=/etc/vsftpd.banned_emails

  指定包含被拒絕的e-mail位址的檔案,預設檔案為/etc/vsftpd.banned_emails。

  anon_root=

  設定匿名使用者的根目錄,即匿名使用者登入後,被定位到此目錄下。主配置檔案中預設無此項,預設值為/var/ftp/。

  anon_world_readable_only=YES|NO

  控制是否隻允許匿名使用者下載下傳可閱讀文檔。YES,隻允許匿名使用者下載下傳可閱讀的檔案。NO,允許匿名使用者浏覽整個伺服器的檔案系統。預設值為YES。

  anon_upload_enable=YES|NO

  控制是否允許匿名使用者上傳檔案,YES允許,NO不允許,預設是不設值,即為NO。除了這個參數外,匿名使用者要能上傳檔案,還需要兩個條件:一,write_enable參數為YES;二,在檔案系統上,FTP匿名使用者對某個目錄有寫權限。

  anon_mkdir_write_enable=YES|NO

  控制是否允許匿名使用者建立新目錄,YES允許,NO不允許,預設是不設值,即為NO。當然在檔案系統上,FTP匿名使用者必需對新目錄的上層目錄擁有寫權限。

  anon_other_write_enable=YES|NO

  控制匿名使用者是否擁有除了上傳和建立目錄之外的其他權限,如删除、更名等。YES擁有,NO不擁有,預設值為NO。

  chown_uploads=YES|NO

  是否修改匿名使用者所上傳檔案的所有權。YES,匿名使用者所上傳的檔案的所有權将改為另外一個不同的使用者所有,使用者由chown_username參數指定。此選項預設值為NO。

  chown_username=whoever

  指定擁有匿名使用者上傳檔案所有權的使用者。此參數與chown_uploads聯用。不推薦使用root使用者。

5.3.2、本地使用者

  在使用FTP服務的使用者中,除了匿名使用者外,還有一類在FTP伺服器所屬主機上擁有賬号的使用者。VSFTPD中稱此類使用者為本地使用者(local users),等同于其他FTP伺服器中的real使用者。

  local_enable=YES|NO

  控制vsftpd所在的系統的使用者是否可以登入vsftpd。預設值為YES。

  local_root=

  定義所有本地使用者的根目錄。當本地使用者登入時,将被更換到此目錄下。預設值為無。

  user_config_dir=

  定義使用者個人配置檔案所在的目錄。使用者的個人配置檔案為該目錄下的同名檔案。個人配置檔案的格式與vsftpd.conf格式相同。例如定義 user_config_dir=/etc/vsftpd/userconf,并且主機上有使用者xiaowang,lisi,那我們可以在 user_config_dir的目錄新增名為xiaowang、lisi的兩個檔案。當使用者lisi 登入時,VSFTPD則會讀取user_config_dir下lisi這個檔案中的設定值,應用于使用者lisi。預設值為無。

5.3.3、虛拟使用者

  guest_enable=YES|NO

  若是啟動這項功能,所有的非匿名登入者都視為guest。預設值為關閉。

  guest_username=

  定義VSFTPD的guest使用者在系統中的使用者名。預設值為ftp。

5.4、安全措施

5.4.1、使用者登入控制

  pam_service_name=vsftpd

  指出VSFTPD進行PAM認證時所使用的PAM配置檔案名,預設值是vsftpd,預設PAM配置檔案是/etc/pam.d/vsftpd。

  /etc/vsftpd.ftpusers

  VSFTPD禁止列在此檔案中的使用者登入FTP伺服器。這個機制是在/etc/pam.d/vsftpd中預設設定的。

  userlist_enable=YES|NO

  此選項被激活後,VSFTPD将讀取userlist_file參數所指定的檔案中的使用者清單。當清單中的使用者登入FTP伺服器時,該使用者在提示輸入密碼之前就被禁止了。即該使用者名輸入後,VSFTPD查到該使用者名在清單,VSFTPD就直接禁止掉該使用者,不會再進行詢問密碼等後續步聚。預設值為NO。

  userlist_file=/etc/vsftpd.user_list

  指出userlist_enable選項生效後,被讀取的包含使用者清單的檔案。預設值是/etc/vsftpd.user_list。

  userlist_deny=YES|NO

  決定禁止還是隻允許由userlist_file指定檔案中的使用者登入FTP伺服器。此選項在userlist_enable 選項啟動後才生效。YES,預設值,禁止檔案中的使用者登入,同時也不向這些使用者發出輸入密碼的提示。NO,隻允許在檔案中的使用者登入FTP伺服器。

  

  tcp_wrappers=YES|NO

  在VSFTPD中使用TCP_Wrappers遠端通路控制機制,預設值為YES。

5.4.2、目錄通路控制

  chroot_list_enable=YES|NO

  鎖定某些使用者在自家目錄中。即當這些使用者登入後,不可以轉到系統的其他目錄,隻能在自家目錄(及其子目錄)下。具體的使用者在chroot_list_file參數所指定的檔案中列出。預設值為NO。

  chroot_list_file=/etc/vsftpd/chroot_list

  指出被鎖定在自家目錄中的使用者的清單檔案。檔案格式為一行一使用者。通常該檔案是/etc/vsftpd/chroot_list。此選項預設不設定。

  chroot_local_users=YES|NO

  将本地使用者鎖定在自家目錄中。當此項被激活時,chroot_list_enable和chroot_local_users參數的作用将發生變化,chroot_list_file所指定檔案中的使用者将不被鎖定在自家目錄。本參數被激活後,可能帶來安全上的沖突,特别是當使用者擁有上傳、 shell通路等權限時。是以,隻有在确實了解的情況下,才可以打開此參數。預設值為NO。

  passwd_chroot_enable

  當此選項激活時,與chroot_local_user選項配合,chroot()容器的位置可以在每個使用者的基礎上指定。每個使用者的容器來源于/etc/passwd中每個使用者的自家目錄字段。預設值為NO。

5.4.3、檔案操作控制

  hide_ids=YES|NO

  是否隐藏檔案的所有者群組資訊。YES,當使用者使用"ls -al"之類的指令時,在目錄清單中所有檔案的擁有者群組資訊都顯示為ftp。預設值為NO。

  ls_recurse_enable=YES|NO

  YES,允許使用"ls -R" 指令。這個選項有一個小的安全風險,因為在一個大型FTP站點的根目錄下使用"ls -R"會消耗大量系統資源。預設值為NO。

  write_enable=YES|NO

  控制是否允許使用任何可以修改檔案系統的FTP 的指令,比如STOR、DELE、RNFR、RNTO、MKD、RMD、APPE 以及SITE。預設值為NO,不過自帶的簡單配置檔案中打開了該選項。

  secure_chroot_dir=

  這選項指向一個空目錄,并且ftp使用者對此目錄無寫權限。當vsftpd不需要通路檔案系統時,這個目錄将被作為一個安全的容器,使用者将被限制在此目錄中。預設目錄為/usr/share/empty。

5.4.4、新增檔案權限設定

  anon_umask=

  匿名使用者新增檔案的umask 數值。預設值為077。

  file_open_mode=

  上傳檔案的權限,與chmod 所使用的數值相同。如果希望上傳的檔案可以執行,設此值為0777。預設值為0666。

  local_umask=

  本地使用者新增檔案時的umask 數值。預設值為077。不過,其他大多數的FTP伺服器都是使用022。如果您的使用者希望的話,可以修改為022。在自帶的配置檔案中此項就設為了022。

5.5、提示資訊

  ftpd_banner=login banner string

  此參數定義了login banner string(登入歡迎語字元串)。使用者可以自行修改。預設值為無。當ftpd_banner設定後,将取代系統原來的歡迎詞。

  banner_file=/directory/vsftpd_banner_file

  此項指定一個文本檔案,當使用者登入時,會顯示此該檔案的内容,通常為歡迎話語或是說明。預設值為無。與ftpd_banner相比, banner_file是文本檔案的形式,而ftpd_banner是字串格式。banner_file選項将取代ftpd_banner選項。

  dirmessage_enable=YES|MO

  控制是否啟用目錄提示資訊功能。YES啟用,NO不啟用,預設值為YES。此功能啟用後,當使用者進入某一個目錄時,會檢查該目錄下是否有message_file選項所指定的文檔,若是有,則會出現此文檔的内容,通常這個檔案會放置歡迎話語,或是對該目錄的說明。

  message_file=

  此選項,僅在dirmessage_enable選項激活方生效。預設值為.message。

5.6、日志設定

  xferlog_enable=YES|NO

  控制是否啟用一個日志檔案,用于詳細記錄上傳和下載下傳。該日志檔案由xferlog_file選項指定。預設值為NO,但簡單配置檔案中激活此選項。

  xferlog_file=

  這個選項設定記錄傳輸日志的檔案名。預設值為/var/log/vsftpd.log。

  xferlog_std_format=YES|NO

  控制日志檔案是否使用xferlog的标準格式,如同wu-ftpd一樣。使用xferlog格式,可以重新使用已經存在的傳輸統計生成器。然而,預設的日志格式更為可讀性。預設值為NO,但自帶的配置檔案中激活了此選項。

  log_ftp_protocol=YES|NO

  當此選項激活後,所有的FTP請求和響應都被記錄到日志中。提供此選項時,xferlog_std_format不能被激活。這個選項有助于調試。預設值為NO。

5.7、其他設定

  setproctitle_enable=YES|NO

  YES,VSFTPD将在系統程序清單中顯示每個會話(session)的狀态。也就是說,程序報告将顯示每個vsftpd會話在做什麼(挂起、下載下傳等),如用ps -ef|grep ftp。出于安全的目的,可以考慮将此選項關閉。NO,程序報告隻顯示一個vsftpd程序在運作。預設值為NO。

  text_userdb_names=YES|No

  當使用者登入後使用ls -al 之類指令時,目錄清單的使用者群組資訊域,預設是出現擁有者的UID,而不是該檔案擁有者的名稱。若是希望出現擁有者的名稱,則将此功能開啟。預設值為NO。

  user_localtime=YES|NO

  預設為NO。YES,VSFTPD顯示目錄清單時使用你本地時區的時間。預設是顯示GMT時間。同樣,由ftp指令“MDTM”傳回的時間值也受此選項影響。

  check_shell=YES|NO

  此選項僅對不使用PAM方式的VSFTPD生效。當此選項關閉後,當本地使用者登入時,VSFTPD不會檢查/etc/shells檔案以尋找一個有效的使用者shell。預設為YES。

  nopriv_user=

  指定一個使用者,當VSFTPD不想要什麼權限時,使用此使用者身份。這使用者最好是一個專用的使用者,而不是使用者nobody。在大多數的機器上,nobody使用者被用于大量重要的事情。預設值為nobody。

  pam_service_name=

  指明VSFTPD使用用PAM驗證服務時的PAM配置檔案名。預設值為ftp。

6、VSFTPD應用

  本部分介紹VSFTPD的具體應用方法。

6.1、允許匿名使用者上傳檔案

  在vsftpd.conf檔案中修改或增加以下選項:

  write_enable=YES

  anon_world_readable_only=NO

  anon_upload_enable=YES

  anon_mkdir_write_enable=YES

  然後建立供匿名使用者上傳檔案的目錄,并設定權限:

  # mkdir /var/ftp/incoming

  # chmod o+w /var/ftp/incoming

  由于匿名使用者(ftp)上傳檔案,需要對incoming目錄進行操作,而incoming為root所有,匿名使用者(ftp)對于incoming來說是其他使用者,是以要加入其他使用者(o)的寫權限。

6.2、限制使用者在自家目錄

  在預設配置中,本地使用者可以切換到自家目錄以外的目錄進行浏覽,并在權限範圍内進行上傳和下載下傳,這無疑是個不安全因素。

  我們可以設定chroot,讓本地使用者登入後隻能通路自家目錄,無法通路其他目錄。相關的選項有三個:chroot_local_user、chroot_list_enable、chroot_list_file。限制使用者在自家目錄有兩種做法:

  1、限制所有的本地使用者在自家目錄

  chroot_local_user=YES

  這種做法,可能會帶來一些安全性上的沖突。參見前面的chroot_local_user選項描述。

  2、限制部分本地使用者在自家目錄

  chroot_local_user=NO

  chroot_list_enable=YES

  chroot_list_file=/etc/vsftpd.chroot_list

  在/etc/vsftpd.chroot_list檔案中加入要限制的本地使用者名。注意一個使用者名一行。

6.3、配置高安全級别的匿名FTP伺服器

  VSFTPD自帶的簡單配置檔案已經自稱是偏執狂了,這裡看看能否更加偏執一些,:)。有些選項預設已經采用安全性的設定,這裡就不再寫出了。

  #隻允許匿名通路,不允許本地使用者通路

  anonymous_enable=YES

  local_enable=NO

  #使用ftpd_banner取代VSFTPD預設的歡迎詞,免得洩漏相關資訊

  ftpd_banner=Welcome to this FTP Server

  #隻讓匿名使用者浏覽可閱讀的檔案,不可以浏覽整個系統

  anon_world_readable_only=YES

  #隐藏檔案的所有者群組資訊,匿名使用者看到的檔案的所有者群組全變為ftp

  hide_ids=YES

  #取消寫權限

  write_enable=NO

  anon_upload_enable=NO

  anon_mkdir_write_enable=NO

  anon_other_write_enable=NO

  #使用單獨模式,并指定監聽的IP位址

  listen_address=ip address

  #對連接配接進行控制,還有逾時時間,那就根據具體情況再說了。

  connect_from_port_20=YES

  pasv_min_port=50000

  pasv_max_port=60000

  #控制并發數,限定每個IP位址的并發數,這個嘛,根據使用者自已定了。

  max_clients=numerical value

  max_per_ip=numerical value

  #限定下載下傳速度,具體限多大,就由使用者自己定了,80KB/s,也很快了吧。

  anon_max_rate=80000

  #啟用詳細的日志記錄格式

  xferlog_enable=YES

6.4、基于IP位址的虛拟FTP伺服器

  假定伺服器有兩個IP位址,192.168.0.1和192.168.0.2。VSFTPD是建立在192.168.0.1上的,現在我們在192.168.0.2上再提供一個虛拟FTP伺服器。如何在一台伺服器上使用多個IP 位址,請參考相關文檔。

  1、建立虛拟FTP伺服器的根目錄。

  mkdir -p /var/ftp2/pub

  確定/var/ftp2和/var/ftp2/pub目錄的擁有者群組均為root,掩碼為755。

  2、增加虛拟FTP伺服器的匿名使用者帳号。原先的FTP伺服器使用系統使用者ftp作為其匿名使用者帳号。我們要增加一個ftp2用于虛拟FTP伺服器。

  useradd -d /var/ftp2 -M ftp2

  3、建立虛拟FTP伺服器的配置檔案。複制原來的vsftpd.conf作為虛拟FTP伺服器的配置檔案,并修改相關參數。

  cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd2.conf

  新添或修改以下參數:

  listen=YES

  listen_address=192.168.0.2

  ftp_username=ftp2

  注:由于VSFTPD預設是監聽所有的IP位址,當我們設定基于IP的虛拟FTP伺服器時,為防止原來的FTP伺服器與虛拟FTP伺服器發生監聽上的沖突,原FTP伺服器需要指定監聽的IP位址。在這裡,原來的配置檔案中就要設定listen_address=192.168.0.1。

  4、啟動虛拟FTP伺服器。

  /etc/rc.d/init.d/vsftpd腳本在啟動時,掃描/etc/vsftpd/目錄下所有的*.conf檔案,按照 *.conf檔案的先後,依次啟用vsftpd程序,每個vsftpd程序對應一個.conf檔案。即,“ls /etc/vsftpd/”清單的次序與“ps -aux |grep vsftpd”中的順序一樣。當然了,“ps -aux | grep vsftpd”中也顯示出vsftpd所使用的配置檔案,從中也可以看哪個vsftpd程序對應哪個FTP伺服器。如果沒有列出配置檔案,那就是預設的 vsftpd.conf,那麼該程序也就是原來的FTP伺服器程序。

  由于第3步中虛拟FTP伺服器的配置檔案被命名為vsftpd2.conf檔案,是以我們可以用/etc/rc.d/init.d/vsftpd腳本同時啟動或關閉原FTP伺服器和新加的虛拟FTP伺服器。

  以下指令單獨啟動虛拟FTP伺服器:

  /usr/sbin/vsftpd /etc/vsftpd/vsftpd2.conf &

  單獨關閉虛拟FTP伺服器,用“ps -aux | grep vsftpd”查出程序号,再用kill指令殺死虛拟FTP的程序。

6.5、虛拟使用者的配置

6.5.1、VSFTPD的虛拟使用者介紹

  VSFTPD的本地使用者本身是系統的使用者,除了可以登入FTP伺服器外,還可以登入系統使用其他系統資源,而VSFTPD的虛拟使用者則是 FTP服務的專用使用者,虛拟使用者隻能通路FTP伺服器資源。對于隻需要通過FTP對系統有讀寫權限,而不需要其他系統資源的使用者或情況來說,采用虛拟使用者方式是很适合的。

  VSFTPD的虛拟使用者采用單獨的使用者名/密碼儲存方式,與系統賬号(passwd/shadow)分離,這大大增強了系統的安全性。 VSFTPD可以采用資料庫檔案來儲存使用者/密碼,如hash;也可以将使用者/密碼儲存在資料庫伺服器中,如MySQL等。VSFTPD驗證虛拟使用者,則采用PAM方式。由于虛拟使用者的使用者名/密碼被單獨儲存,是以在驗證時,VSFTPD需要用一個系統使用者的身份來讀取資料庫檔案或資料庫伺服器以完成驗證,這就是guest使用者,這正如同匿名使用者也需要有一個系統使用者ftp一樣。當然,guest使用者也可以被認為是用于映射虛拟使用者。

  配置虛拟使用者分為幾部分:guest使用者的建立、使用者/密碼的儲存、PAM認證配置、vsftpd.conf檔案設定等。具體的配置方法,參考下面小節。注:在後面的例子中,假定存在虛拟使用者xiaotong和xiaowang。

6.5.2 使用者建立和目錄設定

  在系統中添加vsftpdguest使用者,作為虛拟使用者在系統中的代表。

  useradd vsftpdguest

  當虛拟使用者登入後,所在的位置為vsftpdguest的自家目錄/home/vsftpdguest。如果要讓虛拟使用者登入到/var/ftp等其他目錄,修改vsftpdguest的自家目錄即可。

6.5.3、配置檔案的設定

6.5.3.1、基本設定。

  在vsftpd.conf配置檔案中,加入以下參數:

  guest_enable=YES

  guest_username=vsftpdguest

6.5.3.2、虛拟使用者的權限配置。

  VSFTPD-1.2.0添加了virtual_use_local_privs參數,當該參數激活(YES)時,虛拟使用者使用與本地使用者相同的權限。當此參數關閉(NO)時,虛拟使用者使用與匿名使用者相同的權限,這也就是VSFTPD-1.2.0之前版本對虛拟使用者權限的處理方法。這兩者種做法相比,後者更加嚴格一些,特别是在有寫通路的情形下。預設情況下此參數是關閉的(NO)。

  下面先介紹virtual_use_local_privs=NO時,即VSFTPD-1.2.0之前版本對虛拟使用者權限的配置方法:

  ①控制虛拟使用者浏覽目錄

  如果讓使用者不能浏覽目錄,但仍可以對檔案操作,那麼需要執行以下二個步驟:一,配置檔案中,anon_world_readable_only=YES。二,虛拟使用者目錄的權限改為隻能由vsftpdguest操作:

  [[email protected] vsftpd]# chown vsftpdguest.vsftpdguest /home/vsftpdguest

  [[email protected] vsftpd]# chmod 700 /home/vsftpdguest

  ②允許虛拟使用者上傳檔案

  write_enable=YES

  anon_upload_enable=YES

  ③允許虛拟使用者修改檔案名和删除檔案

  anon_other_write_enable=YES

  由于以上選項的設定同樣會對匿名使用者生效。如果不想匿名使用者趁機擁有同樣的權限,最好是禁止匿名使用者登入。

  在VSFTPD-1.2.0中當virtual_use_local_privs=YES時,隻需write_enable=YES,虛拟使用者就可以就擁有寫權限。

6.5.3.3、虛拟使用者的其他配置

  ①限定虛拟使用者在自家目錄。

  chroot_local_user=NO

  chroot_list_enable=YES

  chroot_list_file=/etc/vsftpd.chroot_list

  在/etc/vsftpd.chroot_list檔案中加入xiaotong和xiaowang。

  或者,chroot_local_user=YES

  ②虛拟使用者的個人配置。

  如果想讓個别的虛拟使用者擁有自己特别的配置,同樣可以建立虛拟使用者的個人配置檔案。在主配置檔案中加入:

  user_config_dir=/etc/vsftpd/vsftpd_user_conf

  生成/etc/vsftpd/vsftpd_user_conf目錄,在該目錄下建立與特定虛拟使用者同名的檔案:

  [[email protected] vsftpd]# mkdir vsftpd_user_conf

  [[email protected] vsftpd]# cd vsftpd_user_conf

  [[email protected] vsftpd_user_conf]# touch xiaowang

  然後在xiaowang檔案中就可以加入專對xiaowang生效的選項設定了。

  注:如果在個人配置檔案中加入chroot_local_user=YES是無效的。

6.5.3.4、虛拟使用者個人目錄設定

  大家可以發現,無論是哪個虛拟使用者,登入後所在的目錄都是/home/vsftpdguest,即都是guest_username使用者的自家目錄。下面,介紹如何為每個虛拟使用者建立自家目錄。

  一種作法是在虛拟使用者的個人配置檔案中使用local_root選項指定虛拟使用者的自家目錄。以xiaowang為例,在第上步的基礎上,首先/etc/vsftpd/vsftpd_user_conf/xiaowang檔案中加入:

  local_root=/home/xiaowang

  建立xiaowang目錄,并将權限設為vsftpdguest:

  [[email protected] home]# mkdir xiaowang

  [[email protected] home]# chown vsftpdguest.vsftpdguest ./xiaowang

6.5.4、MySQL儲存虛拟使用者

  本節介紹如何将虛拟使用者的使用者名和密碼儲存在MySQL的資料庫中。這主要分二個部分,一是将使用者和密碼儲存在資料庫,二是設定相應的PAM 認證。為了友善論述,做如下假定:資料庫vsftpdvu,表users,字段name和passwd用于儲存虛拟使用者的使用者名和密碼;為了安全,隻授權 vsftpdguest讀vsftpdvu資料庫的users表。

  1、虛拟使用者的使用者名/密碼的儲存。這部分在MySQL資料庫中完成。首先,建立資料庫vsftpdvu以及表users,并插入虛拟使用者xiaotong、xiaowang。執行以下指令:

  [[email protected] vsftpd]#mysql -p

  mysql>create database vsftpdvu;

  mysql>use vsftpdvu;

  mysql>create table users(name char(16) binary,passwd char(16) binary);

  mysql>insert into users (name,passwd) values ('xiaotong',password('qqmywife'));

  mysql>insert into users (name,passwd) values ('xiaowang',password('ttmywife'));

  mysql>quit

  然後,授權vsftpdguest隻能讀vsftpdvu資料庫的users表。執行以下指令:

  [[email protected] vsftpd]#mysql -u root mysql -p

  mysql>grant select on vsftpdvu.users to [email protected] identified by 'i52serial0';

  mysql>quit

  如果要驗證剛才的操作是否成功可以執行下面指令:

  [[email protected] vsftpd]#mysql -u vsftpdguest -pi52serial0 vsftpdvu

  mysql>select * from users;

  如果成功,将會列出xiaotong、xiaowang和加密後的密碼。

  2、設定PAM認證。這裡我們要用到一個利用mysql進行pam驗證的開源項目(http: //sourceforge.net/projects/pam-mysql/)。首先從網站下載下傳它的程式包pam_myql-0.5.tar.gz,複制到/root目錄中。在編譯安裝之前,要確定mysql-devel的RPM包已經安裝在你的機器上,如果沒有請從RHL安裝CD光牒中安裝該包。然後,執行以下指令:

  [[email protected] root]#tar xvzf pam_mysql-0.5.tar.gz

  [[email protected] root]#cd pam_mysql

  [[email protected] pam_mysql]#make

  [[email protected] pam_mysql]#make install

  make install這一步可能會出現錯誤,那隻好手動将該目錄下生成的pam_mysql.o複制到/lib/security目錄下。

  接下來,我們要設定vsftpd的PAM驗證檔案。打開/etc/pam.d/vsftpd檔案,加入以下内容:

  auth required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2

  account required pam_mysql.o user=vsftpdguest passwd=i52serial0 host=localhost db=vsftpdvu table=users usercolumn=name passwdcolumn=passwd crypt=2

  上面涉及到的參數,隻要對應前面資料庫的設定就可以明白它們的含義。這裡需要說明的是crypt參數,crypt=0,密碼以明文方式(不加密)儲存在資料庫中;crypt=1,密碼使用UNIX系統的DES加密方式加密後儲存在資料庫中;crypt=2,密碼經過MySQL的 password()函數加密後儲存。