vsftpd 虛擬用戶不佔用系統帳號,透過 Berkeley DB + PAM 驗證,配合 guest_enable 映射至單一系統用戶,再以 user_config_dir 實現每位虛擬用戶獨立權限(唯讀/上傳/建目錄/刪改)。本文提供從建立帳號密碼資料庫、PAM 設定、vsftpd.conf 核心參數、權限模板建立到測試驗證的完整標準化部署流程。
# 1. 編輯明文帳密檔 (奇數行用戶名, 偶數行密碼)
vi logins.txt
user1
pass1
user2
pass2
# 2. 轉換為 Berkeley DB hash 格式 (需安裝 db4-utils)
db_load -T -t hash -f logins.txt /etc/vsftpd/vsftpd_login.db
# 3. 驗證檔案類型與權限
file /etc/vsftpd/vsftpd_login.db
chmod 600 /etc/vsftpd/vsftpd_login.db
vi /etc/pam.d/vsftpd.vu
auth required pam_userdb.so db=/etc/vsftpd/vsftpd_login
account required pam_userdb.so db=/etc/vsftpd/vsftpd_login
useradd -d /home/ftpsite -s /sbin/nologin virtual
chmod 700 /home/ftpsite
vi /etc/vsftpd/vsftpd.conf
# 虛擬用戶啟用
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
# 虛擬用戶個別設定目錄
user_config_dir=/etc/vsftpd_user_conf
mkdir /etc/vsftpd_user_conf
# user1: 唯讀瀏覽
vi /etc/vsftpd_user_conf/user1
anon_world_readable_only=YES
# user2: 完整讀寫 (上傳/建目錄/刪改/重命名)
vi /etc/vsftpd_user_conf/user2
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
service vsftpd restart
# 使用 ftp client 或命令列測試
ftp localhost
# 輸入 user1/pass1 → 應只能下載瀏覽
# 輸入 user2/pass2 → 應可上傳、mkdir、rename、delete
| 參數 | 說明 |
|---|---|
| anon_world_readable_only=YES | 僅允許下載/列表,禁止任何寫入 |
| anon_upload_enable=YES | 允許上傳檔案 |
| anon_mkdir_write_enable=YES | 允許建立目錄 |
| anon_other_write_enable=YES | 允許刪除/重命名/更改權限 |
虛擬用戶架構讓 FTP 服務更輕量、安全、彈性,是多用戶共享伺服器的最佳實踐。