在Ubuntu系统中搭建FTP服务器是许多企业和个人用户的需求,主要用于文件共享、数据传输等场景,本文将详细介绍如何在Ubuntu上使用vsftpd(Very Secure FTP Daemon)搭建一个安全、稳定的FTP服务器,包括安装配置、用户管理、安全设置等关键步骤。

安装vsftpd
vsftpd是Ubuntu中最常用的FTP服务器软件,以其安全性和稳定性著称,首先需要更新系统软件包列表,然后安装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 | 是否允许FTP命令修改文件 |
| chroot_local_user | NO | YES | 是否将用户限制在主目录 |
| allow_writeable_chroot | NO | YES | 是否允许chroot目录可写(需配合chroot_local_user使用) |
| pasv_enable | NO | YES | 是否启用被动模式(建议开启,便于客户端穿透防火墙) |
| pasv_min_port | 0 | 60000 | 被动模式最小端口 |
| pasv_max_port | 0 | 60100 | 被动模式最大端口 |
| user_sub_token | 用户主目录替换标识(如local_root=/home/$USER/ftp) |
||
| local_root | /home/$USER/ftp | 设置用户主目录路径 |
根据需求修改配置后,保存文件并重启vsftpd服务:
sudo systemctl restart vsftpd
创建FTP用户
为了安全起见,建议为FTP服务创建专用用户,而不是直接使用系统用户,例如创建一个名为ftpuser的用户:

sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser
参数说明:
-m:自动创建用户主目录-d:指定用户主目录-s /sbin/nologin:禁止用户登录SSH,仅允许FTP访问
为用户设置密码:
sudo passwd ftpuser
如果需要限制用户只能在主目录下活动,确保配置文件中chroot_local_user=YES和allow_writeable_chroot=YES已启用,需要为用户主目录设置正确的权限:
sudo chown -R ftpuser:ftpuser /home/ftpuser sudo chmod -R 755 /home/ftpuser
配置防火墙
Ubuntu默认使用UFW防火墙,需要开放FTP服务的端口(21端口用于主动模式,被动模式端口范围在配置文件中设置),执行以下命令:
sudo ufw allow 21/tcp sudo ufw allow 60000:60100/tcp sudo ufw reload
安全增强措施
- 禁用匿名访问:确保
anonymous_enable=NO,防止匿名用户上传或下载文件。 - 限制用户访问:通过
userlist_enable=YES和userlist_file=/etc/vsftpd.userlist创建用户白名单,仅允许列表中的用户访问,编辑/etc/vsftpd.userlist,每行一个用户名:echo "ftpuser" | sudo tee -a /etc/vsftpd.userlist
并在配置文件中添加:
userlist_enable=YES userlist_file=/etc/vsftpd.userlist userlist_deny=NO
- 启用SSL/TLS加密:生成SSL证书并启用加密传输,防止数据被窃听,生成证书:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
在配置文件中添加:
ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES ssl_tlsv1=YES ssl_sslv2=NO ssl_sslv3=NO rsa_cert_file=/etc/vsftpd/vsftpd.pem
- 日志记录:启用日志记录功能,便于排查问题:
xferlog_enable=YES xferlog_file=/var/log/vsftpd.log
测试FTP服务器
使用FileZilla等FTP客户端连接服务器,输入服务器IP地址、用户名和密码,如果连接失败,检查/var/log/vsftpd.log日志文件,排查错误原因,常见问题包括:
- 权限不足:确保用户主目录权限为755,文件权限为644。
- 防火墙拦截:确认端口已开放。
- chroot目录问题:确保用户对主目录有执行权限。
常见问题FAQs
Q1: 如何禁止FTP用户访问SSH?
A: 创建用户时使用-s /sbin/nologin参数,如sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser,如果用户已存在,可修改其shell为/sbin/nologin:
sudo usermod -s /sbin/nologin ftpuser
Q2: 如何实现多用户隔离且每个用户有独立目录?
A: 在配置文件中设置local_root=/home/$USER/ftp,并为每个用户创建独立的ftp目录,为用户ftpuser1创建目录:
sudo mkdir -p /home/ftpuser1/ftp sudo chown -R ftpuser1:ftpuser1 /home/ftpuser1/ftp sudo chmod -R 755 /home/ftpuser1/ftp
这样每个登录的用户都会被重定向到其/home/用户名/ftp目录,实现完全隔离。
