全部產品
Search
文件中心

Elastic Compute Service:在Linux執行個體中搭建FTP伺服器

更新時間:Sep 07, 2024

vsftpd(very secure FTP daemon)是一個廣泛使用的、開源的FTP伺服器軟體,以其高效能、高安全性和穩定性著稱,支援多種FTP相關協議,包括FTP、SFTP(通過SSH)、TLS/SSL加密的FTP等。本文介紹如何在Linux系統的ECS執行個體上安裝並配置vsftpd。

準備資源

已建立一台基礎ECS執行個體,並滿足以下配置。如果您還未建立,請參見自訂購買執行個體

  • 作業系統:Alibaba Cloud Linux、CentOS 7.x 64位、CentOS 8.x 64位、Ubuntu

  • IP地址:執行個體已指派公網IP地址或綁定Elastic IP Address(EIP)。具體操作,請參見綁定和解除綁定Elastic IP Address

  • 安全性群組:入方向允許存取80、22、443連接埠。具體操作,請參見添加安全性群組規則

操作步驟

步驟一:安裝vsftpd

  1. 遠端連線Linux執行個體。

  2. 運行以下命令,安裝vsftpd。

    Alibaba Cloud Linux/CentOS 7.x/CentOS 8.x

    重要

    CentOS 8作業系統版本結束了生命週期(EOL),按照社區規則,CentOS 8的源地址http://mirror.centos.org/centos/8/內容已移除,您在阿里雲上繼續使用預設配置的CentOS 8的源會發生報錯。如果您需要使用CentOS 8系統中的一些安裝包,則需要手動切換源地址。具體操作,請參見CentOS 8 EOL如何切換源?

    sudo yum install -y vsftpd

    Ubuntu

    sudo apt update
    sudo apt install -y vsftpd

    出現類似如下圖所示介面時,表示vsftpd安裝成功。

    說明

    不同系統所安裝的vsftpd版本有所不同,以實際介面顯示為準。

    install_vsftp_successfully

  3. 運行以下命令,啟動FTP服務,並設定開機自啟動。

    sudo systemctl start vsftpd
    sudo systemctl enable vsftpd
    說明

    執行該命令時如果提示錯誤資訊Job for vsftpd.service failed because the control process exited with error code,請排查是否存在下述問題。

    • 網路環境不支援IPv6時,在/etc/vsftpd/vsftpd.conf配文檔案中,將listen_ipv6=YES修改為listen_ipv6=NO

    • MAC地址不匹配時,運行ifconfig命令查看MAC地址,並在/etc/sysconfig/network-scripts/ifcfg-xxx設定檔中新增或修改HWADDR=<MAC地址>

  4. 運行以下命令,查看FTP服務監聽的連接埠。

    sudo netstat -antup | grep ftp

    出現如下圖所示介面,表示FTP服務已啟動,監聽的連接埠號碼為21。

    此時,vsftpd預設已開啟匿名訪問功能,您無需輸入使用者名稱密碼即可登入FTP伺服器,但沒有修改或上傳檔案的許可權。install_vsftpd_3

步驟二:配置vsftpd

  1. 建立一個Linux使用者並設定密碼。

    FTP支援以下三種認證模式:

    • 匿名使用者模式:任何人無需密碼驗證就可以直接登入到FTP伺服器。這種模式最不安全,一般只用來儲存不重要的公開檔案,不推薦在生產環境中使用。

    • 本機使用者模式:通過Linux系統本地帳號進行驗證的模式,相較於匿名使用者模式更安全。

    • 虛擬使用者模式:FTP伺服器的專有使用者。虛擬使用者只能訪問Linux系統為其提供的FTP服務,而不能訪問Linux系統的其他資源,進一步增強了FTP伺服器的安全性。

    本文介紹為FTP服務建立一個Linux系統本地帳號。

    Alibaba Cloud Linux/CentOS 7.x/CentOS 8.x

    1. 運行以下命令,為FTP服務建立一個Linux使用者。

      本樣本中,該使用者名稱為ftptest

      sudo adduser ftptest
    2. 運行以下命令,修改ftptest使用者的密碼。

      sudo passwd ftptest

      運行命令後,根據命令列提示完成FTP使用者的密碼修改。

      image

    Ubuntu

    運行以下命令,為FTP服務建立一個Linux使用者。

    本樣本中,該使用者名稱為ftptest

    sudo adduser ftptest

    根據提示輸入密碼,並完成二次確認。

    image

  2. 運行以下命令,建立一個供FTP服務使用的檔案目錄。

    sudo mkdir -p /var/ftp/test
  3. 運行以下命令,建立測試檔案。

    該測試檔案用於FTP用戶端訪問FTP伺服器時使用。

    sudo touch /var/ftp/test/testfile.txt
  4. 運行以下命令,更改/var/ftp/test目錄的擁有者為ftptest

    sudo chown -R ftptest:ftptest /var/ftp/test
  5. 修改vsftpd.conf設定檔。

    1. 運行以下命令,開啟vsftpd的設定檔。

      Alibaba Cloud Linux/CentOS 7.x/CentOS 8.x

      sudo vim /etc/vsftpd/vsftpd.conf

      Ubuntu

      sudo vim /etc/vsftpd.conf
    2. i進入編輯模式。

    3. 配置FTP伺服器工作模式。

      FTP伺服器支援以下兩種工作模式:

      • 主動模式(Active Mode):用戶端向FTP伺服器傳送埠資訊,由伺服器主動串連該連接埠。

      • 被動模式(Passive Mode):FTP伺服器開啟並傳送埠資訊給用戶端,由用戶端串連該連接埠,伺服器被動接受串連。

      說明

      大多數FTP用戶端都在區域網路中,沒有獨立的公網IP地址,且有防火牆阻攔,主動模式下FTP伺服器成功串連到用戶端比較困難。因此,如無特殊需求,建議您將FTP伺服器配置為被動模式。

      本文介紹配置FTP伺服器為被動模式。具體的配置參數說明如下,除下面提及的參數,其他參數保持預設值即可。

      重要

      修改和添加設定檔內的資訊時,請注意格式問題。例如,添加多餘的空格會造成無法重啟服務的結果。

      修改下列參數的值:

      #禁止匿名登入FTP伺服器。
      anonymous_enable=NO
      #允許本機使用者登入FTP伺服器。
      local_enable=YES
      #監聽IPv4 sockets。
      listen=YES

      在行首添加#注釋掉以下參數,關閉監聽IPv6 sockets:

      #listen_ipv6=YES

      在設定檔的末尾添加下列參數,其中pasv_address需修改為FTP伺服器的公網IP地址。

      Alibaba Cloud Linux/CentOS 7.x/CentOS 8.x

      #設定本機使用者登入後所在目錄。
      local_root=/var/ftp/test
      #全部使用者被限制在主目錄。
      chroot_local_user=YES
      #啟用例外使用者名稱單。
      chroot_list_enable=YES
      #指定例外使用者列表檔案,列表中使用者不被鎖定在主目錄。
      chroot_list_file=/etc/vsftpd/chroot_list
      #開啟被動模式。
      pasv_enable=YES
      allow_writeable_chroot=YES
      #本教程中為Linux執行個體的公網IP。
      pasv_address=<FTP伺服器公網IP地址>
      #設定被動模式下,建立資料轉送可使用的連接埠範圍的最小值。
      #建議您把連接埠範圍設定在一段比較高的範圍內,例如50000~50010,有助於提高訪問FTP伺服器的安全性。
      pasv_min_port=50000
      #設定被動模式下,建立資料轉送可使用的連接埠範圍的最大值。
      pasv_max_port=50010

      Ubuntu

      #設定本機使用者登入後所在目錄。
      local_root=/var/ftp/test
      #全部使用者被限制在主目錄。
      chroot_local_user=YES
      #啟用例外使用者名稱單。
      chroot_list_enable=YES
      #指定例外使用者列表檔案,列表中使用者不被鎖定在主目錄。
      chroot_list_file=/etc/vsftpd.chroot_list
      #開啟被動模式。
      pasv_enable=YES
      allow_writeable_chroot=YES
      #本教程中為Linux執行個體的公網IP。
      pasv_address=<FTP伺服器公網IP地址>
      #設定被動模式下,建立資料轉送可使用的連接埠範圍的最小值。
      #建議您把連接埠範圍設定在一段比較高的範圍內,例如50000~50010,有助於提高訪問FTP伺服器的安全性。
      pasv_min_port=50000
      #設定被動模式下,建立資料轉送可使用的連接埠範圍的最大值。
      pasv_max_port=50010

      更多參數的詳細資料,請參見vsftp設定檔及參數說明

    4. Esc鍵,輸入:wq,按Enter鍵關閉並儲存設定檔。

  6. 建立chroot_list檔案,並在檔案中寫入例外使用者名稱單。

    1. 運行以下命令,建立chroot_list檔案。

      • Alibaba Cloud Linux/CentOS 7.x/CentOS 8.x

        sudo vim /etc/vsftpd/chroot_list
      • Ubuntu

        sudo vim /etc/vsftpd.chroot_list
    2. i進入編輯模式。

    3. 輸入例外使用者名稱單。此名單中的使用者不會被鎖定在主目錄,可以訪問其他目錄。

    4. Esc鍵,輸入:wq,按Enter鍵關閉並儲存設定檔。

    重要

    沒有例外使用者時,也必須建立chroot_list檔案,內容可為空白。

  7. 運行以下命令,重啟vsftpd服務。

    sudo systemctl restart vsftpd

步驟三:設定安全性群組

搭建好FTP網站後,在執行個體安全性群組的入方向添加規則並允許存取下列FTP連接埠。具體操作,請參見添加安全性群組規則

說明

大多數用戶端位於區域網路中,IP地址是經過轉換的,因此ipconfigifconfig命令返回的IP不一定是用戶端的真實公網IP地址。若後續用戶端無法登入FTP伺服器,請重新確認其公網IP地址。

被動模式需開放21連接埠,以及/etc/vsftpd/vsftpd.conf設定檔中參數pasv_min_portpasv_max_port之間的所有連接埠。配置詳情如下表所示。

規則方向

授權策略

協議類型

連接埠範圍

授權對象

入方向

允許

自訂TCP

21/21

所有要訪問FTP伺服器的用戶端公網IP地址,多個地址之間用逗號隔開。

允許所有用戶端訪問時,授權對象為0.0.0.0/0。

入方向

允許

自訂TCP

pasv_min_port/pasv_max_port。例如:50000/50010

所有要訪問FTP伺服器的用戶端公網IP地址,多個地址之間用逗號隔開。

允許所有用戶端訪問時,授權對象為0.0.0.0/0。

步驟四:測試搭建的FTP伺服器

FTP用戶端、Windows命令列工具或瀏覽器均可用來測試FTP伺服器。本文以Windows Server 2012 R2 64位系統的本地主機作為FTP用戶端,介紹FTP伺服器的訪問步驟。

  1. 在本地主機,開啟這台電腦

  2. 在地址欄中輸入ftp://<FTP伺服器公網IP地址>:<FTP連接埠>,本文中為Linux執行個體的公網IP地址。例如:ftp://121.43.XX.XX:21

  3. 在彈出的登入身份對話方塊中,輸入已設定的FTP使用者名稱和密碼,然後單擊登入

    登入後,您可以查看到FTP伺服器指定目錄下的檔案,例如:測試檔案testfile.txtftp client

vsftp設定檔及參數說明

/etc/vsftpd目錄下檔案說明如下:

  • /etc/vsftpd/vsftpd.conf是vsftpd的核心設定檔。

  • /etc/vsftpd/ftpusers是黑名單檔案,此檔案中的使用者不允許訪問FTP伺服器。

  • /etc/vsftpd/user_list是白名單檔案,此檔案中的使用者允許訪問FTP伺服器。

vsftpd.conf設定檔參數說明如下:

  • 使用者登入控制參數說明如下表所示。

    參數

    說明

    anonymous_enable=YES

    接受匿名使用者

    no_anon_password=YES

    匿名使用者login時不詢問口令

    anon_root=(none)

    匿名使用者主目錄

    local_enable=YES

    接受本機使用者

    local_root=(none)

    本機使用者主目錄

  • 使用者權限控制參數說明如下表所示。

    參數

    說明

    write_enable=YES

    可以上傳檔案(全域控制)

    local_umask=022

    本機使用者上傳的檔案許可權

    file_open_mode=0666

    上傳檔案的許可權配合umask使用

    anon_upload_enable=NO

    匿名使用者可以上傳檔案

    anon_mkdir_write_enable=NO

    匿名使用者可以建目錄

    anon_other_write_enable=NO

    匿名使用者修改刪除

    chown_username=lightwiter

    匿名上傳檔案所屬使用者名稱

常見問題

  • 問題一:本地主機為Windows系統,為什麼我無法下載FTP伺服器中的檔案?

    您需要根據以下操作步驟,開啟IE瀏覽器的下載許可權。

    1. 在本地主機中開啟IE瀏覽器。

    2. 在瀏覽器的右上方單擊IE表徵圖表徵圖,然後單擊Internet 選項

    3. Internet 選項對話方塊的頂部,單擊安全頁簽。

    4. 選擇一個地區以查看或更改安全設定地區,單擊Internet,然後在該地區的安全層級地區,單擊自訂層級

    5. 選擇下載 > 檔案下載 > 啟用,然後單擊確定

    6. 單擊應用,然後單擊確定

  • 問題二:在Windows系統中,使用命令列工具、瀏覽器等方式串連FTP伺服器報錯如何處理?

    您可以根據FTP的報錯資訊手動排查問題。當您的報錯難以排查解決時,建議您使用第三方FTP用戶端串連工具。例如:FileZilla。下載地址為FileZilla。本樣本介紹使用FileZilla串連匿名模式的FTP伺服器。

    1. 配置vsftpd為匿名模式。

      1. 運行以下命令,修改設定檔/etc/vsftpd/vsftpd.conf

        如果您在安裝vsftpd時,使用的是apt install vsftpd安裝命令,則設定檔路徑為/etc/vsftpd.conf

        sudo vim /etc/vsftpd/vsftpd.conf
      2. i進入編輯模式。

      3. 將匿名上傳許可權的注釋去掉,修改為anon_upload_enable=YES

      4. Esc退出編輯模式,然後輸入:wq並斷行符號以儲存並關閉檔案。

        修改後的設定檔,如下圖所示。vsftpd設定檔

      5. 運行以下命令更改/var/ftp/pub目錄的許可權,為FTP使用者添加寫入權限。

        /var/ftp/pub為FTP服務預設的檔案目錄。

        sudo chmod o+w /var/ftp/pub/
      6. 運行以下命令重新載入設定檔。

        sudo systemctl restart vsftpd
    2. 下載並安裝FileZilla。

    3. 通過FileZilla串連匿名模式的FTP伺服器。

      1. 開啟FileZilla用戶端。

      2. 在頂部功能表列,選擇檔案 > 網站管理器

      3. 網站管理器對話方塊的左下角,單擊新網站(N)

      4. 輸入新網站的名稱,並完成網站配置。

        說明

        以下介面為3.64.0版本的FileZilla,其他版本的FileZilla介面可能有所不同。

        filezilla具體的配置項說明如下:

        • 新網站名稱:您自訂的網站名稱。例如test-01

        • 協議:FTP-檔案傳輸通訊協定。

        • 主機:FTP伺服器公網IP地址。本文中為Linux執行個體的公網IP地址,例如121.43.XX.XX

        • 連接埠:21。

        • 登入類型:匿名。

          本樣本中使用FTP用戶端串連匿名模式的FTP伺服器。如果您需要使用FTP使用者密碼串連FTP伺服器,則登入類型需要設定為正常,並需要配置使用者和密碼資訊。

      5. 單擊串連(C)

        串連成功後,您可以對檔案進行上傳、下載和刪除等操作。FileZilla工具介面如下圖所示。filezilla圖中各地區的資訊說明如下表所示。

        序號

        說明

        顯示命令、FTP串連狀態和任務執行結果。

        本地地區,顯示本地主機的目錄資訊。

        遠程地區,顯示FTP伺服器的目錄資訊。匿名模式下,預設目錄為/pub

        記錄地區,可查看FTP任務的隊列資訊和日誌資訊。

相關文檔

您也可以在Windows執行個體中搭建FTP網站,具體操作,請參見手動搭建FTP網站(Windows)