在Linux系统中安装FTP服务器是许多企业和个人用户的需求,主要用于文件传输、共享和管理,FTP(File Transfer Protocol)是一种广泛使用的网络协议,用于在客户端和服务器之间传输文件,Linux环境下有多种FTP服务器软件可供选择,如vsftpd、proftpd、pure-ftpd等,其中vsftpd(Very Secure FTP Daemon)因其安全性高、性能稳定、配置简单而成为最受欢迎的选择,本文将以vsftpd为例,详细介绍在Linux系统中安装和配置FTP服务器的完整步骤,包括环境准备、安装过程、基本配置、用户权限管理、防火墙设置以及常见问题解决。

环境准备
在开始安装之前,确保你的Linux系统已经更新到最新状态,并且拥有管理员权限(root用户或sudo权限),以Ubuntu/Debian系统为例,首先更新软件包列表和已安装的软件包:
sudo apt update sudo apt upgrade -y
对于CentOS/RHEL系统,使用以下命令:
sudo yum update -y
确保系统网络配置正确,以便后续可以通过FTP客户端访问服务器。
安装vsftpd
以Ubuntu/Debian系统为例,使用apt命令安装vsftpd:

sudo apt install vsftpd -y
对于CentOS/RHEL系统,使用yum命令:
sudo yum install vsftpd -y
安装完成后,vsftpd服务会自动启动,可以通过以下命令检查服务状态:
sudo systemctl status vsftpd
如果服务未启动,可以使用以下命令启动并设置开机自启:
sudo systemctl start vsftpd sudo systemctl enable vsftpd
基本配置
vsftpd的配置文件位于/etc/vsftpd.conf,默认情况下,vsftpd采用匿名访问模式,且不允许本地用户登录,为了满足实际需求,通常需要修改配置文件,备份原始配置文件:

sudo cp /etc/vsftpd.conf /etc/vsftpd.conf.bak
然后使用文本编辑器(如nano或vim)打开配置文件:
sudo nano /etc/vsftpd.conf
以下是关键配置项及其说明:
| 配置项 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
| anonymous_enable | YES | NO | 是否允许匿名用户访问,建议关闭以提高安全性 |
| local_enable | NO | YES | 是否允许本地用户登录 |
| write_enable | NO | YES | 是否允许本地用户上传文件 |
| chroot_local_user | NO | YES | 是否将本地用户限制在其主目录 |
| allow_writeable_chroot | NO | YES | 是否允许chroot目录可写(需配合write_enable使用) |
| pasv_enable | NO | YES | 是否启用被动模式(建议开启,避免防火墙问题) |
| pasv_min_port | 0 | 10000 | 被动模式最小端口 |
| pasv_max_port | 0 | 10100 | 被动模式最大端口 |
| user_sub_token | NONE | $USER | 动态生成用户目录的变量 |
| local_root | /home/$USER | /var/www/$USER | 本地用户登录后的根目录 |
修改完成后,保存文件并退出,然后重启vsftpd服务使配置生效:
sudo systemctl restart vsftpd
用户权限管理
如果需要为特定用户设置FTP访问权限,可以创建一个专门的FTP用户组,并将用户添加到该组,创建一个名为ftpusers的用户组:
sudo groupadd ftpusers
然后创建一个用户并添加到该组,同时设置其主目录和登录shell(nologin表示不允许通过SSH登录):
sudo useradd -g ftpusers -d /home/ftpuser -s /sbin/nologin ftpuser
为用户设置密码:
sudo passwd ftpuser
如果需要限制用户只能访问其主目录,确保chroot_local_user设置为YES,如果需要为用户分配特定的目录(如/var/www/ftpuser),可以创建目录并设置权限:
sudo mkdir -p /var/www/ftpuser sudo chown ftpuser:ftpusers /var/www/ftpuser sudo chmod 755 /var/www/ftpuser
防火墙设置
Linux系统默认启用防火墙(如Ubuntu的UFW或CentOS的firewalld),需要开放FTP服务的端口,对于vsftpd的被动模式,需要开放TCP端口21(命令端口)和配置的被动端口范围(如10000-10100)。
以Ubuntu的UFW为例:
sudo ufw allow 21/tcp sudo ufw allow 10000:10100/tcp sudo ufw reload
对于CentOS的firewalld:
sudo firewall-cmd --permanent --add-service=ftp sudo firewall-cmd --permanent --add-port=10000-10100/tcp sudo firewall-cmd --reload
常见问题解决
- 用户无法登录:检查
/etc/vsftpd.conf中的local_enable是否设置为YES,确认用户密码正确,且用户目录权限为755(所有者可读写执行,组和其他用户可读执行)。 - 被动模式连接失败:确保防火墙开放了被动端口范围,且
pasv_min_port和pasv_max_port配置正确,如果使用云服务器,还需检查安全组是否开放了相应端口。
相关问答FAQs
Q1: 如何禁止匿名用户访问FTP服务器?
A1: 编辑/etc/vsftpd.conf文件,将anonymous_enable的值从YES改为NO,保存后重启vsftpd服务即可,默认情况下,vsftpd可能允许匿名访问,关闭此项可以提高安全性。
Q2: 如何限制FTP用户只能下载文件而不能上传?
A2: 在/etc/vsftpd.conf中,确保write_enable设置为NO(默认为NO),或者针对特定用户,可以在/etc/vsftpd.user_list或/etc/vsftpd.chroot_list中添加用户名,并通过local_root和write_enable组合控制权限,将write_enable设为NO后,所有用户都无法上传文件。
