FTP(File Transfer Protocol)是一种标准的网络文件传输协议,它使得在客户端与服务器之间上传和下载文件成为可能。
在 Linux 环境中,vsftpd 是一款广泛使用的、开源的 FTP 服务器软件,以其出色的安全性和稳定性著称。本文将以 CentOS 7 系统为例,详细介绍 vsftpd 的安装、配置过程,并重点讲解如何配置更安全的虚拟用户模式。
一、安装 vsftpd
1. 使用 yum 源安装
最便捷的安装方式是使用系统包管理器。在终端中执行以下命令:
yum install vsftpd
2. 其他安装方式
如果您的 yum 源中未包含 vsftpd,可以选择从开源镜像站下载 RPM 包,或从官网获取源码进行编译安装。
二、创建用户
1. 创建系统用户(映射用户)
首先,我们需要创建一个用于映射所有虚拟用户的本地系统用户,并设置其主目录。
# 创建 FTP 文件存储目录
mkdir -p /data/ftproot
# 创建系统用户,指定其主目录并禁止登录 Shell
useradd -d /data/ftproot -s /sbin/nologin ftpuser
# 设置目录权限为 755
chmod 755 /data/ftproot
2. 创建虚拟用户列表
虚拟用户并非真实的 Linux 系统用户,其账户信息存储在独立的数据库中。首先创建用户列表文件:
vi /etc/vsftpd/virtual_users
文件格式为:奇数行为用户名,偶数行为对应密码。
例如,创建 user1 和 user2 两个用户:
user1
password1
user2
password2
3. 生成虚拟用户认证文件
使用 db_load 命令将文本用户列表转换为 Berkeley DB 格式的认证数据库。注意:若后续修改了用户密码,需重新执行此命令。
db_load -T -t hash -f /etc/vsftpd/virtual_users /etc/vsftpd/virtual_users.db
4. 配置 PAM 认证
编辑 PAM 认证配置文件,使 vsftpd 使用我们创建的虚拟用户数据库进行身份验证。
vi /etc/pam.d/vsftpd
注释掉原有的本地用户认证配置,添加以下两行(请确保路径正确):
auth required pam_userdb.so db=/etc/vsftpd/virtual_users
account required pam_userdb.so db=/etc/vsftpd/virtual_users
三、修改配置文件
1. 修改 vsftpd 主配置文件
主配置文件为 /etc/vsftpd/vsftpd.conf。建议先查看现有有效配置:
grep -v '^#' /etc/vsftpd/vsftpd.conf
根据以下清单修改或确认配置项:
anonymous_enable=NO # 禁止匿名登录,提升安全性
local_enable=YES # 启用本地用户模式(虚拟用户基于此)
write_enable=YES # 允许写操作(上传、创建目录等)
local_umask=022
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=YES # 以独立守护进程模式监听 IPv4
listen_ipv6=NO # 关闭 IPv6 监听
pam_service_name=vsftpd # 指定 PAM 配置文件名称
userlist_enable=YES
tcp_wrappers=YES
此外,需要在文件末尾添加以下关键配置,以启用虚拟用户并设置相关参数:
guest_enable=YES # 启用虚拟用户功能
guest_username=ftpuser # 指定虚拟用户映射到的本地系统用户
user_config_dir=/etc/vsftpd/virtual_user_conf # 虚拟用户独立配置目录
allow_writeable_chroot=YES # 允许在 `chroot` 禁锢的目录内进行写操作
# 设置被动模式端口范围,便于防火墙规则配置
pasv_min_port=50000
pasv_max_port=50010
2. 为虚拟用户添加独立配置文件
创建虚拟用户的独立配置目录及文件:
mkdir -p /etc/vsftpd/virtual_user_conf
touch /etc/vsftpd/virtual_user_conf/{user1,user2}
为每个用户(如 user1)编辑其配置文件,可以设置个性化的权限和限制。一个基础配置示例如下:
local_root=/data/ftproot # 指定该用户的根目录
anon_umask=022 # 设置上传文件的默认权限掩码
anon_world_readable_only=NO
anon_upload_enable=YES # 允许上传
anon_mkdir_write_enable=YES # 允许创建目录
anon_other_write_enable=YES # 允许其他写操作(重命名、删除等)
max_per_ip=1000 # 每个IP最大连接数
max_clients=100 # 总最大客户端数
四、启动 vsftpd 服务
完成配置后,启动 vsftpd 服务并设置为开机自启:
systemctl start vsftpd
systemctl enable vsftpd
检查服务运行状态,确认启动成功:
systemctl status vsftpd
五、开放端口与连接测试
要使 FTP 服务可访问,需在系统防火墙中放行相关端口:
- 命令端口:TCP 21
- 被动模式数据端口:TCP 50000-50010(与配置中的
pasv_min_port 和 pasv_max_port 对应)
若服务器位于云平台,还需在云服务商的安全组/网络ACL中放行上述端口。
配置完成后,即可使用 FileZilla、WinSCP 等 FTP 客户端,使用配置的虚拟用户名和密码进行连接测试,验证文件上传、下载功能是否正常。
扩展说明:
- 完整的
vsftpd 配置选项可参考官方文档:https://security.appspot.com/vsftpd/vsftpd_conf.html
- 若服务器需要通过公网 IP 提供被动模式服务,建议在
vsftpd.conf 中明确设置 pasv_address= 您的公网 IP,以解决可能的连接问题。