# 備份原源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下載阿里雲源(以 CentOS 7 為例,其他版本至 mirrors.aliyun.com 獲取對應 repo)
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/CentOS-7.repo
# 清理快取並重建
yum clean all
yum makecache
注意: 若無法 wget(無公網 IP),可在阿里雲控制台「實例詳情 → 遠程連線 → 工作台」複製源內容手動建立 repo 檔。
yum install -y vsftpd
# 檢查 nologin 路徑(通常 /sbin/nologin 或 /usr/sbin/nologin)
which nologin
# 建立帳號,指定家目錄 /ftp,禁止 Shell 登入
useradd -d /ftp -s /sbin/nologin ftpuser
# 設定密碼
passwd ftpuser
# 設定目錄擁有者與權限
chown -R ftpuser:ftpuser /ftp
chmod 755 /ftp
vi /etc/vsftpd/vsftpd.conf
關鍵修改:
# 關閉匿名
anonymous_enable=NO
# 開啟本地用戶與寫入
local_enable=YES
write_enable=YES
# 限制用戶在家目錄(chroot)
chroot_local_user=YES
allow_writeable_chroot=YES # vsftpd 3.0+ 需此項允許家目錄可寫
# 啟用 ASCII 模式(文字檔換行轉換)
ascii_upload_enable=YES
ascii_download_enable=YES
# 被動模式埠口範圍(需與安全組一致)
pasv_enable=YES
pasv_min_port=50000
pasv_max_port=51000
# 可選:限制速度、連線數
local_max_rate=1048576 # 1 MB/s
max_clients=100
max_per_ip=5
vi /etc/shells
# 確認檔案包含 /sbin/nologin 或 /usr/sbin/nologin,否則追加
登入阿里雲控制台 → 網路與安全 → 安全組 → 配置規則 → 入方向新增:
| 協議/埠口 | 授權物件 | 說明 |
|---|---|---|
| TCP 21 | 0.0.0.0/0 | FTP 控制連線 |
| TCP 20 | 0.0.0.0/0 | 主動模式資料埠(少用) |
| TCP 50000-51000 | 0.0.0.0/0 | 被動模式資料埠範圍(對應 pasv_min/max_port) |
systemctl start vsftpd
systemctl enable vsftpd
# 本機測試
ftp localhost
# 用戶名:ftpuser,密碼:您設定的密碼
# 成功登入後應顯示 230 Login successful,目錄為 /ftp
# 遠端測試(FileZilla/WinSCP/lftp)
# 協議:FTP,加密:僅純 FTP(或要求 TLS),主機:公網 IP,埠口:21,用戶/密碼同上
| 現象 | 原因 | 解決 |
|---|---|---|
| 客戶端連線逾時 / 無法列表 | 安全組未開放被動模式埠口 | 開放 TCP 50000-51000(或您自訂範圍) |
| 500 OOPS: cannot change directory | SELinux 阻擋 / 家目錄權限錯誤 | setsebool -P ftp_home_dir=1;確認目錄 755、擁有者正確 |
| 530 Login incorrect | 帳號在 /etc/vsftpd/ftpusers 或 user_list 禁止名單中 | 編輯兩檔移除該帳號;檢查 PAM 配置 |
| 上傳速度極慢 | local_max_rate 限制 / 實例頻寬上限 / 客戶端網路 | 調整或移除 local_max_rate;確認實例頻寬規格 |
| 無法啟動 vsftpd | 21 埠被佔用 / 配置語法錯誤 | netstat -nlap | grep :21;vsftpd -olisten=NO /etc/vsftpd/vsftpd.conf 驗證語法 |
# 1. 產生自簽憑證(生產環境請用 CA 簽發)
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout /etc/ssl/private/vsftpd.key \
-out /etc/ssl/certs/vsftpd.pem \
-subj "/C=CN/ST=Beijing/L=Beijing/O=MyOrg/CN=ftp.example.com"
# 2. 配置 vsftpd.conf 追加
ssl_enable=YES
rsa_cert_file=/etc/ssl/certs/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.key
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
# 3. 重啟服務
systemctl restart vsftpd
FileZilla 連線時選擇「要求 FTP over TLS (FTPS)」,即可加密傳輸帳密與資料。
阿里雲部署 FTP 服務器的核心差異在於安全組配置與yum 源優化。掌握「控制台開放埠口 + vsftpd 被動模式埠口範圍一致」原則,配合標準化部署流程與安全加固,即可獲得穩定、合規的 FTP 服務。