在Ubuntu服务器上搭建FTP服务是许多管理员和开发者的常见需求,FTP(文件传输协议)用于在客户端和服务器之间传输文件,适用于网站维护、文件共享等场景,本文将详细介绍在Ubuntu服务器上安装、配置FTP服务(以vsftpd为例)的全过程,包括安装步骤、配置优化、安全设置以及常见问题的解决方法。

安装vsftpd
vsftpd(Very Secure FTP Daemon)是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 | YES | YES | 是否启用被动模式 |
| pasv_min_port | 0 | 60000 | 被动模式最小端口 |
| pasv_max_port | 0 | 60100 | 被动模式最大端口 |
| user_sub_token | 动态目录替换标记(如local_root=/home/$USER/ftp) |
根据需求修改配置后,保存文件并重启vsftpd服务:
sudo systemctl restart vsftpd
创建FTP用户并设置目录权限
为安全起见,建议为FTP服务创建专用用户,创建用户ftpuser:

sudo adduser ftpuser
根据提示设置密码和用户信息,默认情况下,用户主目录为/home/ftpuser,若需限制用户访问目录,可通过chroot实现,确保主目录权限正确:
sudo chmod 755 /home/ftpuser sudo mkdir -p /home/ftpuser/ftp sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp
若配置文件中设置了local_root=/home/$USER/ftp,用户登录后将进入该目录。
防火墙与端口配置
Ubuntu默认使用UFW防火墙,需开放FTP相关端口,FTP使用20(数据端口)和21(控制端口),被动模式还需开放配置的端口范围(如60000-60100):
sudo ufw allow 21/tcp sudo ufw allow 60000:60100/tcp sudo ufw reload
若使用iptables,需手动添加规则:
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 60000:60100 -j ACCEPT sudo iptables-save > /etc/iptables/rules.v4
安全优化措施
- 禁用匿名访问:确保
anonymous_enable=NO,防止恶意上传或下载。 - 限制用户权限:通过
write_enable控制用户上传权限,避免误操作。 - 启用SSL/TLS:生成SSL证书并启用加密传输,防止数据泄露,编辑配置文件,添加以下内容:
ssl_enable=YES allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES rsa_cert_file=/etc/ssl/certs/vsftpd.pem
生成证书:
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/certs/vsftpd.pem
- 日志记录:启用日志功能,记录用户操作:
xferlog_enable=YES xferlog_file=/var/log/vsftpd.log
常见问题排查
- 无法连接服务器:检查防火墙规则、vsftpd服务状态及端口占用情况(
sudo netstat -tlnp | grep 21)。 - 用户被限制在主目录无法访问:确保
chroot_local_user=YES且目录权限正确(755),或使用allow_writeable_chroot=YES允许写入。
相关问答FAQs
Q1: 如何在Ubuntu服务器上限制FTP用户的访问目录?
A1: 通过配置chroot_local_user=YES将用户限制在主目录,并设置local_root指定访问路径,在vsftpd.conf中添加local_root=/home/$USER/ftp,用户登录后将进入该目录,同时确保目录权限为755,用户对目录有执行权限。
Q2: FTP连接时提示“530 Login incorrect”如何解决?
A2: 首先检查用户名和密码是否正确,确认用户已创建且未被锁定,若使用虚拟用户,需检查/etc/vsftpd.user_list或/etc/vsftpd.chroot_list文件配置,检查/etc/pam.d/vsftpd文件是否包含pam_shells.so模块,可能导致用户登录失败。
