歡迎您光臨本站 註冊首頁

vsftpd 配置手冊

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

vsftpd 配置手冊

首先說明,這是轉貼,但是我不記得出自那裡了。望作者勿怪。呵呵!

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命令有相應提示。
  # useradd nobody
  useradd: user nobody exists

  VSFTPD默認配置中需要「/usr/share/empty」目錄。在系統中此目錄,如果目錄已經存在,mkdir命令有相應提示。
  # mkdir /usr/share/empty/
  mkdir: cannot create directory '/usr/share/empty': File exists

  VSFTPD提供匿名FTP服務時,需要「ftp」用戶和一個有效的匿名目錄。
  # mkdir /var/ftp/
  # useradd -d /var/ftp ftp
  接下來的操作對於ftp用戶是否已經存在都是有用的。
  # chown root.root /var/ftp
  # chmod og-w /var/ftp

  ⑵編譯VSFTPD

  從官方站點下載到/root目錄,執行以下命令:
  # tar -zxvf vsftpd-1.2.0.tar.gz
  # cd vsftpd-1.2.0
  # make

  ⑶安裝編譯好的VSFTPD

  執行「make install」將編譯好的二進位文件、手冊等複製到相應目錄。在RHL9上,可能需要手動執行以下複製:
  # cp vsftpd /usr/local/sbin/vsftpd
  # cp vsftpd.conf.5 /usr/local/share/man/man5
  # cp vsftpd.8 /usr/local/share/man/man8
  此外,「make install」沒有複製簡單的配置文件,建議執行以下命令:
  # cp vsftpd.conf /etc

  ⑷為本地用戶設置PAM

  如果允許本地用戶登錄VSFTPD,執行以下操作:
  # 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」命令。
  # /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操作:
  # chown vsftpdguest.vsftpdguest /home/vsftpdguest
  # 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目錄,在該目錄下建立與特定虛擬用戶同名的文件:
  # mkdir vsftpd_user_conf
  # cd 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:
  # mkdir xiaowang
  # chown vsftpdguest.vsftpdguest ./xiaowang
《解決方案》

6.5.4、MySQL保存虛擬用戶

  本節介紹如何將虛擬用戶的用戶名和口令保存在MySQL的資料庫中。這主要分二個部分,一是將用戶和口令保存在資料庫,二是設置相應的PAM認證。為了方便論述,做如下假定:資料庫vsftpdvu,表users,欄位name和passwd用於保存虛擬用戶的用戶名和口令;為了安全,只授權vsftpdguest讀vsftpdvu資料庫的users表。

  1、虛擬用戶的用戶名/口令的保存。這部分在MySQL資料庫中完成。首先,創建資料庫vsftpdvu以及表users,並插入虛擬用戶xiaotong、xiaowang。執行以下命令:
  #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表。執行以下命令:
  #mysql -u root mysql -p
  mysql>grant select on vsftpdvu.users to vsftpdguest@localhost identified by 'i52serial0';
  mysql>quit

  如果要驗證剛才的操作是否成功可以執行下面命令:
  #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安裝光碟中安裝該包。然後,執行以下命令:
  #tar xvzf pam_mysql-0.5.tar.gz
  #cd pam_mysql
  #make
  #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()函數加密后保存。
《解決方案》

好貼啊!
收藏了!
《解決方案》

:em02: :em02: :em02: :em02: 好東西收藏啦,改天還可以用
《解決方案》

謝謝樓主!!!!!!!

[火星人 ] vsftpd 配置手冊已經有498次圍觀

http://coctec.com/docs/service/show-post-19139.html