Ubuntu 系统搭建 FTP 服务器
vsftpd 安装配置教程
本教程适用于原生 Ubuntu 服务器/桌面版以及 WSL(Windows Subsystem for Linux)环境,详细讲解 vsftpd 的安装、配置、防火墙设置及连接测试,全程采用命令行操作,适配 DevOps 工作流。
一、教程准备
-
环境要求
- Ubuntu 18.04/20.04/22.04 或兼容版本
- 具备 sudo 权限的用户
- 网络通畅(用于下载软件包)
-
工具说明
- FTP 服务端:vsftpd(轻量、安全,Ubuntu 官方推荐)
- 配置工具:vim
- 测试工具:lftp(命令行客户端)、FileZilla(图形化客户端)
二、步骤 1:安装 vsftpd
- 更新软件包索引
sudo apt update -y
-
安装 vsftpd
sudo apt install vsftpd -y -
验证服务状态
sudo systemctl status vsftpd- 若输出
active (running),说明服务启动成功; - 若未启动,执行
sudo systemctl start vsftpd手动启动。
- 若输出
-
设置开机自启
sudo systemctl enable vsftpd
三、步骤 2:备份并配置 vsftpd
vsftpd 的核心配置文件为 /etc/vsftpd.conf,配置前务必备份原文件,防止配置错误无法回滚。
-
备份配置文件
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak -
编辑配置文件
sudo vim /etc/vsftpd.conf -
修改核心配置项
将文件中原有配置替换为以下内容(注释已标注用途,按需调整):# 基础监听配置 listen=YES # 启用 IPv4 监听 listen_ipv6=NO # 关闭 IPv6 监听(按需开启) # 访问权限控制 anonymous_enable=NO # 禁止匿名访问(必设,提升安全性) local_enable=YES # 允许本地系统用户登录 write_enable=YES # 允许上传文件(若仅需下载,设为 NO) local_umask=022 # 上传文件权限掩码(022 → 文件 644/目录 755) # 安全禁锢配置 chroot_local_user=YES # 将用户限制在主目录,禁止访问系统其他路径 allow_writeable_chroot=YES # 解决 chroot 后无法写入的问题 # 被动模式配置(FTP 客户端必备) pasv_enable=YES # 启用被动模式 pasv_min_port=40000 # 被动模式最小端口 pasv_max_port=40100 # 被动模式最大端口 # 日志与其他配置 dirmessage_enable=YES # 显示目录欢迎信息 use_localtime=YES # 使用本地时间 xferlog_enable=YES # 启用传输日志 connect_from_port_20=YES # 启用 20 端口(FTP 主动模式数据端口) secure_chroot_dir=/var/run/vsftpd/empty pam_service_name=vsftpd rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO # 暂不启用 SSL/TLS(进阶配置可开启) -
保存并退出 vim
在 vim 中按下Esc,输入:wq回车保存。 -
重启 vsftpd 使配置生效
sudo systemctl restart vsftpd
四、步骤 3:配置防火墙(分环境处理)
Ubuntu 防火墙配置分 原生系统 和 WSL 环境 两种情况,需针对性操作。
情况 1:原生 Ubuntu 系统(物理机/虚拟机)
原生 Ubuntu 默认使用 ufw 防火墙,需开放 FTP 控制端口和被动模式端口范围。
-
安装 ufw(若未安装)
sudo apt install ufw -y -
开放端口
# 开放 21 端口(FTP 控制端口) sudo ufw allow 21/tcp # 开放被动模式端口范围 sudo ufw allow 40000:40100/tcp -
启用防火墙并查看规则
sudo ufw enable sudo ufw status
情况 2:WSL 环境
WSL 依赖 Windows 网络栈,内部 ufw 无法生效,需通过 Windows 高级防火墙 开放端口。
-
打开 Windows 高级防火墙
- 按下
Win + R,输入wf.msc回车。
- 按下
-
创建入站规则(开放 21 端口)
- 右键「入站规则」→「新建规则」;
- 规则类型选择「端口」→ 下一步;
- 选择「TCP」→ 勾选「特定本地端口」,输入
21→ 下一步; - 选择「允许连接」→ 下一步;
- 保持默认勾选(域、专用、公用)→ 下一步;
- 规则命名(如
FTP-21)→ 完成。
-
重复步骤 2,创建规则开放被动模式端口范围
40000-40100- 特定本地端口输入
40000-40100; - 规则命名(如
FTP-PASV-40000-40100)。
- 特定本地端口输入
五、步骤 4:创建 FTP 专用用户(可选)
为避免使用 root 或系统普通用户登录 FTP,建议创建专用 FTP 用户,并限制其仅能通过 FTP 访问。
-
创建用户并指定主目录
# 创建用户 ftpuser,主目录为 /home/ftpuser sudo useradd -m ftpuser -
设置用户密码
sudo passwd ftpuser- 输入两次密码(密码无回显,确保强度足够)。
-
限制用户仅能 FTP 登录(禁止 SSH 登录)
- 首先将
/sbin/nologin加入系统合法 shell 列表:sudo echo "/sbin/nologin" >> /etc/shells - 修改用户登录 shell:
sudo usermod -s /sbin/nologin ftpuser
- 首先将
六、步骤 5:测试 FTP 连接
方法 1:命令行测试(lftp)
-
安装 lftp
sudo apt install lftp -y -
连接 FTP 服务器
# 替换为你的服务器 IP 和用户名 lftp ftpuser@服务器IP地址 -
验证操作权限
- 查看目录:
ls - 上传文件:
put 本地文件路径 - 下载文件:
get 服务器文件路径 - 退出连接:
exit
- 查看目录:
方法 2:图形化测试(FileZilla)
-
打开 FileZilla,点击「文件」→「站点管理器」
-
新建站点,配置如下
- 协议:选择
FTP - 文件传输协议; - 主机:输入服务器 IP 地址;
- 端口:默认
21; - 登录类型:选择
正常; - 用户/密码:输入 FTP 用户名和密码。
- 协议:选择
-
点击「连接」,成功后即可可视化管理文件
七、常见问题排查
| 问题现象 | 排查方法 |
|---|---|
| 无法连接 FTP | 1. 检查 vsftpd 服务状态:sudo systemctl status vsftpd;2. 检查防火墙端口是否开放; 3. 确认服务器 IP 可访问。 |
| 可以连接但无法上传文件 | 1. 检查配置文件 write_enable=YES;2. 检查用户对主目录的写入权限: sudo chmod 755 /home/ftpuser;3. 确认 allow_writeable_chroot=YES。 |
| WSL 环境无法访问 | 1. 确认 Windows 防火墙已开放 21 和被动模式端口; 2. 查看 WSL IP 地址:`ip addr |
八、安全优化建议
-
启用 SSL/TLS 加密:修改
ssl_enable=YES,配置 SSL 证书,使用 FTPS 协议传输,防止数据明文泄露。 -
限制用户访问 IP:在
vsftpd.conf中添加tcp_wrappers=YES,通过/etc/hosts.allow和/etc/hosts.deny限制允许登录的 IP。 -
定期检查日志:FTP 传输日志默认路径为
/var/log/vsftpd.log,定期查看是否有异常登录记录。