安裝vsftpd
根據系統選擇安裝命令(以CentOS為例):
sudo yum install vsftpd pam db4 -y
(Ubuntu/Debian使用sudo apt install vsftpd pam db-util -y
)
創建系統用戶(虛擬用戶宿主)
虛擬用戶需映射到一個系統用戶,用于限定訪問目錄和權限:
sudo useradd -d /home/ftpsite -s /sbin/nologin virtual_user
sudo chmod 755 /home/ftpsite # 設置目錄權限,允許虛擬用戶訪問
安裝必要工具
確保db_load
工具可用(用于生成虛擬用戶數據庫):
sudo yum install db4-utils -y # CentOS
sudo apt install db-util -y # Ubuntu/Debian
準備虛擬用戶賬號文件
創建文本文件(如/etc/vsftpd/virtusers.txt
),格式為奇數行用戶名、偶數行密碼(每行一個用戶):
sudo vim /etc/vsftpd/virtusers.txt
示例內容:
user1
password1
user2
password2
生成虛擬用戶數據庫
使用db_load
將文本文件轉換為Berkeley DB格式(vsftpd可識別的加密格式):
sudo db_load -T -t hash -f /etc/vsftpd/virtusers.txt /etc/vsftpd/virtusers.db
設置數據庫權限(僅root可讀,防止密碼泄露):
sudo chmod 600 /etc/vsftpd/virtusers.db
編輯PAM配置文件(/etc/pam.d/vsftpd
),添加虛擬用戶認證規則(替換原有內容或新增以下兩行):
sudo vim /etc/pam.d/vsftpd
示例內容:
auth required pam_userdb.so db=/etc/vsftpd/virtusers
account required pam_userdb.so db=/etc/vsftpd/virtusers
說明:
auth
行:指定虛擬用戶的認證方式(通過數據庫驗證用戶名/密碼);account
行:驗證虛擬用戶的賬戶狀態(如是否有效)。編輯/etc/vsftpd.conf
,啟用虛擬用戶功能并調整相關參數:
sudo vim /etc/vsftpd.conf
關鍵配置項(刪除注釋并修改為以下內容):
anonymous_enable=NO # 禁用匿名登錄
local_enable=YES # 允許本地用戶登錄(虛擬用戶依賴此選項)
write_enable=YES # 允許上傳文件
local_umask=022 # 設置文件權限掩碼
chroot_local_user=YES # 將用戶限制在自己的主目錄(增強安全性)
allow_writeable_chroot=YES # 允許chroot目錄可寫(避免上傳失?。?guest_enable=YES # 啟用虛擬用戶
guest_username=virtual_user # 虛擬用戶映射的系統用戶(需提前創建)
pam_service_name=vsftpd # 指定PAM配置文件(需與步驟三一致)
user_config_dir=/etc/vsftpd/vconf # 虛擬用戶個性化配置目錄(可選,用于定制用戶權限)
若需要為不同虛擬用戶設置不同權限(如限制某用戶只能下載),需創建個性化配置文件:
創建個性化配置目錄:
sudo mkdir /etc/vsftpd/vconf
為每個虛擬用戶創建配置文件(文件名需與虛擬用戶名一致):
sudo vim /etc/vsftpd/vconf/user1
示例內容(限制user1
只能下載,不能上傳):
local_root=/home/ftpsite/user1 # 用戶專屬目錄(需提前創建并設置權限)
write_enable=NO # 禁止上傳
anon_upload_enable=NO # 禁止匿名上傳
idle_session_timeout=300 # 空閑會話超時(秒)
max_clients=5 # 最大并發連接數
創建用戶專屬目錄并設置權限:
sudo mkdir -p /home/ftpsite/user1
sudo chown virtual_user:virtual_user /home/ftpsite/user1 # 所有權歸映射的系統用戶
sudo chmod 755 /home/ftpsite/user1
重啟服務:
sudo systemctl restart vsftpd
sudo systemctl enable vsftpd # 設置開機自啟
測試登錄:
使用FTP客戶端(如FileZilla)或命令行工具測試:
ftp localhost
輸入虛擬用戶名(如user1
)和密碼(如password1
),若提示230 Login successful
則表示登錄成功。
無法登錄:
virtusers.db
權限是否為600
;/var/log/vsftpd.log
)定位錯誤。無法上傳文件:
write_enable=YES
;755
或775
,且所有者為映射的系統用戶);chroot
,確認allow_writeable_chroot=YES
。虛擬用戶無法切換目錄:
local_root
路徑是否存在;chroot_local_user=YES
是否與local_root
沖突(需配合allow_writeable_chroot
使用)。