在 CentOS 上部署 vsftpd,使用虛擬用戶 (非系統帳號) 實現多組 FTP 帳號、差異化目錄權限、上傳下載頻寬限制、並發連線控制。附完整安裝、PAM 認證、配置檔、測試驗證步驟。
| 用戶 | 類型 | 目錄 | 權限 | 頻寬 |
|---|---|---|---|---|
| 匿名 | anonymous | /var/ftp/soft | 唯讀下載 | 100 KB/s |
| devadm | 虛擬 | /var/ftp/soft | 完整管理 (上傳/建目錄/刪除) | 500 KB/s |
| sales | 虛擬 | /var/market | 唯讀下載 | 100 KB/s |
| saleadm | 虛擬 | /var/market | 完整管理 | 500 KB/s |
全域限制:最大 150 並發連線,單 IP 最大 5 連線。上傳檔案自動去除非擁有者寫入權限。
yum install vsftpd db4-utils # db4-utils 提供 db_load
cat > /etc/vsftpd/vusers.list <
# 匿名/共用目錄
mkdir -p /var/ftp/soft
chown ftp:ftp /var/ftp/soft
chmod 777 /var/ftp/soft # 允許虛擬用戶寫入
# 虛擬用戶映射目錄
useradd -d /var/market -s /sbin/nologin virtual
chmod 755 /var/market
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
anonymous_enable=YES
local_enable=YES
write_enable=YES
anon_root=/var/ftp/soft
chroot_local_user=YES
anon_umask=022
guest_enable=YES
guest_username=virtual
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES
pam_service_name=vsftpd.vu
userlist_enable=YES
tcp_wrappers=YES
user_config_dir=/etc/vsftpd/vusers_dir
max_clients=150
max_per_ip=5
anon_max_rate=102400 # 匿名/預設 100KB/s
mkdir /etc/vsftpd/vusers_dir
# devadm
cat > /etc/vsftpd/vusers_dir/devadm < /etc/vsftpd/vusers_dir/saleadm <
chcon -R -t samba_share_t /var/ftp/soft # 同類型標籤可用
setsebool -P allow_ftpd_anon_write 1
setsebool -P ftp_home_dir 1
service vsftpd restart
chkconfig vsftpd on
ftp 192.168.1.10
# user: ftp, pass: (空)
# 下載測試速度 ~250 KB/s (受限 100KB/s 實測略高)
ftp> put install.log # 上傳成功
ftp> mkdir aaa # 建目錄成功
ftp> rmdir aaa # 刪目錄成功
ftp> get test.list # 下載 ~1.1 MB/s (受限 500KB/s)
ftp> put aa.txt # 550 Permission denied
ftp> get fangan.file # 下載成功
ftp> put aa.txt # 上傳成功
ftp> mkdir saleadm # 建目錄成功
ftp> delete install.log # 刪檔成功
| 參數 | 作用 |
|---|---|
guest_enable=YES | 啟用虛擬用戶映射 |
guest_username=virtual | 映射至系統用戶 virtual |
user_config_dir | 指定個別用戶配置目錄 |
anon_max_rate | 限制傳輸速率 (Bytes/s) |
anon_upload_enable | 允許上傳 |
anon_mkdir_write_enable | 允許建目錄 |
anon_other_write_enable | 允許刪除/重命名 |
anon_umask=022 | 上傳檔案預設權限 755 (去除群組/其他寫入) |