Linux 配置 vsftpd
vsftpd 简介
vsftpd(Very Secure FTP Daemon)是一款轻量级、高性能且安全的 FTP 服务器软件,专为 Linux 系统设计,其名称中的“Very Secure”体现了其注重安全性的设计理念,支持匿名访问、虚拟用户、SSL/TLS 加密等多种功能,是企业和个人用户搭建 FTP 服务的常用选择,相较于其他 FTP 服务器软件,vsftpd 以低资源占用、高稳定性和丰富的安全特性著称,适用于文件传输、共享等场景。

安装 vsftpd
在大多数 Linux 发行版中,vsftpd 可通过包管理器直接安装,以 Ubuntu/Debian 为例,执行以下命令:
sudo apt update sudo apt install vsftpd
对于 CentOS/RHEL 系统,使用 yum 或 dnf:
sudo yum install vsftpd # CentOS 7 及以下 sudo dnf install vsftpd # CentOS 8 及以上
安装完成后,启动 vsftpd 服务并设置为开机自启:
sudo systemctl start vsftpd sudo systemctl enable vsftpd
基础配置文件解析
vsftpd 的主配置文件位于 /etc/vsftpd.conf,其核心参数决定了服务器的行为,以下是常用配置项及其说明:
-
匿名访问控制
anonymous_enable=YES:允许匿名用户访问。no_anon_password=YES:匿名用户无需密码即可登录。anon_upload_enable=YES:允许匿名用户上传文件(需配合write_enable=YES)。anon_mkdir_write_enable=YES:允许匿名用户创建目录。
-
本地用户访问控制
local_enable=YES:允许本地系统用户登录。write_enable=YES:允许本地用户上传、修改文件。local_umask=022:设置本地用户上传文件的默认权限掩码。
-
用户目录限制

chroot_local_user=YES:将本地用户限制在其主目录下,防止越权访问。allow_writeable_chroot=YES:允许被 chroot 的用户拥有写权限(需 vsftpd 3.2.0 以上版本)。
-
安全与性能优化
listen=YES:让 vsftpd 以独立模式监听端口(默认 21)。pasv_enable=YES:启用被动模式,适合客户端位于防火墙后的场景。pasv_min_port=30000和pasv_max_port=31000:设置被动模式端口范围。userlist_enable=YES:启用用户列表,配合userlist_file指定允许/拒绝的用户文件。
-
日志记录
xferlog_enable=YES:启用传输日志。xferlog_file=/var/log/vsftpd.log:指定日志文件路径。
修改配置文件后,需重启 vsftpd 服务使配置生效:
sudo systemctl restart vsftpd
创建 FTP 用户
-
系统用户
直接使用useradd命令创建本地用户,并设置密码:sudo useradd -m ftpuser # -m 表示创建用户主目录 sudo passwd ftpuser
-
虚拟用户(推荐)
虚拟用户独立于系统用户,可精细控制权限,安全性更高,配置步骤如下:- 安装
db4-utils(用于生成数据库文件):sudo apt install db4-utils # Ubuntu/Debian sudo yum install db4-utils # CentOS/RHEL
- 创建用户名密码文件(如
/etc/vsftpd/virtusers.txt),格式为:username1 password1 username2 password2 - 生成数据库文件:
sudo db_load -T -t hash -f /etc/vsftpd/virtusers.txt /etc/vsftpd/virtusers.db
- 创建 PAM 认证文件
/etc/pam.d/vsftpd.virt如下:auth required pam_userdb.so db=/etc/vsftpd/virtusers account required pam_userdb.so db=/etc/vsftpd/virtusers - 修改
/etc/vsftpd.conf,添加虚拟用户支持:guest_enable=YES guest_username=ftpuser # 指定映射的系统用户 pam_service_name=vsftpd.virt user_config_dir=/etc/vsftpd/virtuser_conf # 为虚拟用户单独配置目录
- 为虚拟用户创建配置文件(如
/etc/vsftpd/virtuser_conf/username1),设置权限:local_root=/home/ftpuser/username1 # 指定用户目录 write_enable=YES anon_world_readable_only=NO
- 安装
防火墙与 SELinux 配置
-
防火墙开放端口
- Ubuntu/Debian(使用 UFW):
sudo ufw allow 21/tcp sudo ufw allow 30000:31000/tcp # 被动模式端口
- CentOS/RHEL(使用 firewalld):
sudo firewall-cmd --permanent --add-service=ftp sudo firewall-cmd --permanent --add-port=30000-31000/tcp sudo firewall-cmd --reload
- Ubuntu/Debian(使用 UFW):
-
SELinux 策略调整(CentOS/RHEL)
若 SELinux 处于 enforcing 模式,需调整策略以允许 FTP 访问:
sudo setsebool -P ftpd_full_access on
常见问题与解决方案
-
用户无法登录
- 检查
/etc/vsftpd/ftpusers和/etc/vsftpd/user_list文件,确认用户未被禁止。 - 确认防火墙和 SELinux 配置是否正确。
- 检查
-
被动模式连接失败
- 检查客户端是否设置了 PASV 模式,并确认服务器端口范围未被占用。
- 使用
netstat -tuln | grep 30000检查端口是否开放。
-
权限不足
- 确认用户目录权限(如
chown ftpuser:ftpuser /home/ftpuser)。 - 检查
write_enable和chroot相关配置是否正确。
- 确认用户目录权限(如
安全增强建议
- 禁用匿名访问:除非必要,否则将
anonymous_enable设为NO。 - 启用 SSL/TLS 加密:生成证书并配置
ssl_enable=YES,防止数据明文传输。 - 限制用户访问:通过
userlist_file和userlist_deny=NO仅允许特定用户登录。 - 定期更新:保持 vsftpd 和系统软件包为最新版本,修复安全漏洞。
通过以上步骤,可成功搭建一个安全、稳定的 FTP 服务器,根据实际需求调整配置参数,并结合防火墙、SELinux 等工具进一步强化安全性,确保文件传输过程的安全可控。



















