.## 1. 介绍
在 Ubuntu 上搭建 FTP 服务器是一个非常实用的解决方案,适用于希望高效传输文件的开发者和管理员。尤其是在搭建家庭服务器或简单的内部文件共享环境时,FTP(文件传输协议)仍然是一个易于部署且直接的选项。
什么是 FTP 服务器?
FTP 服务器是一种专用的服务器软件,用于在互联网或局域网中传输文件。用户使用 FTP 客户端程序连接到服务器,以上传或下载文件。
虽然 SFTP、SCP 等安全替代方案已变得更为常见,但由于 FTP 的简单性和轻量特性,它仍被广泛使用。在受限网络或基本使用场景下,FTP 仍然是一种实用且高效的协议。
FTP 服务器在 Ubuntu 上的作用
Ubuntu 是最流行的 Linux 发行版之一,广泛用于服务器环境。通过在 Ubuntu 上部署 FTP 服务器,多个设备和用户之间的文件共享变得更加便捷。
典型使用场景包括:
- 将文件传输到 Web 服务器
- 与 Raspberry Pi 等物联网设备集成
- 共享公司内部文档
Ubuntu 与 FTP 服务器的组合实现了灵活高效的文件管理。
本文目的及目标读者
本文以一步步的方式讲解如何在 Ubuntu 上搭建 FTP 服务器,即使是初学者也能轻松理解。本文面向的读者包括:
- 熟悉基本的 Ubuntu 操作,但对 FTP 仍是新手
- 想为本地或轻量级业务使用搭建 FTP 服务器
- 想了解安全注意事项以及文件名编码等问题
按照本指南的步骤操作后,您将能够构建一个安全且实用的 FTP 服务器环境。接下来,我们将从安装最流行的 FTP 服务器之一 vsftpd 开始。
2. 安装 vsftpd
在 Ubuntu 上构建 FTP 服务器时,最常用的软件是 vsftpd(Very Secure FTP Daemon)。顾名思义,它以安全为设计核心,轻量且稳定,因而在企业和教育环境中被广泛采用。
本节将说明如何在 Ubuntu 上安装 vsftpd 并配置服务自动启动。
安装 vsftpd
首先,使用 Ubuntu 的包管理系统(APT)安装 vsftpd。按顺序运行以下命令:
sudo apt update
sudo apt install vsftpd
sudo apt update: 更新软件包列表sudo apt install vsftpd: 安装 vsftpd 包
安装完成后,vsftpd 服务会自动启动。
检查服务状态
要验证 vsftpd 是否已正确安装并运行,请使用以下命令:
sudo systemctl status vsftpd
如果看到 active (running),说明 FTP 服务器运行正常。
启用自动启动
默认情况下,vsftpd 通常已设置为自动启动,但最好确认一下:
sudo systemctl enable vsftpd
这可确保系统重启后 vsftpd 能自动启动。
不要忘记防火墙 (UFW) 设置
如果 Ubuntu 上已启用 UFW(Uncomplicated Firewall),必须放行 FTP 端口:
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
这将打开 FTP 的标准端口:20(数据) 和 21(命令)。
修改防火墙规则后,重新加载 UFW:
sudo ufw reload
3. 基本配置
安装 vsftpd 后,下一步是通过编辑配置文件来自定义其行为。虽然 vsftpd 提供了非常细粒度的控制,但许多功能默认是关闭的,需要显式启用所需的功能。
本节将说明最常用且必需的配置选项。
配置文件的位置
主配置文件 vsftpd 位于:
/etc/vsftpd.conf
使用以下命令编辑该文件:
sudo nano /etc/vsftpd.conf
修改完成后,重新启动 vsftpd 以使更改生效:
sudo systemctl restart vsftpd
允许写操作(上传、删除、修改)
默认情况下,vsftpd 不允许文件上传或修改。要启用写权限,请取消注释或添加以下行:
write_enable=YES
这将允许用户在其主目录中上传、删除和修改文件。
启用本地用户登录
要允许 Ubuntu 系统用户通过 FTP 登录,请启用以下选项:
local_enable=YES
这将允许 /etc/passwd 中列出的用户使用 FTP 登录。
启用目录列表
如果 FTP 客户端的目录列表失败,请检查以下设置:
listen=YES
listen_ipv6=NO
如果系统已禁用 IPv6,但 listen_ipv6=YES 仍保持启用,可能会导致连接问题。
设置登录横幅(可选)
您可以在用户连接到 FTP 服务器时显示自定义消息:
ftpd_banner=Welcome to your custom Ubuntu FTP server!
这对于显示运营通知或联系信息非常有用。
启用 ASCII 模式传输(如有需要)
如果需要正确传输换行格式不同的文本文件,请启用 ASCII 模式:
ascii_upload_enable=YES
ascii_download_enable=YES
大多数情况下二进制模式已足够,但在特定环境中 ASCII 模式可能会有帮助。
vsftpd 对每项功能都需要显式授权,使配置透明且安全。修改配置文件后务必重新启动服务。
4. 加强安全性
虽然 FTP 使用方便,但默认情况下不加密流量,这会带来安全隐患——尤其是在互联网环境下使用时。正确的安全配置至关重要。
本节介绍 vsftpd 中可用的关键安全措施。
使用 chroot 限制用户访问
允许 FTP 用户访问其主目录之外的目录是危险的。使用 chroot 将用户限制在其主目录内。
chroot_local_user=YES
allow_writeable_chroot=YES
chroot_local_user=YES可防止用户访问其主目录以上的目录。- 当主目录具有写权限时,需要
allow_writeable_chroot=YES。
如果未设置此项,会出现以下错误:
500 OOPS: vsftpd: refusing to run with writable root inside chroot限制登录用户(白名单)
让所有系统用户都能通过 FTP 登录会增加安全风险。请改用白名单方式限制访问。
userlist_enable=YES
userlist_file=/etc/vsftpd.userlist
userlist_deny=NO
将允许的用户添加到列表中:
sudo nano /etc/vsftpd.userlist
ftpuser1
ftpuser2
只有明确列出的用户才能登录。
使用 FTPS(SSL/TLS)启用加密通信
标准 FTP 以明文方式传输凭据和数据。为防止被窃听,请启用 FTPS(基于 SSL/TLS 的 FTP)。
创建 SSL 证书:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
在 vsftpd.conf 中添加以下内容:
ssl_enable=YES
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
客户端现在可以使用显式 FTPS 进行连接。
禁用不必要的功能
关闭未使用的功能以减小攻击面:
anonymous_enable=NO
此设置显式禁用匿名登录。
5. 支持日文文件名
在通过 FTP 传输文件时,日文文件名可能因编码不匹配而出现乱码——尤其是在 Windows 与 Ubuntu 之间传输时。
常见的文件名编码问题原因
- Ubuntu 区域设置未设为 UTF-8
- FTP 客户端编码不匹配
- vsftpd 未以 UTF-8 模式运行
验证并配置 Ubuntu 区域设置
locale
LANG=ja_JP.UTF-8
如果未启用 UTF-8:
sudo update-locale LANG=ja_JP.UTF-8
source /etc/default/locale
sudo locale-gen ja_JP.UTF-8
验证 vsftpd 的 UTF-8 支持
utf8_filesystem=YES
此选项在所有版本中可能不存在,但系统的 UTF-8 区域设置通常已足够。
FTP 客户端设置(以 FileZilla 为例)
- 打开站点管理器
- 选择服务器
- 打开 “字符集” 选项卡
- 启用自定义字符集并设置为
UTF-8
6. 被动模式与防火墙配置
FTP 问题(如目录列表失败或传输卡住)往往是由于被动模式设置错误或防火墙配置导致的。
什么是被动模式?
- 主动模式: 服务器发起数据连接
- 被动模式: 客户端发起所有连接
强烈建议在现代网络中使用被动模式。
在 vsftpd 中启用被动模式
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
指定外部 IP 地址(NAT 环境)
pasv_address=203.0.113.45
在 UFW 中打开所需端口
sudo ufw allow 20/tcp
sudo ufw allow 21/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw reload
7. 按用户配置
在生产环境中,通常会为不同用户分配不同的权限和目录。
创建专用 FTP 用户
sudo adduser ftpuser1
sudo useradd -m -s /usr/sbin/nologin ftpuser2
推荐的目录结构
/home/ftpuser1/
└── files/
sudo mkdir /home/ftpuser1/files
sudo chown ftpuser1:ftpuser1 /home/ftpuser1/files
sudo chmod 755 /home/ftpuser1
用户专属配置文件
user_config_dir=/etc/vsftpd_user_conf
sudo mkdir /etc/vsftpd_user_conf
sudo nano /etc/vsftpd_user_conf/ftpuser1
local_root=/home/ftpuser1/files
write_enable=YES
8. 操作验证
完成所有设置步骤后,验证 FTP 服务器是否正常运行。
命令行测试
ftp localhost
ls
cd files
put test.txt
get test.txt
GUI 客户端测试(FileZilla)
验证连接、目录列表、上传和下载是否正常。
9. 故障排除
常见的 FTP 问题及解决方案包括登录失败、权限错误、被动模式配置错误以及编码问题。
10. 结论
本文阐述了如何在 Ubuntu 上使用 vsftpd 构建安全、实用的 FTP 服务器,涵盖了安装、配置、安全、编码、被动模式、用户管理、验证以及故障排除等内容。
FAQ
关于在 Ubuntu 上设置和运行 FTP 服务器的常见问题。



