Vsftpd 支援虛擬用戶:不建立系統帳號,僅在 FTP 層面驗證用戶名/密碼,並映射到一個真實的系統用戶(如 virftp)進行檔案操作。這樣更安全、管理更輕量。本文記錄 CentOS/RHEL 環境下,基於 PAM + db4 (Berkeley DB) 的完整配置流程。
# 安裝必要套件
yum -y install vsftpd pam db4-utils
# 建立映射用的系統用戶(禁用登入 Shell)
useradd virftp -s /sbin/nologin
# 1. 建立明文帳密檔(奇數行用戶名,偶數行密碼)
mkdir -p /etc/vsftpd
cat > /etc/vsftpd/vsftpd_login <<'EOF'
ftpuser1
121212
ftpuser2
12121212
EOF
# 2. 生成 Berkeley DB 雜湊資料庫
db_load -T -t hash -f /etc/vsftpd/vsftpd_login /etc/vsftpd/vsftpd_login.db
# 3. 設定權限(僅 root 可讀)
chmod 600 /etc/vsftpd/vsftpd_login*
# 編輯 /etc/pam.d/vsftpd,在最前面插入兩行(原有內容保留或註釋)
auth sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
account sufficient /lib/security/pam_userdb.so db=/etc/vsftpd/vsftpd_login
注意: 64 位系統路徑可能為 /lib64/security/,請用 ls /lib/security/pam_userdb.so 確認。
mkdir -p /etc/vsftpd/vsftpd_user_conf
# 為每個虛擬用戶建立同名配置檔
cat > /etc/vsftpd/vsftpd_user_conf/ftpuser1 <<'EOF'
local_root=/home/virftp/ftpuser1
anonymous_enable=NO
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
idle_session_timeout=600
data_connection_timeout=120
max_clients=10
max_per_ip=5
local_max_rate=50000
EOF
# 建立家目錄並授權
mkdir -p /home/virftp/ftpuser1
chown -R virftp:virftp /home/virftp/
# 完整範例(請根據實際情況調整)
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
anon_upload_enable=NO
anon_mkdir_write_enable=NO
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_file=/var/log/vsftpd.log
xferlog_std_format=YES
nopriv_user=vsftpd
async_abor_enable=YES
ascii_upload_enable=YES
ascii_download_enable=YES
ftpd_banner=Welcome to FTP service.
listen=YES
chroot_local_user=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
# ===== 虛擬用戶核心開關 =====
guest_enable=YES
guest_username=virftp
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vsftpd_user_conf
| 參數 | 作用 |
|---|---|
guest_enable=YES | 啟用虛擬用戶模式,非匿名登入者皆視為虛擬用戶 |
guest_username=virftp | 虛擬用戶映射的系統用戶 |
virtual_use_local_privs=YES | 虛擬用戶享有本地用戶權限(寫入、建立目錄等) |
user_config_dir | 虛擬用戶個別配置目錄,檔名=用戶名 |
chroot_local_user=YES | 限制用戶僅能在自家目錄活動(安全必開) |
# 啟動服務
/etc/init.d/vsftpd start
# 或 systemctl start vsftpd
# 測試登入
lftp localhost -u ftpuser1,121212
# 或 ftp localhost
/var/log/secure,確認 PAM 路徑、資料庫權限、密碼是否正確。local_root 目錄不存在或權限錯誤(需屬於 virftp)。write_enable=YES、virtual_use_local_privs=YES、目錄寫入權限。pasv_enable=YES、設定 pasv_min_port/pasv_max_port、防火牆放行對應埠、若在 NAT 後設定 pasv_address。vsftpd_login 僅 root 可讀(chmod 600)。ssl_enable=YES、配置憑證),防止明文傳輸密碼。tcp_wrappers 或 iptables)。/var/log/vsftpd.log 與 /var/log/secure。Vsftpd 虛擬用戶方案「系統用戶少、權限隔離好、配置彈性大」,極適合多人共享 FTP 服務場景。核心在於:PAM 對接 db4 資料庫驗證 + guest_username 映射系統用戶 + user_config_dir 實現個性化配置。按步驟操作並做好防火牆與日誌審計,即可獲得安全易維護的 FTP 服務。