在Linux系统中安装FTP服务器是许多企业和个人用户的需求,主要用于文件传输、数据共享等场景,本文将以vsftpd(Very Secure FTP Daemon)为例,详细介绍在Linux环境下安装、配置和测试FTP服务器的完整过程,包括环境准备、安装步骤、配置优化、安全设置及常见问题排查等内容。

环境准备
在开始安装前,需确保系统满足基本要求:推荐使用Ubuntu 20.04/22.04或CentOS 7/8等主流发行版,root权限或具有sudo权限的用户账户,以及稳定的网络连接,需确认系统是否已安装其他FTP服务(如proftpd),避免端口冲突,可通过以下命令检查:
sudo systemctl status vsftpd # 检查vsftpd是否运行 sudo netstat -tuln | grep 21 # 检查FTP默认端口21是否被占用
安装vsftpd
基于Ubuntu/Debian系统
使用APT包管理器安装,执行以下命令:
sudo apt update sudo apt install vsftpd -y
安装完成后,vsftpd服务会自动启动,可通过sudo systemctl status vsftpd确认。
基于CentOS/RHEL系统
使用YUM包管理器安装,执行以下命令:

sudo yum install vsftpd -y # 或对于CentOS 8+使用dnf sudo dnf install vsftpd -y
安装后启动服务并设置开机自启:
sudo systemctl start vsftpd sudo systemctl enable vsftpd
配置vsftpd
vsftpd的主配置文件位于/etc/vsftpd.conf,建议先备份原配置文件:
sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
然后通过编辑器(如vim)修改配置,关键参数说明如下:
| 参数 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
| anonymous_enable | YES | NO | 是否允许匿名访问,建议关闭 |
| local_enable | YES | YES | 是否允许本地用户登录 |
| write_enable | NO | YES | 是否允许用户上传文件 |
| chroot_local_user | NO | YES | 是否限制用户在主目录 |
| allow_writeable_chroot | NO | YES | 允许chroot目录可写(需配合write_enable) |
| pasv_min_port | 0 | 60000 | 被动模式最小端口 |
| pasv_max_port | 0 | 60100 | 被动模式最大端口 |
| userlist_enable | YES | YES | 启用用户列表控制 |
| userlist_file | /etc/vsftpd.user_list | /etc/vsftpd.user_list | 用户列表文件路径 |
anonymous_enable=NO local_enable=YES write_enable=YES chroot_local_user=YES allow_writeable_chroot=YES pasv_min_port=60000 pasv_max_port=60100 userlist_enable=YES userlist_file=/etc/vsftpd.user_list seccomp_sandbox=NO
保存后重启vsftpd服务:

sudo systemctl restart vsftpd
创建FTP用户并设置权限
创建系统用户
假设创建一个名为ftpuser的用户,并设置其主目录为/home/ftpuser:
sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser sudo passwd ftpuser # 设置用户密码
参数说明:-m创建主目录,-s /sbin/nologin禁止用户SSH登录。
配置用户访问权限
编辑用户列表文件/etc/vsftpd.user_list,添加允许访问的用户:
sudo echo "ftpuser" | sudo tee -a /etc/vsftpd.user_list
若需禁止某些用户访问,可将其加入/etc/vsftpd/ftpusers文件。
设置目录权限
确保FTP用户对其主目录有写权限:
sudo chown -R ftpuser:ftpuser /home/ftpuser sudo chmod -R 755 /home/ftpuser
防火墙与SELinux配置
Ubuntu/Debian(UFW防火墙)
sudo ufw allow 21/tcp # 允许FTP命令端口 sudo ufw allow 60000:60100/tcp # 允许被动模式数据端口 sudo ufw reload
CentOS/RHEL(firewalld防火墙)
sudo firewall-cmd --permanent --add-service=ftp sudo firewall-cmd --permanent --add-port=60000-60100/tcp sudo firewall-cmd --reload
SELinux配置(CentOS/RHEL)
若系统启用SELinux,需安装vsftpd_selinux包并设置上下文:
sudo yum install vsftpd_selinux -y sudo semanage fcontext -a -t public_content_rw_t "/home/ftpuser(/.*)?" sudo restorecon -Rv /home/ftpuser
测试FTP服务器
使用命令行测试
在本地或另一台机器上执行:
ftp [服务器IP] # 输入用户名和密码后,使用put命令测试上传 ftp> put test.txt
使用FileZilla等图形工具
输入服务器IP、用户名、密码及端口(21),连接成功后即可进行文件传输。
常见问题与优化
- 连接超时:检查防火墙和被动模式端口是否开放。
- 用户无法登录:确认用户是否在
vsftpd.user_list中,以及chroot目录权限是否正确。 - 上传失败:检查
write_enable和allow_writeable_chroot是否启用,目录权限是否为755。 - 匿名访问问题:确保
anonymous_enable=NO,并删除/var/ftp目录下的匿名文件。
相关问答FAQs
问题1:如何限制FTP用户只能访问其主目录,不能切换到上级目录?
解答:通过设置chroot_local_user=YES和allow_writeable_chroot=YES实现,确保用户主目录及其所有上级目录的权限设置正确(如主目录权限为755,所有者为root或ftpuser),若仍可切换,检查SELinux上下文是否为public_content_t或public_content_rw_t。
问题2:FTP上传速度慢,如何优化?
解答:可通过以下方式优化:
- 调整
vsftpd.conf中的local_max_rate参数(如local_max_rate=1048576,单位为字节/秒)限制带宽; - 关闭
use_sendfile=YES,改用use_localtime=YES以减少网络延迟; - 检查服务器网络带宽和磁盘I/O性能,必要时升级硬件;
- 使用被动模式(
pasv_enable=YES)并指定端口范围,避免端口冲突。
