阿里雲 ECS (CentOS/RedHat 系列) 預設安全組與系統防火牆雙重阻擋,搭建 FTP 需同時處理:yum 源可用性、vsftpd 安裝配置、帳號建立、SELinux 布爾值、安全組規則、系統防火牆放行。本文提供端到端實戰流程。

# 備份原源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
# 下載阿里雲 CentOS 7 源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
# 或 CentOS 8/9
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
yum clean all
yum makecache
yum install vsftpd -y
systemctl enable --now vsftpd
# 確認 nologin 路徑
which nologin
# /usr/sbin/nologin 或 /sbin/nologin
# 建立帳號,家目錄指向 /ftp
useradd -d /ftp -s /sbin/nologin ftpuser
passwd ftpuser # 設定密碼
# 目錄權限
chown -R ftpuser:ftpuser /ftp
chmod 750 /ftp
vim /etc/vsftpd/vsftpd.conf
# 修改/確認以下項目:
anonymous_enable=NO # 禁用匿名
local_enable=YES # 啟用本地用戶
write_enable=YES # 允許寫入
chroot_local_user=YES # 限制用戶在家目錄 (防目錄遍歷)
allow_writeable_chroot=YES # 允許家目錄可寫 (配合 chroot)
pasv_enable=YES # 被動模式
pasv_min_port=40000
pasv_max_port=40100 # 被動模式端口範圍 (需防火牆放行)
utf8_filesystem=YES # 中文檔名支援
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
log_ftp_protocol=YES
setsebool -P ftpd_full_access on
setsebool -P ftp_home_dir on
# 驗證
getsebool -a | grep ftp
# firewalld (CentOS 7+)
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=40000-40100/tcp # 被動模式端口
firewall-cmd --reload
# iptables (CentOS 6)
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --dport 40000:40100 -j ACCEPT
service iptables save
# 本機測試
ftp localhost
# 遠端測試 (FileZilla / WinSCP / 命令列)
ftp <公網IP>
# 應成功登入、列出目錄、上傳下載檔案
| 錯誤 | 原因 | 解決 |
|---|---|---|
| 500 OOPS: cannot change directory | SELinux 阻擋 | setsebool -P ftpd_full_access on |
| 553 Could not create file | 目錄權限或 SELinux | chown ftpuser:ftpuser /ftp; setsebool -P ftp_home_dir on |
| 425 Failed to establish connection | 被動模式端口未放行 | 防火牆/安全組放行 40000-40100 |
| 530 Login incorrect | 帳號密碼錯誤或 nologin 未加入 /etc/shells | echo /sbin/nologin >> /etc/shells |
依序完成七大步驟,阿里雲 ECS 上的 vsftpd 即可穩定、安全地提供 FTP 服務。