Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Vsftpd 虛擬用戶配置完整教程(PAM + db4)

編輯:Linux 教學

前言

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*

配置 PAM 驗證

# 編輯 /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/

修改 vsftpd.conf 主配置

# 完整範例(請根據實際情況調整)
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

常見問題排查

  • 530 Login incorrect:檢查 /var/log/secure,確認 PAM 路徑、資料庫權限、密碼是否正確。
  • 500 OOPS: cannot change directory:local_root 目錄不存在或權限錯誤(需屬於 virftp)。
  • 無法上傳/建立目錄:確認 write_enable=YES、virtual_use_local_privs=YES、目錄寫入權限。
  • PASV 模式連不上:開啟 pasv_enable=YES、設定 pasv_min_port/pasv_max_port、防火牆放行對應埠、若在 NAT 後設定 pasv_address。

安全加固建議

  1. 帳密檔 vsftpd_login 僅 root 可讀(chmod 600)。
  2. 啟用 SSL/TLS(ssl_enable=YES、配置憑證),防止明文傳輸密碼。
  3. 限制來源 IP(tcp_wrappers 或 iptables)。
  4. 定期審計 /var/log/vsftpd.log 與 /var/log/secure。

總結

Vsftpd 虛擬用戶方案「系統用戶少、權限隔離好、配置彈性大」,極適合多人共享 FTP 服務場景。核心在於:PAM 對接 db4 資料庫驗證 + guest_username 映射系統用戶 + user_config_dir 實現個性化配置。按步驟操作並做好防火牆與日誌審計,即可獲得安全易維護的 FTP 服務。

Copyright © Windows教程網 All Rights Reserved