在Ubuntu系统中搭建FTP服务器是许多企业和个人用户常用的文件共享方案,它支持跨平台传输、权限管理等功能,适用于文件备份、网站资源上传等场景,以下将详细介绍在Ubuntu上配置FTP服务器的完整流程,包括安装、配置、安全设置及故障排查等内容。

安装FTP服务器软件
Ubuntu系统常用的FTP服务器软件有vsftpd(Very Secure FTP Daemon)、proftpd等,其中vsftpd以轻量、安全著称,是默认推荐的选择,安装步骤如下:
-
更新系统软件包列表
在终端中执行以下命令,确保系统软件包为最新版本:sudo apt update sudo apt upgrade -y
-
安装vsftpd
使用apt命令安装vsftpd:sudo apt install vsftpd -y
安装完成后,vsftpd服务会自动启动,可通过以下命令检查状态:
(图片来源网络,侵删)sudo systemctl status vsftpd
配置vsftpd
vsftpd的主配置文件位于/etc/vsftpd.conf,通过修改该文件可自定义FTP服务器的行为,建议先备份原配置文件:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
以下是关键配置项及说明(可通过sudo nano /etc/vsftpd.conf编辑文件):
| 配置项 | 说明 | 推荐值 |
|---|---|---|
listen=YES |
是否以独立模式运行(监听IPv4) | YES |
anonymous_enable=NO |
是否允许匿名用户登录 | NO(安全考虑) |
local_enable=YES |
是否允许本地系统用户登录 | YES |
write_enable=YES |
是否允许用户上传、修改文件 | YES |
local_umask=022 |
本地用户上传文件的默认权限掩码(如022表示644权限) | 022 |
chroot_local_user=YES |
是否将用户限制在其主目录内(防止越权访问) | YES |
allow_writeable_chroot=YES |
允许被chroot的用户拥有写权限(需配合chroot_local_user) |
YES |
pasv_enable=YES |
是否启用被动模式(适用于客户端 behind 防火墙的情况) | YES |
pasv_min_port=10000 |
被动模式使用的最小端口 | 10000-10100 |
pasv_max_port=10100 |
被动模式使用的最大端口 | 10100 |
user_sub_token=$USER |
动态生成用户主目录路径的变量 | $USER |
local_root=/home/$USER/ftp |
设置用户登录后的根目录(需提前创建目录) | /home/$USER/ftp |
配置示例:
# 禁用匿名登录 anonymous_enable=NO # 允许本地用户登录 local_enable=YES # 允许写操作 write_enable=YES # 限制用户主目录 chroot_local_user=YES allow_writeable_chroot=YES # 被动模式配置 pasv_enable=YES pasv_min_port=10000 pasv_max_port=10100 # 用户目录映射 local_root=/home/$USER/ftp
保存配置后,重启vsftpd服务使配置生效:

sudo systemctl restart vsftpd
创建FTP用户及目录
默认情况下,本地系统用户可直接登录FTP服务器,但为了安全和管理便利,建议为FTP服务创建专用用户。
-
创建新用户
例如创建一个名为ftpuser的用户:sudo adduser ftpuser
根据提示设置密码及用户信息(可留空直接回车)。
-
创建用户专属FTP目录
根据配置文件中的local_root设置,为用户创建FTP目录并设置权限:sudo mkdir -p /home/ftpuser/ftp sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp sudo chmod -R 755 /home/ftpuser/ftp
-
限制用户SSH登录(可选)
如果仅需用户通过FTP访问,可禁用其SSH登录权限:编辑/etc/passwd文件,将用户登录shell改为/usr/sbin/nologin:sudo usermod -s /usr/sbin/nologin ftpuser
防火墙与端口配置
FTP服务默认使用21端口(命令端口)和被动模式数据端口(如10000-10100),需确保防火墙允许这些端口的流量。
-
UFW防火墙配置
如果使用UFW(Ubuntu默认防火墙),执行以下命令开放端口:sudo ufw allow 21/tcp # FTP命令端口 sudo ufw allow 10000:10100/tcp # 被动模式数据端口 sudo ufw reload
-
云服务器安全组配置
若使用阿里云、AWS等云服务器,需在安全组规则中添加入方向规则,开放21端口和10000-10100端口。
安全加固措施
-
禁用匿名用户
确保配置文件中anonymous_enable=NO,防止匿名访问导致的安全风险。 -
启用SSL/TLS加密
为FTP数据传输添加加密,可使用vsftpd的SSL功能:- 安装SSL证书(可使用自签名证书或免费Let's Encrypt证书),将证书文件存放至
/etc/ssl/certs/和/etc/ssl/private/。 - 修改配置文件,添加以下内容:
ssl_enable=YES rsa_cert_file=/etc/ssl/certs/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.key force_local_data_ssl=YES force_local_log_ssl=YES
- 重启vsftpd服务。
- 安装SSL证书(可使用自签名证书或免费Let's Encrypt证书),将证书文件存放至
-
限制用户访问IP
在配置文件中添加tcp_wrappers=YES,并通过/etc/hosts.allow和/etc/hosts.deny限制允许访问的IP:# /etc/hosts.allow vsftpd: 192.168.1.0/24, 10.0.0.1 # 允许的IP段或单个IP
# /etc/hosts.deny vsftpd: ALL
常见问题排查
-
用户无法登录
- 检查用户密码是否正确:
sudo passwd ftpuser。 - 检查vsftpd服务状态:
sudo systemctl status vsftpd。 - 查看日志文件:
/var/log/vsftpd.log,定位错误信息(如权限不足、目录不存在等)。
- 检查用户密码是否正确:
-
被动模式连接失败
- 检查防火墙是否开放被动端口(10000-10100)。
- 确保客户端被动模式设置开启(如FileZilla中勾选“被动模式”)。
- 验证配置文件中
pasv_min_port和pasv_max_port是否正确。
相关问答FAQs
Q1: 如何在Ubuntu中卸载vsftpd并清除配置文件?
A1: 卸载vsftpd可通过以下命令完成:
sudo apt purge vssftpd -y # 卸载并删除配置文件 sudo apt autoremove -y # 清理残留依赖
若需手动删除残留配置,可执行sudo rm -rf /etc/vsftpd.conf和sudo rm -rf /var/log/vsftpd.log。
Q2: 如何限制FTP用户只能访问指定目录,而不能切换到其他目录?
A2: 除了配置chroot_local_user=YES外,还需确保用户主目录的权限设置正确,将用户FTP目录的权限设置为755,且目录所有者为用户本身:
sudo chown -R ftpuser:ftpuser /home/ftpuser/ftp sudo chmod -R 755 /home/ftpuser/ftp
检查/etc/vsftpd.conf中allow_writeable_chroot=YES是否启用,避免因权限问题导致chroot失败。
