Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> 電腦軟件教程 >> 服務器技術 >> FTP服務器 >> vsFTPd 服務器初學者指南

vsFTPd 服務器初學者指南

日期:2017/1/20 17:53:39      編輯:FTP服務器

 1、vsFTPd,目前常用FTP服務器套件;
   
    vsFTPd是一款在Linux發行版中最受推崇的FTP服務器程序;特點是小巧輕快,安全易用;能讓其自身特點得發發揮和掌握,也然最主要的是會用;
   
    目前在開源操作系統中常用的FTPD套件主要有ProFTPD、PureFTPd和wuftpd等;至於哪個FTP服務器套件更好,哪個是你最熟悉的,哪個就是最好的;
   
    2、ftp 用戶管理解說;
   
    FTP服務器對用戶的管理,在默認的情況下是根據 /etc/passwd及/etc/group 來進行的,所以我們一定要了解Linux系統用戶和用戶組的管理,用戶和用戶組的管理是一切應用的的基礎,有的弟兄不想去了解基礎的東西,就想一步成架好 各種服務器,事實證明這種學習方法是最不明智的;雖然在您可能在幾分鐘啟動了ftp服務器,但遇到問題時,您不一定能知道是哪裡出錯;所以基礎還是極為重 要的;
   
    推薦文章:《Linux 用戶(user)和用戶組(group)管理概述》
   
    2.1、匿名ftp 用戶和用戶組的理解;
   
    當我們訪問各大FTP上訪問時,可能我們不去想我們以什麼身份登錄的,如果他的FTP允許匿名登錄的話;比如我們在浏覽器上打入;
   
    ftp://mirrors.kernel.org
   
    或
   
    ftp://ftp:[email protected]
   
    我們會發現上面的兩行最終都能訪問,而且顯示的結果也完全一樣,最終都跳到 ftp://mirrors.kernel.org 地址;那我們訪問這個FTP時,是不是有用戶和密碼呢?是的,也是需要在的,只是在服務器端允許匿名訪問,而匿名訪問的用戶名和密碼都是ftp,只是我們 因為匿名訪問,沒有感覺到他有用戶名和密碼罷了。第二個地址就是以ftp用戶,密碼也是ftp來訪問 ftp://mirrors.kernel.org;
   
    如果我們以ftp命令連接 mirrors.kernel.org 時,我們會發現需要輸入用戶ftp,密碼ftp才能訪問;
   
    在FTP服務器中,匿名用戶的用戶名和密碼都是ftp ;這個用戶可以在您的操作系統中的 /etc/passwd 中能找得到;可能有類似下面的一行;
   
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
   
    說明:
   
    /etc/passwd 是系統用戶的配置文件;/etc/group是系統用戶組配置文件,您可以通過 《Linux 用戶(user)和用戶組(group)管理概述》 及其相關文檔中了解一些用戶管理的一些基礎知識;
   
    在ftp用戶這行中,我們看到七個字段,每個字段寫字段之間用:號分割;
   
    ftp 是用戶名
   
    x 是密碼字段,是隱藏的;
   
    14 是用戶的UID字段,可以自己來設定,不要和其它用戶的UID相同,否則會造成系統安全問題;
   
    50 用用戶組的GID,可以自己設定,不要和其它用戶組共用FTP的GID,否則會造成系統全全問題;
   
    FTP User 是用戶說明字段;
   
    /var/ftp 是ftp用戶的家目錄,可以自己來定義;
   
    /sbin/nologin 這是用戶登錄SHELL ,這個也是可以定義的,/sbin/nologin 表示不能登錄系統;系統虛擬帳號(也被稱為偽用戶)一般都是這麼設置。比如我們把ftp用戶的/sbin/nologin 改為 /bin/bash ,這樣ftp用戶通過本地或者遠程工具ssh或telnet以真實用戶身份登錄到系統。這樣做對系統來說是不安全的;如果您認為一個用戶沒有太大的必要登 錄到系統,就可以只給他FTP帳號的權限,也就是說只給他FTP的權限,而不要把他的SHELL設置成 /bin/bash 等;
    關於ftp用戶組的理解:
   
    我們查看 /etc/group 的時候,會發現類似這樣一條;
   
    ftp:x:50:
   
    /etc/group 是用戶組的管理配置文件,上面這行表示用戶組ftp,x是密碼段,50是GID;我們對照在/etc/passwd中的ftp那行得知ftp用戶是屬於ftp用戶組的,因為ftp用戶那行中的GID和ftp用戶組的GID是相同的;
   
    2.2、匿名ftp 用戶和ftp用戶組是否可以刪除
   
    在一般情況下是不能把/etc/passwd和/etc/group 中有把ftp用戶和用戶組的行刪除的,因為FTP服務器是需要他們來對FTP用戶實現管理,在默認的情況下。
   
    雖然不能刪除,但對/etc/passwd及/etc/group中的ftp用戶及ftp用戶組的一些相關的東西是能修改的;比如我們可以把ftp 用戶的家目錄改掉,也可以把ftp用戶的UID改掉 … … 前提是你對用戶管理有所了解,系統用戶管理是一切應用基礎之一,可能初學Linux的弟兄並不了解用戶管理的重要性,但慢慢您就會發現這個道理;
   
    3、vsFTPd的安裝;
   
    在最新的各大發行版中的安裝盤中都有vsFTPd的軟件包,您用相應發行版提供的軟件包管理工具就能安裝上;當然您可以到各大發行版的FTP鏡像中 找到vsftpd的軟件包;當然也能用軟件包的管理工具在線安裝;vsftpd的軟件包本來不大,花不了多長時間,兩分鐘就夠了吧;因為本文是初學者教 程,我嚴重推薦您用發行版提供的軟件來安裝,不推薦您自己來編譯源碼包的安裝方式;


   
    如果您用的是Fedora 或Redhat 系統,可以用下面的命令在線安裝;
   
    [root@localhost ~]# yum install vsftpd
   
    如果是debian 類系統,可以用apt 來在線安裝;
   
    [root@localhost ~]# apt-get install vsftpd
   
    如果您是RPM的系統,也可以找到vsftpd-xxxx.rpm 的包來通過rpm命令來安裝;
   
    [root@localhost ~]# rpm -ivh vsftpd*.rpm
   
    您可以下載源碼包來安裝
   
    比如我們下載的是 vsftpd-2.0.3.tar.gz ;
   
    [root@localhost ~]# tar zxvf vsftpd-2.0.3.tar.gz
   
    [root@localhost ~]# cd vsftpd-2.0.3
   
    [root@localhost ~]# make ;make install
   
    [root@localhost ~]# cp vsftpd.conf /etc
   
    然後修改/etc/vsftpd.conf ,在配置文件的最後一行加入下面一行;
   
    listen=yes
   
    源碼包安裝的方法,如果您的系統是RPM包管理的系統,可以刪除/etc/xinetd.d/vsftpd 這個文件;然後啟動xinetd 服務器;
   
    [root@localhost ~]# /etc/init.d/xinetd restart
   
    停止 xinetd:                                              [ 確定 ]
   
    啟動 xinetd:                                              [ 確定 ]
   
    vsFTPd運行有兩種模式,在RPM包管理的系重審統,大多是由Fedora/Redhat 開發而來,對於這樣的系統有xinted服務器一說;對於非RPM包管理的系統,一般沒有xinted這一說。為了保證本文檔的統一,我們都不要用 xinetd模式,而用initd運行模式來啟動和管理服務器,也就是獨立運行模式; 至於什麼是xinted和inted 模式,您可以參考《 用vsFTPd自架Linux網絡安裝服務器》
     4、vsFTPd的服務器的啟動和關閉;
   
    vsFTPd服務器啟動和關閉是極容易的;我們可以直接把服務器運行調到後台運行;這是幾乎所有服務器管理的運行方式;
   
    4.1、vsFTPd服務器啟動和關閉的通用方法;
   
    運行vsftpd命令,要用到root權限,如果您當前操作用戶並非是root,可以用su切換到root權限;關於root權限的切換,您有兩種方式,一種是su,另一種是sudo;請參考:《Linux 系統中的超級權限的控制》
   
    vsFTPd服務器的運行;
   
    [root@localhost ~]# /usr/sbin/vsftpd &
   
    [root@localhost ~]# /usr/local/sbin/vsftpd &
   
    vsFTPd服務器是否運行起來;
   
    我們可以通過pgrep vsftpd 來查看vsftpd是否運行起來;
   
    [root@localhost ~]# pgrep vsftpd
   
    4248
   
    上面顯示vsFTPd服務器運行起來了,您可以通過ftp命令、lftp工具或gftp或其它的FTP客戶端來測試連接;
   
    vsFTPd 服務器關閉:
   
    我們用pkill vsftpd 來殺死vsftpd進程,這樣就把vsFTPd關閉,用psgrep vsftpd 來查看進程,如果沒有進程,證明vsFTPd已經關掉;當然也要用到root權限。
   
    [root@localhost ~]# pkill vsftpd
   
    [root@localhost ~]# pgrep vsftpd
   
    4.2、在Fedora/Redhat/CentOS中vsFTPd 服務器的啟動和關閉:
   
    在Fedora/Redhat/CentOS中,也可以用下面的方法來啟動vsFTPd;當然也要用到root權限;
   
    [root@localhost beinan]# /etc/init.d/vsftpd start
   
    為 vsftpd 啟動 vsftpd:                                    [ 確定 ]
   
    重新啟動vsFTPd用下面的命令;


   
    [root@localhost beinan]# /etc/init.d/vsftpd restart
   
    關閉 vsftpd:                                              [ 確定 ]
   
    為 vsftpd 啟動 vsftpd:                                    [ 確定 ]
   
    關掉vsFTPd服務器,應該用下面的命令;
   
    [root@localhost beinan]# /etc/init.d/vsftpd stop
   
    關閉 vsftpd:                                              [ 確定 ]
 5、vsFTPd的服務器和防火牆及SELINUX的關系;(重要)
   
    我在論壇上看到有些弟兄說vsFTPd服務器啟動正常,但卻不能訪問或用戶不能上傳文件,我感覺應該是防火牆或SELINUX的事;可能FTPD服 務器被防火牆或SELINUX的安全機制防住了。所以您必須要讓防火牆通過ftp,當然也要讓SELINUX通過ftp服務器才行;
   
    在Fedora/Redhat/CentOS中,您要設置一下防火牆,可以把防火牆關掉,或者在自定義中讓ftp "通過"防火牆;
   
    [root@localhost ~]# system-config-securitylevel-tui
   
    或者運行一下如下的命令,清除防火牆規則(通用);
   
    [root@localhost beinan]# iptables -F
   
    關於SELINUX服務器的解說 ,可能老手或新手對SELINUX都有點麻煩,建議您SELINUX;或者讓vsFTPd服務器跳過SELINUX啟動;也就是說要用到 4.1、vsFTPd服務器啟動和關閉的通用方法;;這在Fedora/Redhat/CentOS中這樣啟動vsFTPd服務器是有效的;
   
    當然您可也可以關掉SELINUX,在/etc/selinux/config 配置文件如下;
   
    /etc/selinux/config
   
    # This file controls the state of SELinux on the system.
   
    # SELINUX= can take one of these three values:
   
    #       enforcing - SELinux security policy is enforced.
   
    #       permissive - SELinux prints warnings instead of enforcing.
   
    #       disabled - SELinux is fully disabled.
   
    SELINUX=Disabled #這樣就把SELINUX服務器關掉了,請重新啟動系統;
   
    # SELINUXTYPE= type of policy in use. Possible values are:
   
    #       targeted - Only targeted network daemons are protected.
   
    #       strict - Full SELinux protection.
   
    SELINUXTYPE=targeted
   
    6、500 OOPS: vsftpd: refusing to run with writable anonymous root
   
    如果我們已經把vsFTPd服務器啟動好了,但登錄測試是會出現類似下面的提示;
   
    500 OOPS: vsftpd: refusing to run with writable anonymous root
   
    這表示ftp用戶的家目錄的權限不對,應該改過才對;
   
    [root@localhost ~]# more /etc/passwd |grep ftp
   
    ftp:x:1000:1000:FTP User:/var/ftp:/sbin/nologin
   
    我們發現ftp用戶的家目錄在/var/ftp,就是這個/var/ftp的權限不對所致,這個目錄的權限是不能打開所有權限的;是您運行了chmod 777 /var/ftp所致;如果沒有ftp用戶這個家目錄,當然您要自己建一個;
   
    如下FTP用戶的家目錄是不能針對所有用戶、用戶組、其它用戶組完全開放;
   
    [root@localhost ~]# ls -ld /var/ftp
   
    drwxrwxrwx 3 root root 4096 2005-03-23 /var/ftp
   
    修正這個錯誤,應該用下面的辦法;
   


    [root@localhost ~]# chown root:root /var/ftp
   
    [root@localhost ~]# chmod 755 /var/ftp
   
    有的弟兄可能會說,那匿名用戶的可讀、可下載、可上傳怎麼辦呢?這也簡單,在/var/ftp下再建一個目錄,權限是777的就行了,再改一改vsftpd.conf就OK了;沒有什麼難的;
   
    vsFTPd出於安全考慮,是不准讓ftp用戶的家目錄的權限是完全沒有限制的,您可以去讀一下vsFTPd的文檔就明白的了;否則也不能稱為最安全的FTP服務器了,對不對?
   
    7、關於vsFTPd配置文件的說明;
   
    vsftpd.conf是vsFTPd服務器的配置文件,此文件一般是/etc/vsftpd.conf或/etc/vsftpd/vsftpd.conf ,以系統為准吧
   
    vsftpd.conf配置文件就是vsFTPd服務器的全局控制文件,此配置文件中,每行應該算做一個規則;前面帶有#號的服務器不會解釋,這和apache 的配置文件類似;#後所接的內容一般是說明性的,或者是關掉某些功能的選項;
   
    vsftpd.conf 這個配置文件並不包括所有您想實現的功能,有些功能的實現,我們要自己動手來解決,我們要學會查vsFTPd的文檔和FAQ等,雖然是英文的,但都是比較 簡單的;我們要習慣看洋文文檔,為什麼呢?因為Linux本來就是洋人厲害,重量級的軟件都是洋人的。呵,兄弟不要抱怨,誰讓我們落後了呢?
   
    注意:修改完配置文件後,一定要重啟vsFTPd服務器才能生效,切記~~

   8、關於vsFTPd服務器的一些常用功能的實現;
   
    8.1、關於匿名上傳下載的實現;
   
    關於匿名上傳,其實也比較簡單,首先我們要修改一下vsftpd.conf ,此文件位於 /etc/目錄下,可能是/etc/vsftpd.conf,也可能是/etc/vsftpd/vsftpd.conf文件。以您的系統環境為准;
   
    首先:我們要改一下vsftpd.conf,確保有以下幾行;
   
    anonymous_enable=YES
   
    anon_upload_enable=YES
   
    anon_mkdir_write_enable=YES
   
    anon_umask=022
   
    其次:在ftp用戶家目錄的下建一個文件夾,並修改其權限為完全開放;
   
    ftp用戶的家目錄在哪?我們前面已經說了,要通過/etc/passwd來查看;也可以通過finger ftp來查看;
   
    [root@localhost beinan]# finger ftp
   
    Login: ftp                              Name: FTP User
   
    Directory: /var/ftp                     Shell: /sbin/nologin
   
    這說明ftp用戶的家目錄在/var/ftp ,我們要在這個目錄下建一個目錄,然後把他的權限設置為任何用戶可讀可寫可執行就行了;一般的情況下,在發行版中,有一個/var/ftp/pub的目 錄,如果沒有,您也可以自己建一個;把配置文件改好後,只要把/var/ftp下的任何一個目錄的權限打開,都可以用來匿名上傳和下載;
   
    比如您想讓匿名用戶上傳和下載都在/var/ftp/pub,就可以把/var/ftp/pub的權限打開,如果沒有這個目錄,您要自己建一個;
   
    [root@localhost ~]# mkdir /var/ftp/pub
   
    [root@localhost ~]# chmod 777 /var/ftp/pub
   
    這樣上傳的時候傳到pub目錄就OK了,對不對??
   
    8.2、關於添加本地用戶及打開讀寫權限示例;
   
    FTP用戶一般是不能登錄系統的,這也是為了安全。在系統中,沒有權限登錄系統的用戶一般也被稱之為虛擬用戶;虛擬用戶也是要寫進/etc /passwd中;這只是一種虛擬用戶的方法,但說實在的並不是真正的虛擬用戶,只是把他登錄SHELL的權限去掉了,所以他沒有能力登錄系統;
   
    如果我們想把beinan這個用戶目錄定位在/opt/beinan這個目錄中,並且不能登錄系統;我們應該如下操作
   
    [root@localhost ~]# adduser -d /opt/beinan -g ftp -s /sbin/nologin beinan
   
    [root@localhost ~]# passwd beinan
   
    Changing password for user beinan.
   
    New password:
   
    Retype new password:
   
    passwd: all authentication tokens updated successfully.
   
    [root@localhost ~]#
   
    其實這還是不夠的,還要改一下配置文件vsftpd.conf ,以確保本地虛擬用戶能有讀寫權限;


   
    local_enable=YES
   
    write_enable=YES
   
    local_umask=022
   
    8.4、如何實現虛擬路徑?
   
    比如:
   
    /home/a 映射為 ftp://localhost/a
   
    /home/b/c 則為 ftp://localhost/c
   
    其實這個不能說是vsFTPd的內容,其實我們早就接觸過了,可能我們沒有注意,我們可以通過如下的方法來實現。
   
    [root@localhost ~]# mount --bind [原有的目錄] [新目錄]
   
    比如我的ftp的默認目錄是/var/ftp,我想把/mnt/LinG/WinSoft文件夾,映射到/var/ftp目錄中,我就如下操作
   
    我們要先在/var/ftp目錄中建一個目錄
   
    [root@localhost ~]# mkdir /var/ftp/WinSoft
   
    然後執行mount命令
   
    [root@localhost ~]# mount --bind /mnt/LinG/WinSoft /var/ftp/WinSoft
   
    這樣就OK了。
   
    8.5、打開vsFTP服務器的日志功能;
   
    把下面xferlog_file前面的#號對掉,也就是把vsftp的log功能打開,這樣我們就能在/var/log目錄下查看vsftpd.log.這是vsFTP的日志功能,這對於我們來說是極為重要的。
   
    xferlog_file=/var/log/vsftpd.log
   
    8.6、如何定制歡迎信息;
   
    如何定制歡迎信息,也就是我們登入有些FTP之後,會出現類似:歡迎您來到LinuxSir FTP,在這裡,您會得到最真誠的幫助,如果有什麼問題和建議,請來信,多謝。
   
    實現這個並不難,我們可以查看vsftpd.conf文件中,是否有這行。
   
    dirmessage_enable=YES
   
    message_file=.message
   
    如果沒有就加上,如果dirmessage_enable=YES前面有#號,就把#號去掉。其實FTP信息默認的就是。message,所以可以不加 message_file= 來指定。自己指定也行,無所謂的事;
   
    然後我們制定一個。message文件,寫上您想要寫的東西,比如是。message的內容是如下的:
   
    --歡迎您來到LinuxSir FTP!
   
    --在這裡,您會得到最真誠的幫助;
   
    --如果有什麼問題和建議,請來信,多謝。
   
    我們可以用編輯器來寫這個。message,我想這個過程就不用說了吧。
   
    然後我們把。message這個文件復制到各個用戶的家目錄中。比如我的FTP的一個用戶是beinan,這個用戶所在的家目錄是/opt/beinan
   
    我們就要把。message放在/opt/beinan這個目錄下。如果系統用戶ftp,他的目錄就是/var/ftp這個目錄,這個是默認的,當匿名用 戶登入時就訪問的是/var/ftp這個目錄。我們要讓匿名用戶能看到歡迎信息。就要把。message放在/var/ftp目錄中。其它的用戶,也無非 就是類似的操作。
   
    8.7、硬盤空間有限,如何把帳號ftp默認的家目錄更改到別處?
   
    我的硬盤空間有限,如何把帳號ftp默認的路徑/var/ftp更改到別處?或者是,我的linux所有的目錄都放在/根分區,因為空間緊張,我能否把ftp這個用戶的默認路徑放到別的分區??
   
    對於ftp這個用戶的管理,我們應該查看/etc/passwd ,然後修改ftp用戶那行;
   
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
   
    比如我們想把ftp用戶的家目錄改為/opt/ftp,則要把類似上一行改為
   
    ftp:x:14:50:FTP User:/opt/ftp:/sbin/nologin
   
    然後我們要建立ftp用戶的新的家目錄;
   
    [root@localhost ~]# mkdir /opt/ftp
   
    [root@localhost ~]# chmod 755 /opt/ftp
   
    [root@localhost ~]# chown root:root /opt/ftp
   
    如果默認的ftp磁盤空間緊張,我們其實也可以用虛擬路徑映射的方法來解決;也就是mount --bind的辦法;看情況吧,哪個適合就是最好的方法;
   
    8.8、如何讓vsFTP服務器限制鏈接數,以及每個IP最大的鏈接數?
   
    應該改vsFTPd服務器的配制文件vsftpd.conf,加入下面的兩行:
   
    max_clients=數字
   
    max_per_ip=數字


   
    舉例:我想讓我的vsFTP最大支持鏈接數為100個,每個IP,最多能支持5個鏈接,所以我應該在vsftpd.conf中加上如下的兩行:
   
    max_clients=100
   
    max_per_ip=5
   
    改好了配制文件,不要忘記啟動vsftp服務器。
   
    8.9、如何限制傳輸速度?
   
    anon_max_rate=數字
   
    注:這是匿名的速度
   
    local_max_rate=數字
   
    注:這是vsFTP服務器上本地用戶的速度
   
    注:這個數字的單位是byte,所以我們要計算一下。比如我想讓匿名用戶和vsFTP上的用戶都以80KB下載,所以這個數字應該是1024x80=81920
   
    所以我們要在vsftpd.conf中加入下面的兩行
   
    anon_max_rate=81920
   
    local_max_rate=81920
   
    8.10、如何有選擇的把用戶限制在家目錄中呢?
   
    我們要自己建一個文件,在/etc目錄中或/etc/vsftpd目錄中(假如您的vsftpd配置文件都是放在這個目錄的話);
   
    #touch /etc/vsftpd.chroot_list
   
    以beinan和nanbei這兩個用戶限制在他們所在的家目錄中,而其它的FTP用戶不做此限制。
   
    在vsftpd.chroot_list這個文件中,把beinan和nanbei添上去就行,注意,每個用戶占一行。
   
    beinan
   
    nanbei
   
    然後改/etc/vsftpd/vsftpd.conf文件,找如下的兩行
   
    chroot_list_enable=YES
   
    chroot_list_file=/etc/vsftpd.chroot_list
   
    如果沒有這樣的兩行,就可以自己添加上去也是一樣的。
   
    設置好後,重新vsFTPD服務器。
   
    補充一之補充:如何把系統內所有的FTP用戶都限制在家目錄中呢??經juliaugong兄的提示,我查找了vsFTPd的洋文說明,證明這個選項是一刀切的解決所有的用戶都能限制在家目錄中
   
    我們可以通過更改vsftpd.conf文件,加入如下的一行
   
    chroot_local_user=YES
   
    改完配制文件,不要忘記重啟vsFTPd服務器;
   
    8.11、如何讓綁定IP到vsFTPd?
   
    如何讓綁定IP到vsFTPd?也就是說,如何讓用戶只能通過某個IP來訪問FTP.其實這個功能很有意思。如果綁定的是內網的IP,外部是沒有辦法訪問的。如果綁定的是對外服務的IP,內網也只能通過對外服務的IP來訪問FTP
   
    在vsftpd.conf中加一行,以我的局域網為例,請看第一帖中的操作環境,這樣外網就不能訪問我的FTP了,內網也可能通過192.168.0.2來訪問FTP;

Copyright © Windows教程網 All Rights Reserved