安裝vsftpd
大多數Linux發行版可通過包管理器安裝vsftpd(以CentOS為例):
sudo yum install vsftpd -y
安裝完成后,啟動服務并設置開機自啟:
sudo systemctl start vsftpd
sudo systemctl enable vsftpd
安裝必要工具
用于創建虛擬用戶數據庫的db_load
工具(屬于db4-utils
或db-util
包):
sudo yum install db4-utils -y # CentOS
sudo apt install db-util -y # Ubuntu/Debian
準備用戶信息文件
創建文本文件(如/etc/vsftpd/virtual_users.txt
),格式為奇數行用戶名、偶數行密碼(每行一個用戶):
sudo vi /etc/vsftpd/virtual_users.txt
示例內容:
user1
password1
user2
password2
生成數據庫文件
使用db_load
將文本文件轉換為哈希格式的數據庫(避免明文存儲密碼):
sudo db_load -T -t hash -f /etc/vsftpd/virtual_users.txt /etc/vsftpd/virtual_users.db
設置數據庫文件權限(僅root可讀寫):
sudo chmod 600 /etc/vsftpd/virtual_users.db
創建PAM配置文件
新建虛擬用戶專屬PAM文件(如/etc/pam.d/vsftpd.virtual
),內容如下(注意路徑中的.db
后綴需省略):
sudo vi /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
修改vsftpd主配置
編輯/etc/vsftpd.conf
,指定PAM服務名:
sudo vi /etc/vsftpd.conf
添加/修改以下行:
pam_service_name=vsftpd.virtual # 指向自定義PAM文件
創建虛擬宿主用戶
虛擬用戶需映射到系統用戶(僅用于權限控制,無登錄權限):
sudo useradd -d /home/ftp_virtual -s /sbin/nologin ftp_virtual
sudo chmod 700 /home/ftp_virtual # 限制目錄權限
配置vsftpd虛擬用戶映射
在/etc/vsftpd.conf
中啟用虛擬用戶功能,并關聯宿主用戶:
guest_enable=YES # 啟用虛擬用戶
guest_username=ftp_virtual # 虛擬用戶映射的系統用戶
virtual_use_local_privs=YES # 虛擬用戶繼承宿主用戶權限
開啟chroot限制
在/etc/vsftpd.conf
中添加以下配置,將用戶限制在自己的主目錄:
chroot_local_user=YES # 禁錮所有本地用戶(包括虛擬用戶)
allow_writeable_chroot=YES # 允許chroot目錄可寫(避免權限問題)
設置用戶專屬主目錄
為每個虛擬用戶創建主目錄(以user1
為例):
sudo mkdir -p /home/ftp_virtual/user1
sudo chown ftp_virtual:ftp_virtual /home/ftp_virtual/user1
sudo chmod 700 /home/ftp_virtual/user1
配置用戶專屬設置(可選)
若需為不同用戶設置不同權限(如禁止上傳),可創建用戶專屬配置文件:
sudo mkdir /etc/vsftpd/vsftpd_user_conf
sudo vi /etc/vsftpd/vsftpd_user_conf/user1
示例內容(禁止上傳):
local_root=/home/ftp_virtual/user1
write_enable=NO
在/etc/vsftpd.conf
中指定用戶配置目錄:
user_config_dir=/etc/vsftpd/vsftpd_user_conf
重啟vsftpd服務
應用所有配置變更:
sudo systemctl restart vsftpd
測試虛擬用戶登錄
使用FTP客戶端(如FileZilla)或命令行工具測試:
ftp localhost
輸入虛擬用戶名(如user1
)和密碼(如password1
),驗證是否能成功登錄并訪問對應目錄。
問題1:登錄時報錯“500 OOPS: cannot change directory”
原因:SELinux阻止ftp訪問用戶目錄。解決方法:
sudo setsebool -P ftpd_disable_trans 1 # 關閉SELinux對ftp的轉換檢查
問題2:被動模式無法連接
原因:未配置被動模式端口或安全組未放行。解決方法:
在/etc/vsftpd.conf
中添加:
pasv_enable=YES
pasv_min_port=30100
pasv_max_port=30200
pasv_address=服務器公網IP # 云服務器需指定公網IP
并在安全組中放行30100-30200
端口。
通過以上步驟,即可完成Linux VSFTP虛擬用戶的配置,實現安全、隔離的FTP服務。