在CentOS系统中搭建FTP服务器通常使用vsftpd(Very Secure FTP Daemon)软件,它是一款轻量级、高性能且安全的FTP服务程序,适用于大多数Linux发行版,以下是详细的搭建步骤及配置说明。

安装vsftpd服务
首先需要更新系统软件包列表并安装vsftpd,以root用户或具有sudo权限的用户身份执行以下命令:
yum update -y # 更新系统所有软件包到最新版本 yum install vsftpd -y # 安装vsftpd服务
安装完成后,启动vsftpd服务并设置为开机自启:
systemctl start vsftpd # 启动vsftpd服务 systemctl enable vsftpd # 设置开机自启
检查服务状态:
systemctl status vsftpd # 确认服务运行状态为active(running)
配置防火墙与SELinux
CentOS系统默认启用防火墙和SELinux,需要开放FTP相关端口,vsftpd默认使用21端口(控制端口)和20端口(数据端口),同时可能需要被动模式下的端口范围配置。

-
开放防火墙端口:
firewall-cmd --permanent --add-service=ftp # 添加FTP服务到防火墙规则 firewall-cmd --reload # 重新加载防火墙配置
-
配置SELinux: SELinux可能会阻止FTP服务,需设置布尔值允许FTP访问:
setsebool -P ftpd_full_access on # 永久允许FTP相关访问
或使用以下命令检查SELinux状态:
sestatus | grep ftp # 确认ftp_home_dir和ftpd_anon_write等状态为on
配置vsftpd核心参数
vsftpd的主配置文件为/etc/vsftpd/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_local_user为YES) |
| pasv_enable | NO | YES | 启用被动模式 |
| pasv_min_port | 0 | 10020 | 被动模式最小端口 |
| pasv_max_port | 0 | 10040 | 被动模式最大端口 |
| userlist_enable | YES | YES | 启用用户列表控制 |
| userlist_file | /etc/vsftpd/user_list | /etc/vsftpd/user_list | 用户列表文件路径 |
| userlist_deny | YES | NO | 是否拒绝列表中的用户登录(NO表示仅允许列表中的用户) |
编辑配置文件:
vim /etc/vsftpd/vsftpd.conf
根据需求修改上述参数,保存后重启vsftpd服务:
systemctl restart vsftpd
创建FTP用户并设置权限
-
创建本地用户:
useradd -m -s /sbin/nologin ftpuser # 创建用户ftpuser,禁止SSH登录 passwd ftpuser # 设置用户密码
-
限制用户访问目录(可选): 如果希望用户仅能访问指定目录(如
/var/ftp/share),可执行以下操作:mkdir -p /var/ftp/share # 创建共享目录 chown -R ftpuser:ftpuser /var/ftp/share # 设置目录所有者 usermod -d /var/ftp/share ftpuser # 修改用户家目录
-
配置用户访问控制: 通过
/etc/vsftpd/user_list文件控制允许登录的用户:echo "ftpuser" > /etc/vsftpd/user_list # 仅允许ftpuser登录
测试FTP服务
使用FTP客户端工具(如FileZilla、命令行ftp)连接服务器:
- 主机地址:服务器IP
- 端口:21
- 用户名:ftpuser
- 密码:设置的密码
连接成功后,可上传、下载文件测试权限,若被动模式无法连接,需检查防火墙是否开放了pasv_min_port和pasv_max_port指定的端口范围:
firewall-cmd --permanent --add-port=10020-10040/tcp # 开放被动模式端口 firewall-cmd --reload
常见问题解决
-
550 Permission denied错误:
- 检查
write_enable是否为YES。 - 确认用户对目录是否有读写权限(
chmod 755 /home/ftpuser)。 - 检查SELinux是否拦截(
ausearch -c 'vsftpd' --raw | audit2why)。
- 检查
-
425 Failed to establish connection错误:
- 被动模式端口未开放,检查防火墙和
pasv_min_port/pasv_max_port配置。 - 确保客户端和服务器网络互通。
- 被动模式端口未开放,检查防火墙和
相关问答FAQs
Q1:如何限制FTP用户只能下载不能上传?
A:在vsftpd.conf中配置write_enable=NO,或针对特定用户使用目录权限控制(如chmod 555 /home/ftpuser),若仅允许部分用户上传,可通过user_config_dir参数为不同用户创建独立配置文件。
Q2:如何启用FTP SSL/TLS加密传输?
A:生成SSL证书并配置vsftpd启用加密,步骤如下:
- 生成证书:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem - 修改配置文件:添加
ssl_enable=YES、allow_anon_ssl=NO、force_local_data_ssl=YES、force_local_logins_ssl=YES - 重启服务:
systemctl restart vsftpd
客户端需选择“使用显式FTP over SSL(FTPES)”模式连接。
