当前位置:首页>Linux>Linux安装配置FTP服务器

Linux安装配置FTP服务器

  • 2026-10-02 08:28:39
Linux安装配置FTP服务器

在日常的服务器运维工作中,文件传输服务是必不可少的一环。VSftpd(Very Secure FTP Daemon)作为 Linux 运维最常用的文件传输服务,凭借轻量、稳定、安全的特性,深受运维人员的喜爱。

FTP 是一种在互联网中进行文件传输的协议,基于客户端/服务器模式,默认使用 20 和21 号端口,其中端口 20 用于进行数据传输,端口 21 用于接受客户端发出的 FTP 命令与参数。

今天,我们就来详细讲解如何在CentOS 7系统上搭建VSftpd服务器,让你轻松实现文件上传下载功能。

一、环境准备

首先,我们需要确认系统环境:

服务器操作系统:CentOS7.9  

客户端操作系统:Windows

二、VSftpd安装与基础启动

1. 安装前检查

先确认服务器是否已安装 VSftpd,避免重复安装:

rpm -qa | grep vsftpd  

无输出则代表未安装,可继续下一步。

2.安装VSftpd

yum install -y vsftpd

3. 服务启动与开机自启配置

# 启动vsftpd服务  systemctl start vsftpd  # 设置开机自启  systemctl enable vsftpd  # 查看服务运行状态  systemctl status vsftpd  

看到输出中 active (running) 绿色字样,代表服务启动成功。

4. 备份配置文件

正式配置前,先备份原生配置文件,出错可随时回滚: 

cp/etc/vsftpd/vsftpd.conf/etc/vsftpd/vsftpd.conf.bak

三、VSftpd核心配置文件详解

VSftpd 的所有核心配置都在 /etc/vsftpd/vsftpd.conf 文件中,下面给大家拆解高频核心参数,新手也能看懂每个配置的作用。

参数配置
推荐值
作用说明
listen=NO
NO
关闭 IPv4 单独监听,与下方 IPv6 配置配合使用,CentOS7 默认适配
listen_ipv6=YES
YES
开启 IPv6 监听,同时兼容 IPv4
anonymous_enable=NO
NO
关闭匿名访问,生产环境必须关闭,避免未授权访问
local_enable=YES
YES
允许本地系统用户登录 FTP
write_enable=YES
YES
全局开启写入权限(上传、新建目录、删除等操作)
local_umask=022
022
本地用户上传文件的权限掩码,对应文件 644、目录 755,符合 Linux 通用权限规范
dirmessage_enable=YES
YES
进入目录时显示提示信息,可自定义目录说明
xferlog_enable=YES
YES
开启上传 / 下载日志,便于审计和排错
connect_from_port_20=YES
YES
使用 20 端口进行主动模式数据传输
xferlog_std_format=YES
YES
日志使用标准格式,兼容日志分析工具
listen_port=21
21
FTP 控制端口,默认 21,可自定义修改提升安全性
chroot_local_user=YES
YES
限制用户只能在自己的家目录内,禁止切换到系统其他目录,核心安全配置
allow_writeable_chroot=YES
YES
允许被 chroot 限制的家目录具备写入权限,CentOS7 必加,否则会报 500 OOPS 错误
chroot_list_enable=YES
YES
开启 chroot 例外用户列表
chroot_list_file=/etc/vsftpd/chroot_list
固定路径
例外用户列表,文件内的用户不受 chroot 目录限制
userlist_enable=YES
YES
开启用户访问控制列表
userlist_deny=NO
NO
改为 NO 后,仅允许 user_list 文件内的用户登录 FTP,白名单机制,大幅提升安全性
userlist_file=/etc/vsftpd/user_list
固定路径
允许登录的用户白名单文件

四、常用业务场景配置方案

适合内部人员、运维人员使用,每个用户有独立的家目录,权限隔离,配置简单,稳定性强。

步骤 1:创建 FTP 专用用户

创建禁止 SSH 登录系统的专用 FTP 用户,提升安全性:

# 创建文件目录mkdir -p /data/ftp/ftpuser# 为该目录配置权限chmod -R 755 /data/ftp/ftpuser# 如果用户 shell 不在 /etc/shells 中,PAM 会拒绝登录。echo /usr/bin/nologin>>/etc/shells# 新建用户ftp1,并且设置不支持ssh系统登录,只能登录ftp服务器useradd  -d /data/ftp/ftpuser -M -s /usr/bin/nologin ftp1# 设置ftp1密码 echo "新密码" | passwd --stdin 用户名 echo "ftppassword" | passwd --stdin ftp1# 新建FTP用户可写目录# 由于/data/ftp/ftpuser的用户是root,其它用户都没有写的权限# 所以要在该目录下新建一个目录用于文件的上传下载mkdir -p /data/ftp/ftpuser/uploadchown ftp1:ftp1 /data/ftp/ftpuser/uploadchmod 755 /data/ftp/ftpuser/upload

步骤 2:配置用户白名单

将用户加入登录白名单:

echo "ftp1" >> /etc/vsftpd/user_list

步骤 3:写入完整配置文件

清空原有配置,复制以下配到/etc/vsftpd/vsftpd.conf: 

# 是否开启匿名用户,匿名都不安全,默认NOanonymous_enable=NO# 允许本机账号登录FTP# 这个设定值必须要为YES时,在/etc/passwd内的账号才能以实体用户的方式登入我们的vsftpd主机local_enable=YES# 允许账号都有写操作write_enable=YES# 本地用户创建文件或目录的掩码# 意思是指:文件目录权限:777-022=755,文件权限:666-022=644local_umask=022# 进入某个目录的时候,是否在客户端提示一下dirmessage_enable=YES# 当设定为YES时,使用者上传与下载日志都会被记录起来xferlog_enable=YES# 日志成为std格式xferlog_std_format=YES# 上传与下载日志存放路径xferlog_file=/var/log/xferlog# 开放port模式的20端口的连接connect_from_port_20=YES# 关于系统安全的设定值:# ascii_download_enable=YES(NO)# 如果设定为YES,那么client就可以使用ASCII格式下载档案# 一般来说,由于启动了这个设定项目可能会导致DoS的攻击,因此预设是NO# ascii_upload_enable=YES(NO)# 与上一个设定类似的,只是这个设定针对上传而言,预设是NOascii_upload_enable=NOascii_download_enable=NO# 通过搭配能实现以下几种效果:# ①当chroot_list_enable=YES,chroot_local_user=YES时,在/etc/vsftpd/chroot_list文件中列出的用户,可以切换到其他目录;未在文件中列出的用户,不能切换到其他目录# ②当chroot_list_enable=YES,chroot_local_user=NO时,在/etc/vsftpd/chroot_list文件中列出的用户,不能切换到其他目录;未在文件中列出的用户,可以切换到其他目录# ③当chroot_list_enable=NO,chroot_local_user=YES时,所有的用户均不能切换到其他目录# ④当chroot_list_enable=NO,chroot_local_user=NO时,所有的用户均可以切换到其他目录# 限制用户只能在自己的目录活动chroot_local_user=YESchroot_list_enable=NOchroot_list_file=/etc/vsftpd/chroot_list# 可以更改ftp的端口号,使用默认值21# listen_port=60021# 监听ipv4端口,开了这个就说明vsftpd可以独立运行,不用依赖其他服务listen=NO# 监听ipv6端口listen_ipv6=YES# 打开主动模式port_enable=YES# 启动被动式联机(passivemode)pasv_enable=YES# 被动模式端口范围:注意:linux客户端默认使用被动模式,windows 客户端默认使用主动模式。在ftp客户端中执行"passive"来切换数据通道的模式。也可以使用"ftp -A ip"直接使用主动模式。主动模式、被动模式是有客户端来指定的# 上面两个是与passive mode使用的port number有关,如果您想要使用64000到65000这1000个port来进行被动式资料的连接,可以这样设定# 这两项定义了可以同时执行下载链接的数量# 被动模式起始端口,0为随机分配pasv_min_port=64000# 被动模式结束端口,0为随机分配pasv_max_port=65000# 文件末尾添加# 这个是pam模块的名称,我们放置在/etc/pam.d/vsftpd,认证用pam_service_name=vsftpd# 使用允许登录的名单,在/etc/vsftpd/user_list文件中添加新建的用户ftpuseruserlist_enable=YES# 限制允许登录的名单,前提是userlist_enable=YES,其实这里有点怪,禁止访问名单在/etc/vsftpd/ftpusersuserlist_deny=NO# 允许限制在自己的目录活动的用户拥有写权限# 不添加下面这个会报错:500 OOPS: vsftpd: refusing to run with writable root inside chroot()allow_writeable_chroot=YES# 当然我们都习惯支持TCP Wrappers的啦# Tcp wrappers : Transmission Control Protocol (TCP) Wrappers 为由 inetd 生成的服务提供了增强的安全性tcp_wrappers=YES# FTP访问目录local_root=/data/ftp/ftpuser

步骤 4:重启服务生效

systemctl restart vsftpd

五、防火墙与SELinux配置

配置完成后连不上,90%的情况都是防火墙或SELinux拦截导致的,要不关闭防火墙和SELinux,要不配置防火墙和SELinux,下面给大家配置方案。

1. firewalld配置

#关闭防火墙systemctl stop firewall# 或者配置防火墙 放行FTP服务firewall-cmd --add-service=ftp --permanent# 放行控制端口21firewall-cmd --add-port=21/tcp --permanent# 放行被动模式端口范围(和配置文件一致)firewall-cmd --add-port=50000-50100/tcp --permanent# 重载防火墙规则生效firewall-cmd --reload# 查看已放行的规则firewall-cmd --list-all

2. SELinux配置

# 临时关闭子系统setenforce 0# 永久关闭子系统sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config# 或配置子系统 允许FTP用户完整访问目录setsebool -P ftpd_full_access on# 允许FTP访问用户家目录setsebool -P tftp_home_dir on# 开启被动模式支持setsebool -P ftpd_use_passive_mode on

六、客户端连接测试

1.命令行测试

# 格式:ftp 服务器IPftp 192.168.3.234  

输入用户名和密码,出现 ftp> 提示符即为登录成功,可使用 ls、put、get 命令测试目录列表、上传、下载功能。

2.使用文件资源管理器访问

ftp://ftp1@192.168.3.234/ 

输入账号密码,点击登录

成功访问

客户端上传

服务端能看到上传的文件

服务端创建1.txt文件

客户端能获取到

长按下图(👇👇)二维码,一键关注“武汉木亘信息技术有限公司”

武汉木亘信息技术有限公司

诚信  共赢  创新  发展

最新文章

随机文章