首先確保系統已安裝vsftpd,若未安裝則執行以下命令:
sudo apt update
sudo apt install vsftpd
創建用于存儲虛擬用戶賬號的文本文件(如virtual_users.txt
),每行依次填寫用戶名和密碼(無額外空格):
sudo touch /etc/vsftpd/virtual_users.txt
sudo chmod 600 /etc/vsftpd/virtual_users.txt
sudo nano /etc/vsftpd/virtual_users.txt
示例內容(添加兩個虛擬用戶user1
和user2
):
user1
password1
user2
password2
安裝db-util
工具(用于將文本文件轉換為vsftpd可識別的數據庫格式):
sudo apt install db-util
使用db_load
命令生成哈希數據庫(提升安全性):
sudo db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
sudo chmod 600 /etc/vsftpd/virtual_users.db # 限制數據庫文件權限
創建專用于虛擬用戶的PAM配置文件(如vsftpd-virtual
),指定數據庫路徑:
sudo nano /etc/pam.d/vsftpd-virtual
添加以下內容(替換為實際數據庫文件名):
auth required pam_userdb.so db=/etc/vsftpd/virtual_users
account required pam_userdb.so db=/etc/vsftpd/virtual_users
虛擬用戶需映射到系統用戶才能訪問文件系統。創建專用系統用戶(如ftpuser
),并設置其主目錄:
sudo adduser --system --home /home/ftpuser --no-create-home --shell /usr/sbin/nologin ftpuser
sudo chown -R ftpuser:ftpuser /home/ftpuser # 設置目錄所有權
編輯vsftpd主配置文件(/etc/vsftpd.conf
),啟用虛擬用戶并調整相關參數:
sudo nano /etc/vsftpd.conf
修改或添加以下關鍵配置(刪除原有沖突配置):
# 基礎設置
listen=YES
listen_ipv6=NO
anonymous_enable=NO # 禁用匿名用戶
local_enable=YES # 允許本地用戶(含虛擬用戶)
write_enable=YES # 允許上傳文件
# 虛擬用戶相關
guest_enable=YES # 啟用虛擬用戶
guest_username=ftpuser # 虛擬用戶映射的系統用戶
virtual_use_local_privs=YES # 虛擬用戶使用本地用戶權限
user_sub_token=$USER # 用戶子目錄占位符
local_root=/home/ftpuser/$USER # 虛擬用戶根目錄(動態生成)
# 安全設置
chroot_local_user=YES # 鎖定用戶到主目錄
allow_writeable_chroot=YES # 允許chroot目錄可寫(避免登錄錯誤)
pam_service_name=vsftpd-virtual # 指定PAM配置文件
為每個虛擬用戶創建專屬FTP目錄(基于local_root
配置):
sudo mkdir -p /home/ftpuser/user1
sudo mkdir -p /home/ftpuser/user2
sudo chown -R ftpuser:ftpuser /home/ftpuser # 確保目錄權限正確
應用所有配置變更:
sudo systemctl restart vsftpd
使用FTP客戶端(如FileZilla、WinSCP或命令行ftp
)連接服務器,輸入虛擬用戶名(如user1
)和密碼,驗證是否能成功登錄并訪問對應目錄(如/home/ftpuser/user1
)。
注意事項:
local_root
目錄下的vsftpd
配置文件(如/etc/vsftpd_user_conf/user1
),但本例中未啟用個性化配置,故無需額外步驟。