在Ubuntu系统中搭建FTP服务器是许多企业和个人用户的需求,尤其适用于文件共享、数据备份或网站资源托管等场景,FTP(File Transfer Protocol)是一种标准的网络协议,用于在客户端和服务器之间传输文件,本文将详细介绍如何在Ubuntu上安装、配置和管理FTP服务器,包括使用vsftpd(Very Secure FTP Daemon)这一安全且高效的FTP服务软件,涵盖安装步骤、用户权限设置、防火墙配置、安全增强措施以及常见问题的解决方法。

安装vsftpd
vsftpd是Ubuntu默认推荐的FTP服务器软件,以其安全性和稳定性著称,通过SSH登录到Ubuntu服务器,确保系统已更新至最新版本,执行以下命令更新软件包列表并安装vsftpd:
sudo apt update sudo apt install vsftpd -y
安装完成后,vsftpd服务会自动启动,可以通过以下命令检查服务状态:
sudo systemctl status vsftpd
如果服务未运行,使用sudo systemctl start vsftpd启动,并通过sudo systemctl enable vsftpd设置开机自启。
配置vsftpd
vsftpd的主配置文件位于/etc/vsftpd.conf,默认配置可能无法满足所有需求,因此需要手动修改,备份原始配置文件:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
然后使用文本编辑器(如nano)打开配置文件:
sudo nano /etc/vsftpd.conf
以下是一些关键配置项及其说明:
| 配置项 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
| anonymous_enable | YES | NO | 是否允许匿名用户访问,建议关闭以提高安全性 |
| local_enable | YES | YES | 是否允许本地用户登录 |
| write_enable | YES | YES | 是否允许本地用户上传文件 |
| chroot_local_user | NO | YES | 是否将本地用户限制在其主目录中 |
| allow_writeable_chroot | NO | YES | 是否允许chroot目录可写(需配合chroot_local_user使用) |
| pasv_enable | NO | YES | 是否启用被动模式,适用于客户端位于NAT网络中 |
| pasv_min_port | 0 | 60000 | 被动模式使用的最小端口 |
| pasv_max_port | 0 | 60100 | 被动模式使用的最大端口 |
| user_sub_token | $USER | $USER | 用于动态生成用户目录的变量 |
| local_root | /home/$USER | /home/$USER | 本地用户登录后的根目录 |
修改配置时,需根据实际需求调整,若要限制用户仅能访问其主目录,确保chroot_local_user=YES和allow_writeable_chroot=YES同时启用(注意:allow_writeable_chroot在vsftpd 3.0.0及以上版本中需要显式启用),保存文件后,重启vsftpd服务使配置生效:
sudo systemctl restart vsftpd
创建FTP用户
为了安全起见,建议为FTP服务创建专用用户,而非直接使用系统用户,假设创建一个名为ftpuser的用户,并设置其主目录为/home/ftpuser:

sudo useradd -m -s /sbin/nologin ftpuser
-m表示创建主目录,-s /sbin/nologin禁止该用户通过SSH登录,然后为用户设置密码:
sudo passwd ftpuser
如果需要限制用户访问特定目录(如/var/www),可修改local_root配置或使用符号链接,将/var/www链接到用户主目录:
sudo ln -s /var/www /home/ftpuser/www
配置防火墙
Ubuntu默认使用UFW(Uncomplicated Firewall)管理防火墙规则,若FTP服务需要对外访问,需开放FTP相关端口,FTP使用两个端口:控制端口(默认21)和数据端口(被动模式需配置范围),执行以下命令开放端口:
sudo ufw allow 21/tcp sudo ufw allow 60000:60100/tcp
然后启用防火墙:
sudo ufw enable
安全增强措施
- 禁用匿名访问:确保
anonymous_enable=NO,避免匿名用户上传或下载文件。 - 限制用户权限:通过
chroot_local_user将用户限制在主目录,防止其访问系统敏感文件。 - 启用SSL/TLS加密:为FTP数据传输添加加密,防止信息泄露,生成SSL证书:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
然后在配置文件中启用SSL:
ssl_enable=YES force_local_data_ssl=YES force_local_logins_ssl=YES
- 更新vsftpd:定期运行
sudo apt update && sudo apt upgrade确保软件包为最新版本。
常见问题排查
- 无法连接FTP服务器:检查vsftpd服务是否运行,防火墙是否开放端口,以及用户权限是否正确。
- 用户无法上传文件:确认
write_enable=YES,用户对目标目录是否有写权限,以及allow_writeable_chroot是否启用。
相关问答FAQs
Q1: 如何在Ubuntu中限制FTP用户仅能下载文件,不能上传?
A: 在/etc/vsftpd.conf中设置write_enable=NO,这将禁用所有用户的写入权限,若需针对特定用户限制,可使用user_config_dir选项创建用户配置文件,并在其中覆盖write_enable为NO。
Q2: FTP连接时提示“500 OOPS: vsftpd: refusing to run with writable root inside chroot”怎么办?
A: 此错误是由于chroot目录可写导致的,在vsftpd 3.0.0及以上版本中,需在配置文件中显式设置allow_writeable_chroot=YES,确保用户主目录的所有权正确(如sudo chown ftpuser:ftpuser /home/ftpuser)。
