全部產品
Search
文件中心

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

更新時間:Mar 01, 2026

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

快速部署

您可以單擊一鍵運行進入Terraform Explorer查看並執行Terraform代碼,從而實現自動化地在ECS執行個體中搭建FTP網站。

準備資源

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

  • 作業系統:Alibaba Cloud Linux 3 / 2、CentOS 7.x 64位、Ubuntu、Debian。

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

VSFTP簡介

vsftpd(Very Secure FTP Daemon)是一個開源的FTP伺服器軟體,專為UNIX和Linux系統設計。其主要特點包括:

  • 安全性高:vsftpd經過嚴格的安全審計,採用多種安全機制,能有效防止常見的攻擊和漏洞。

  • 效能優越:具備高效能的檔案傳輸能力,支援大並發使用者同時串連。

  • 配置簡單:提供靈活且易於理解的配置選項,適合各種使用者需求。

  • 支援IPv6:對新一代網路通訊協定提供友好的支援。

搭建VSFTP服務

Alibaba Cloud Linux 3、2/CentOS 7.x

步驟一:安裝vsftpd

  1. 運行以下命令,更新系統組件並安裝vsftpd服務。

    sudo yum update -y 
    sudo yum install vsftpd -y
  2. 運行以下命令,啟動 FTP 服務並設定開機自啟動。

    sudo systemctl start vsftpd
    sudo systemctl enable vsftpd 
  3. 運行以下命令,確認服務是否啟動。

    netstat -antup | grep ftp

    顯示結果如下,則說明 FTP 服務已成功啟動。

    image

    此時,vsftpd 已預設開啟匿名使用者模式,無需通過使用者名稱和密碼即可登入 FTP 伺服器。使用此方式登入 FTP 伺服器的使用者沒有修改或上傳檔案的許可權。

步驟二:配置 vsftpd

  1. 運行以下命令,建立FTP服務專用使用者並配置密碼,本文中以 ftpuser 為例。

    sudo useradd -d /data/ftp -s /sbin/nologin ftpuser  # 指定家目錄並禁用Shell
    sudo passwd ftpuser 
  2. 運行以下命令,建立ftp服務檔案夾,並配置目錄許可權。

    sudo mkdir -p /data/ftp      # 建立自訂儲存目錄
    sudo chown ftpuser:ftpuser /data/ftp
    sudo chmod 750 /data/ftp    # 許可權需滿足755或750
  3. 編輯vsftp設定檔。

    說明

    FTP 可通過主動模式和被動模式與用戶端機器進行串連並傳輸資料。由於大多數用戶端機器的防火牆設定及無法擷取真實 IP 等原因,建議您選擇被動模式搭建 FTP 服務。如下修改以設定被動模式為例。

    1. 運行以下命令,備份vsftp設定檔。

      sudo cp /etc/vsftpd/vsftpd.conf  /etc/vsftpd/vsftpd.conf.bak
    2. 運行以下命令,修改設定檔。

      sudo vim /etc/vsftpd/vsftpd.conf
    3. 修改FTP服務基礎安全配置。

      listen=YES                   # 開啟ipv4監聽
      anonymous_enable=NO          # 禁止匿名訪問
      local_enable=YES             # 啟用本機使用者登入
      write_enable=YES             # 允許檔案上傳
      chroot_local_user=YES        # 鎖定使用者到主目錄
      allow_writeable_chroot=YES   # 解決chroot寫入錯誤
    4. 在設定檔末尾添加被動模式相關配置。

      pasv_enable=YES              # 啟用被動模式
      pasv_min_port=40000          # 被動連接埠範圍下限
      pasv_max_port=40100          # 被動連接埠範圍上限
      pasv_address=公網IP地址      # 必須設定為伺服器公網IP
  4. 運行以下命令,重啟vsftpd服務。

    sudo systemctl restart vsftpd

步驟三:設定安全性群組

完成FTP服務搭建後,您需要根據實際使用的 FTP 模式給 Linux 雲端服務器放通入站規則,詳情請參見添加安全性群組規則

大多數用戶端機器在區域網路中,其 IP 位址經過了轉換。如果您選擇使用 FTP 主動模式,請確保用戶端機器獲得了其真實的 IP 位址,否則可能會導致用戶端無法成功登入 FTP 伺服器。確保正確配置有助於避免串連問題,從而提高 FTP 服務的穩定性和可用性。

  • 主動模式:放通連接埠21。

  • 被動模式:放通連接埠21,及設定檔 /etc/vsftpd/vsftpd.conf 中設定的 pasv_min_port 到 pasv_max_port 之間的所有連接埠,本文放通連接埠為40000-40100。FTP服務被動模式放通範圍連接埠的原因及配置建議請參見FTP被動模式連接埠配置建議

步驟四:驗證FTP服務

您可通過 FTP 用戶端軟體、瀏覽器或檔案總管等工具驗證 FTP 服務,本文以用戶端的檔案總管為例。

  1. 本地串連測試。

    運行以下命令,進行本機串連測試。

    ftp ftpuser@localhost 

    控制台得到 Login successful則表示串連成功。

    image

  2. 用戶端串連測試。

    開啟用戶端的電腦,在路徑欄中訪問以下地址。如下圖所示。

    image

    在彈出的登入身份視窗中輸入FTP使用者與密碼。成功登入後,即可上傳及下載檔案。

Ubuntu/Debian

步驟一:安裝VSFTP

  1. 運行以下命令,更新系統組件並安裝vsftpd服務。

    sudo apt update && sudo apt upgrade -y
    sudo apt install vsftpd -y
  2. 運行以下命令,啟動vsftpd服務並設定開機自啟。

    sudo systemctl start vsftpd
    sudo systemctl enable vsftpd

步驟二:配置VSFTP

  1. 運行以下命令,建立專用FTP使用者。

    sudo useradd -m -s /bin/bash ftpuser  # 建立使用者並自動產生主目錄
    sudo passwd ftpuser  # 設定使用者密碼(建議使用強密碼)
  2. 運行以下命令,建立檔案儲存體目錄並配置許可權。

    sudo mkdir /home/ftpuser/ftp-files
    sudo chown ftpuser:ftpuser /home/ftpuser/ftp-files
    sudo chmod 755 /home/ftpuser/ftp-files
  3. 運行以下命令,備份原始設定檔。

    sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
  4. 運行以下命令,編輯設定檔。

    sudo nano /etc/vsftpd.conf

    修改以下配置內容:

    # 基礎配置
    listen=YES
    anonymous_enable=NO          # 禁止匿名訪問
    local_enable=YES             # 允許本機使用者登入
    write_enable=YES             # 啟用寫入許可權
    chroot_local_user=YES        # 鎖定使用者在主目錄

    在配置末尾添加以下配置:

    allow_writeable_chroot=YES   # 允許chroot目錄寫入
    local_root=/home/ftpuser/ftp-files  # 指定ftp使用者根目錄
    
    # 被動模式配置(解決外網串連問題)
    pasv_enable=YES
    pasv_address=xx.xx.xx.xx  # 替換為您的公網IP
    pasv_min_port=40000
    pasv_max_port=40100
  5. 運行以下命令,重啟FTP服務。

    sudo systemctl restart vsftpd
  6. 在FTP安裝完成後,會預設建立使用者名稱為ftp的使用者,預設無密碼。運行以下命令修改ftp密碼。

     sudo passwd ftp

    設定一個強密碼並跳過所有其他提示。

  7. 將使用者添加到允許的FTP使用者列表中。

     echo "ftp" | sudo tee -a /etc/vsftpd.userlist
  8. 建立FTP檔案目錄並授予使用者權限。

    1. 建立FTP檔案夾。

       sudo mkdir /home/ftp
    2. 設定檔案夾所有權。

      本例中賦予檔案夾讀、寫、完全控制許可權。可以根據需求修改相應許可權。
       sudo chmod 777 /home/ftp

步驟三:設定安全性群組

完成FTP服務搭建後,您需要根據實際使用的 FTP 模式給 Linux 雲端服務器放通入站規則,詳情請參見添加安全性群組規則

大多數用戶端機器在區域網路中,其 IP 位址經過了轉換。如果您選擇使用 FTP 主動模式,請確保用戶端機器獲得了其真實的 IP 位址,否則可能會導致用戶端無法成功登入 FTP 伺服器。確保正確配置有助於避免串連問題,從而提高 FTP 服務的穩定性和可用性。

  • 主動模式:放通連接埠21。

  • 被動模式:放通連接埠21,及設定檔 /etc/vsftpd/vsftpd.conf 中設定的 pasv_min_port 到 pasv_max_port 之間的所有連接埠。FTP服務被動模式放通範圍連接埠的原因及配置建議請參見搭建FTP網站(Windows)

步驟四:驗證FTP服務

您可通過 FTP 用戶端軟體、瀏覽器或檔案總管等工具驗證 FTP 服務,本文以用戶端的檔案總管為例。

  1. 本地串連測試。

    運行以下命令,進行本機串連測試。

    ftp ftpuser@localhost 

    控制台得到 Login successful則表示串連成功。

    image

  2. 用戶端串連測試。

    開啟用戶端的電腦,在路徑欄中訪問以下地址。如下圖所示。

    image

    在彈出的登入身份視窗中輸入FTP使用者與密碼。成功登入後,即可上傳及下載檔案。

典型錯誤對照表

現象

解決方案

227 Entering Passive Mode後逾時

檢查公網IP綁定+防火牆雙端允許存取

550 Permission denied

修正目錄許可權為755

僅能列出空目錄

檢查chroot_local_user配置

500 OOPS: vsftpd: refusing to run with writable root

執行chmod a-w /data/ftp

被動模式連線逾時

檢查防火牆規則和pasv_address設定

無法上傳檔案

驗證目錄許可權是否為755/750

附錄

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

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