雖然 SFTP/SCP 已成主流,但在嵌入式開發、網路設備升級、無盤啟動、舊系統相容等場景,FTP(File Transfer Protocol)與 TFTP(Trivial FTP)仍不可或缺。本文以 CentOS/RHEL 7 為例,示範 vsftpd 與 tftp-server 的完整部署流程。
# 核心版本
uname -r
# 運行等級
grep initdefault /etc/inittab
# 檢查已安裝套件
rpm -qa | grep -E 'ftp|tftp'
預設僅安裝 tftp-server、ftp(客戶端)、lftp;vsftpd 需手動安裝。
編輯 /etc/xinetd.d/tftp,關鍵修改:
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /var/lib/tftpboot -c # -c 允許建立新檔
disable = no # yes → no
per_source = 11
cps = 100 2
flags = IPv4
}
重點: server_args 指定根目錄 /var/lib/tftpboot,-c 允許上傳新檔。
mkdir -p /var/lib/tftpboot
chmod -R 777 /var/lib/tftpboot # 實驗環境開放;生產建議 755 + 專用用戶
systemctl enable --now xinetd
systemctl status xinetd
# 驗證監聽埠 69/udp
ss -ulnp | grep :69
# Client 端
tftp 192.168.1.100
tftp> put localfile.txt
tftp> get remotefile.txt
tftp> quit
yum install -y vsftpd
systemctl enable --now vsftpd
/etc/vsftpd/vsftpd.conf# 基礎安全
anonymous_enable=NO # 禁止匿名
local_enable=YES # 允許本地用戶
write_enable=YES # 允許寫入
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
# 限制用戶在家目錄(防止目錄遍歷)
chroot_local_user=YES
allow_writeable_chroot=YES # 允許家目錄可寫(需配合下方)
# 被動模式埠範圍(防火牆需開放)
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=40100
# 日誌
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log
useradd -M -s /sbin/nologin -d /home/ftpuser ftpuser
passwd ftpuser
# 設定家目錄權限
chown ftpuser:ftpuser /home/ftpuser
chmod 755 /home/ftpuser
# firewalld
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=40000-40100/tcp
firewall-cmd --reload
# SELinux(若啟用)
setsebool -P ftp_home_dir on
setsebool -P allow_ftpd_full_access on
systemctl restart vsftpd
# 本機測試
ftp localhost
# 或使用 FileZilla 等圖形客戶端
| 項目 | 建議 |
|---|---|
| 加密傳輸 | FTP 預設明文;生產環境**強制啟用 FTPS (vsftpd 支援 SSL/TLS)** 或改用 SFTP |
| 匿名存取 | 嚴禁 anonymous_enable=YES |
| 用戶隔離 | 啟用 chroot_local_user=YES,配合虛擬用戶映射 |
| 暴力破解防護 | 部署 fail2ban 監控 vsftpd 日誌 |
| TFTP 寫入權限 | 僅在必要時開啟 -c,生產建議唯讀 |
| 目錄權限 | 最小權限原則,避免 777 |
allow_writeable_chroot=YES 或移除家目錄寫權限。pasv_address 未設定公網 IP。server_args 路徑不符。FTP/TFTP 雖屬經典協議,但在特定場景仍具不可替代性。掌握 vsftpd 與 tftp-server 的標準化部署與安全配置,能讓你在嵌入式開發、網管維護、舊系統遷移等工作中遊刃有餘。