vsftpd (Very Secure FTP Daemon) 預設使用系統帳號登入。生產環境常需:
① 獨立 FTP 帳號 (不佔用系統帳號)。
② 限制用戶僅能存取指定目錄 (chroot jail),防止目錄遍歷。
③ 禁止 Shell 登入 (安全強化)。
groupadd ftpusers
useradd -d /opt/lampp/htdocs/ftpuser -g ftpusers -s /sbin/nologin ftpuser
-d 家目錄 (FTP 根目錄)。-g 主群組。-s /sbin/nologin 禁止 Shell 登入 (亦可用 /bin/false)。passwd ftpuser
/etc/vsftpd/vsftpd.conf):
chroot_local_user=YES allow_writeable_chroot=YES # 允許 chroot 目錄可寫 (vsftpd 2.3.5+ 安全檢查) local_root=/opt/lampp/htdocs/ftpuser # 可選:統一指定根目錄,覆蓋家目錄
echo "ftpuser" >> /etc/vsftpd/chroot_list # 確認 vsftpd.conf 包含: chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list
systemctl restart vsftpd # 或 service vsftpd restart
使用 pam_userdb 或 libpam-pwdfile 驗證獨立密碼檔 (Berkeley DB / 純文字),完全脫離系統帳號體系。配置步驟:
htpasswd -c -b /etc/vsftpd/virt_users user1 pass1 (需 apache2-utils) 或 db_load -T -t hash -f /etc/vsftpd/virt_users.txt /etc/vsftpd/virt_users.db。useradd -d /var/empty -s /sbin/nologin virtual/etc/pam.d/vsftpd):auth required pam_userdb.so db=/etc/vsftpd/virt_usersaccount required pam_userdb.so db=/etc/vsftpd/virt_usersguest_enable=YESguest_username=virtualuser_config_dir=/etc/vsftpd/user_conf (每用戶獨立配置檔,指定 local_root、權限)。echo "local_root=/data/ftp/user1" > /etc/vsftpd/user_conf/user1# firewalld firewall-cmd --permanent --add-service=ftp firewall-cmd --permanent --add-port=20/tcp --add-port=21/tcp --add-port=40000-41000/tcp # 被動模式埠範圍 firewall-cmd --reload # iptables iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp --dport 20 -j ACCEPT iptables -A INPUT -p tcp --dport 40000:41000 -j ACCEPT # SELinux (RHEL/CentOS/Fedora) setsebool -P ftpd_full_access=1 semanage fcontext -a -t public_content_rw_t "/data/ftp(/.*)?" restorecon -Rv /data/ftp
ftp localhost # 或 lftp -u ftpuser,pass1 localhost # 檢查:ls、put、get、cd .. (應被限制在 chroot 內)