在CentOS系统中安装和配置FTP服务器是许多企业和个人用户的需求,FTP(File Transfer Protocol)是一种广泛使用的文件传输协议,适用于在本地网络或互联网上共享文件,本文将详细介绍如何在CentOS系统中安装、配置并安全运行FTP服务器,以vsftpd(Very Secure FTP Daemon)为例进行说明,vsftpd是一个轻量级、高性能且安全的FTP服务器软件,适用于大多数Linux发行版。

安装vsftpd软件包
需要确保系统已更新至最新状态,然后安装vsftpd软件包,打开终端,以root用户或具有sudo权限的用户身份执行以下命令:
sudo yum update -y # 更新系统软件包 sudo yum install vsftpd -y # 安装vsftpd
安装完成后,vsftpd服务会自动启动,但为了确保服务在系统重启后自动运行,需要执行以下命令:
sudo systemctl enable vsftpd sudo systemctl start vsftpd
可以通过systemctl status vsftpd检查服务状态,如果显示“active (running)”,则表示服务已正常运行。
配置vsftpd
vsftpd的主配置文件位于/etc/vsftpd/vsftpd.conf,建议在修改前先备份原始配置文件:

sudo cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak
然后使用文本编辑器(如vi或nano)打开配置文件:
sudo vi /etc/vsftpd/vsftpd.conf
以下是关键配置项及其说明:
| 配置项 | 默认值 | 推荐值 | 说明 |
|---|---|---|---|
| anonymous_enable=YES | NO | 是否允许匿名用户登录,建议关闭以提高安全性 | |
| local_enable=YES | YES | 是否允许本地系统用户登录 | |
| write_enable=YES | YES | 是否允许用户上传文件 | |
| chroot_local_user=YES | NO | 是否将用户限制在其主目录中,防止访问系统其他目录 | |
| allow_writeable_chroot=YES | NO | 当chroot_local_user为YES时,是否允许用户在主目录中写入(需配合write_enable=YES) | |
| pasv_enable=YES | YES | 是否启用被动模式(适用于NAT环境) | |
| pasv_min_port=60000 | 0 | 被动模式使用的最小端口,建议设置为较高端口以避免冲突 | |
| pasv_max_port=65535 | 0 | 被动模式使用的最大端口 | |
| userlist_enable=YES | YES | 是否启用用户列表文件(/etc/vsftpd/user_list) | |
| tcp_wrappers=YES | YES | 是否使用TCP Wrappers进行访问控制 |
根据需求修改配置后,保存文件并退出,若要禁止匿名登录并限制用户主目录,可设置:
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=20000
创建FTP用户
为了安全起见,建议为FTP服务创建专用的系统用户,而非直接使用root或其他高权限用户,创建一个名为ftpuser的用户,并设置其主目录为/home/ftpuser:

sudo useradd -m -d /home/ftpuser -s /sbin/nologin ftpuser sudo passwd ftpuser # 设置用户密码
-s /sbin/nologin表示该用户无法通过SSH登录系统,仅能用于FTP服务,如果需要允许用户上传文件,确保主目录的权限设置正确:
sudo chmod 755 /home/ftpuser sudo chown ftpuser:ftpuser /home/ftpuser
配置防火墙和SELinux
CentOS系统默认启用防火墙和SELinux,需要开放FTP相关端口,vsftpd默认使用20(数据端口)和21(控制端口),若启用被动模式,还需开放配置的端口范围(如10000-20000)。
配置防火墙
执行以下命令开放端口:
sudo firewall-cmd --permanent --add-service=ftp sudo firewall-cmd --permanent --add-port=10000-20000/tcp sudo firewall-cmd --reload
配置SELinux
如果SELinux处于 enforcing 模式,可能需要调整策略以允许FTP服务,执行以下命令:
sudo setsebool -P ftpd_full_access on # 允许FTP用户访问主目录 sudo semanage port -a -t ftp_port_t -p tcp 10000-20000 # 为被动模式端口添加SELinux上下文
如果semanage命令不可用,需先安装policycoreutils-python包:
sudo yum install policycoreutils-python -y
重启vsftpd服务
完成所有配置后,重启vsftpd服务以使更改生效:
sudo systemctl restart vsftpd
可以使用FTP客户端(如FileZilla)测试连接,输入服务器IP地址、用户名和密码,若能成功登录并传输文件,则表示配置成功。
安全建议
- 禁用匿名登录:确保
anonymous_enable=NO,避免匿名用户访问服务器。 - 限制用户权限:使用
chroot_local_user=YES将用户限制在主目录中,防止越权访问。 - 定期更新:定期更新系统和vsftpd软件包,修复潜在漏洞。
- 使用加密传输:若数据需通过公网传输,建议结合SSL/TLS加密(配置
ssl_enable=YES)。
相关问答FAQs
问题1:如何解决FTP连接超时或被动模式失败的问题?
解答:通常是由于防火墙或NAT配置问题导致,首先检查防火墙是否开放了被动模式端口(如10000-20000),并确保路由器或云服务器安全组规则允许这些端口的入站连接,确认vsftpd配置中的pasv_min_port和pasv_max_port与防火墙开放的端口范围一致,然后重启vsftpd服务并测试连接。
问题2:如何限制特定用户无法登录FTP服务器?
解答:可以通过user_list文件实现,编辑/etc/vsftpd/user_list文件,将需要禁止的用户名添加到该文件中(每行一个用户名),然后在vsftpd配置文件中设置userlist_file=/etc/vsftpd/user_list和userlist_deny=YES(默认值),这样列表中的用户将被禁止登录,若仅允许列表中的用户登录,可设置userlist_deny=NO。
