Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

CentOS 7 搭建 vsftpd FTP 伺服器完整教學:虛擬用戶、權限控制、速度限制、日誌與虛擬路徑

編輯:Linux 教學

vsftpd (Very Secure FTP Daemon) 是 Linux 企業級首選 FTP 服務,支援本地/虛擬用戶、SSL/TLS 加密、寬頻限制、虛擬路徑映射。本文從安裝、服務管理、核心配置檔解析、虛擬用戶建立、匿名上傳、歡迎訊息、虛擬路徑掛載、日誌啟用、連線/速度限制、chroot 限制、IP 綁定、完整生產級配置範例十大面向,助您快速部署安全合規的 FTP 服務。

一、安裝與服務管理

yum install -y vsftpd
systemctl enable --now vsftpd
systemctl status vsftpd
# 防火牆開放 21/20 被動模式埠範圍
firewall-cmd --permanent --add-service=ftp
firewall-cmd --permanent --add-port=30000-31000/tcp  # 被動模式範例
firewall-cmd --reload

二、核心配置檔 /etc/vsftpd/vsftpd.conf 關鍵參數

參數建議值說明
anonymous_enableNO禁止匿名登入 (安全)
local_enableYES允許本地/虛擬用戶
write_enableYES允許上傳/刪除/重命名
local_umask022上傳檔案權限 755
dirmessage_enableYES顯示目錄 .message 內容
xferlog_enableYES啟用傳輸日誌
xferlog_file/var/log/vsftpd.log日誌路徑
xferlog_std_formatYES標準 xferlog 格式
chroot_local_userYES限制用戶於家目錄 (防目錄遍歷)
chroot_list_enableYES啟用例外名單
chroot_list_file/etc/vsftpd/chroot_list不受 chroot 限制的用戶
max_clients100最大並發連線數
max_per_ip5單 IP 最大連線數
local_max_rate81920本地用戶限速 80 KB/s
anon_max_rate81920匿名用戶限速 80 KB/s
listenYES獨立模式監聽 IPv4
listen_ipv6NO關閉 IPv6 (視需求)
pasv_enableYES啟用被動模式
pasv_min_port30000被動模式埠範圍起
pasv_max_port31000被動模式埠範圍迄
pasv_address公網 IPNAT 環境下必填

三、建立虛擬用戶 (PAM + db 認證)

1. 安裝工具

yum install -y db4-utils

2. 建立用戶資料庫

# 文字檔:每兩行一組 user/pass
cat > /etc/vsftpd/virt_users.txt <<'EOF'
user1
pass1
user2
pass2
EOF

# 生成 Berkeley DB
db_load -T -t hash -f /etc/vsftpd/virt_users.txt /etc/vsftpd/virt_users.db
chmod 600 /etc/vsftpd/virt_users.db

3. 配置 PAM

cat > /etc/pam.d/vsftpd.virtual <<'EOF'
auth required pam_userdb.so db=/etc/vsftpd/virt_users
account required pam_userdb.so db=/etc/vsftpd/virt_users
EOF

4. 映射虛擬用戶至系統用戶

# 建立系統掛名用戶 (無 shell、無家目錄)
useradd -r -s /sbin/nologin -d /var/empty vsftpd_virt

# vsftpd.conf 新增/修改:
guest_enable=YES
guest_username=vsftpd_virt
virtual_use_local_privs=YES
pam_service_name=vsftpd.virtual
user_config_dir=/etc/vsftpd/user_conf

5. 為每位虛擬用戶指定家目錄

mkdir -p /etc/vsftpd/user_conf
cat > /etc/vsftpd/user_conf/user1 <<'EOF'
local_root=/var/ftp/user1
write_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
EOF

mkdir -p /var/ftp/user1
chown -R vsftpd_virt:vsftpd_virt /var/ftp/user1

四、虛擬路徑映射 (bind mount)

將既有目錄 (如 /home/data) 映射至 FTP 家目錄下,不佔用額外空間:

mkdir -p /var/ftp/user1/data
mount --bind /home/data /var/ftp/user1/data
# 開機自動掛載寫入 /etc/fstab
/home/data  /var/ftp/user1/data  none  bind  0  0

五、匿名上傳配置 (若需開放)

anonymous_enable=YES
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_umask=022

mkdir -p /var/ftp/anonymous
chmod 777 /var/ftp/anonymous
chown ftp:ftp /var/ftp/anonymous

六、歡迎訊息與目錄訊息

# 全域歡迎訊息
ftpd_banner=Welcome to My FTP Service

# 目錄進入訊息 (.message 檔)
echo "Welcome to user1's folder!" > /var/ftp/user1/.message

七、日誌與監控

# 即時追蹤傳輸日誌
tail -f /var/log/vsftpd.log
# 範例輸出:
# Mon Jan 01 10:00:00 2024 [pid 1234] [user1] OK UPLOAD: /file.txt, 1024 bytes

八、完整生產級配置範例 (/etc/vsftpd/vsftpd.conf)


anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
idle_session_timeout=600
data_connection_timeout=120
ftpd_banner=Welcome to Secure FTP
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
listen=YES
listen_port=21
pasv_enable=YES
pasv_min_port=30000
pasv_max_port=31000
pasv_address=203.0.113.10
max_clients=200
max_per_ip=10
local_max_rate=1048576
anon_max_rate=1048576
guest_enable=YES
guest_username=vsftpd_virt
virtual_use_local_privs=YES
pam_service_name=vsftpd.virtual
user_config_dir=/etc/vsftpd/user_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

九、常見問題排解

現象原因解決
500 OOPS: vsftpd: refusing to run with writable root inside chroot()家目錄對虛擬用戶可寫,且 chroot_local_user=YESchown root:root /var/ftp/user1 或設定 allow_writeable_chroot=YES (vsftpd 3.0+)
被動模式無法連線防火牆未開放 pasv_min/max_portfirewall-cmd --add-port=30000-31000/tcp
虛擬用戶登入失敗PAM 配置錯誤、db 檔權限、vsftpd.conf guest_username 不存在檢查 /var/log/secure、確認 db_load 產出、系統用戶存在
上傳檔案權限不是 755local_umask 設定錯誤設定 local_umask=022 (777-022=755)
Copyright © Windows教程網 All Rights Reserved