linux服务-vsftpd搭建
vsftpd搭建
参考来源: ftp服务器的搭建,Linux中FTP安装,查询ai
Linux下的FTP协议是基于TCP的文件传输协议,通过控制连接(21端口)和数据连接(20端口或随机端口)实现文件上传下载,支持匿名/本地/虚拟用户访问,安全性需通过FTPS/SFTP增强。
ftp理论
-  
协议基础与工作原理
FTP(File Transfer Protocol)是应用层协议,采用C/S架构,使用两个TCP连接:
-  
控制连接:端口21,传输命令与响应(如登录、文件操作指令);
 -  
数据连接:传输文件或目录列表,分两种模式:
模式 连接发起方 数据端口 适用场景 主动模式 服务器(端口20) 客户端开放随机端口(>1024) 客户端无防火墙限制 被动模式 客户端 服务器开放随机端口(1024-5000) 客户端有防火墙(推荐)  
 -  
 -  
工作流程原理
阶段 核心操作 涉及端口/协议 关键细节 建立连接 客户端发起TCP三次握手,连接服务器21端口 控制端口21(TCP) 控制通道建立,服务器返回220响应码表示服务就绪 身份认证 客户端发送USER(用户名)、PASS(密码)命令 控制通道 密码以明文传输;认证成功返回230响应码 命令交互 客户端发送操作命令(如LIST、RETR、STOR),触发数据连接建立 数据端口(动态协商) 主动模式:服务器用20端口连接客户端指定端口;被动模式:客户端连接服务器随机端口 断开连接 客户端发送QUIT命令,服务器关闭控制连接 控制通道 数据连接在每次传输后自动关闭,控制连接在会话结束后关  -  
FTP用户类别
-  
用户对比
用户类别 身份验证 默认权限 典型应用场景 安全性 匿名用户 无需账号密码(用户名 ftp或anonymous)仅能访问公共目录(如 /var/ftp),只读公开资源下载(如软件镜像) 低 本地用户 系统已有账号(如 Linux /etc/passwd用户)可访问主目录及授权目录,支持读写 个人或内部文件管理 中 虚拟用户 独立于系统的专用账号(存储于数据库或文件) 仅访问指定虚拟目录,权限可精细化控制 多用户隔离场景(如共享服务器) 高  -  
权限与安全要点
- 匿名用户:需在配置文件中显式启用(如 
anonymous_enable=YES),默认禁止上传,需额外配置anon_upload_enable=YES。 - 本地用户:需注意限制目录切换(
chroot_local_user=YES),避免访问系统敏感文件。 - 虚拟用户:推荐搭配 
guest_enable=YES并映射到低权限系统用户,降低安全风险,虚拟用户需通过 PAM 认证模块或专用配置文件实现 
 - 匿名用户:需在配置文件中显式启用(如 
 
 -  
 -  
FTP数据传输格式
传输模式 适用文件类型 传输特点 典型场景示例 ASCII 文本文件(TXT、HTML、日志等) 发送端转换为ASCII码,接收端还原;自动调整换行符适配目标系统 跨系统传输配置文件、代码文件 二进制 非文本文件(图片、视频、压缩包等) 直接传输原始字节,不修改格式 上传JPG图片、ZIP压缩包  
vsftpd安装
-  
安装
# centos7 [root@localhost ~]# yum -y install epel-release [root@localhost ~]# yum -y install vsftpd# centos8 [root@localhost ~]# dnf -y install epel-release [root@localhost ~]# dnf -y install vsftpd -  
启动服务
[root@localhost ~]# systemctl start vsftpd [root@localhost ~]# systemctl enable vsftpd[root@localhost ~]# systemctl status vsftpd ● vsftpd.service - Vsftpd ftp daemonActive: active (running) since 一 2025-11-03 22:25:15 CST; 2s ago└─9690 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf[root@localhost ~]# ss -tnlp|grep 21 LISTEN 0 32 :::21 :::* users:(("vsftpd",pid=9690,fd=4)) -  
配置文件说明
文件路径 核心作用 依赖配置项 优先级/特性 /etc/vsftpd/ftpusers禁止高权限用户(如 root)登录 无(始终生效) 最高,任何情况下覆盖其他规则 /etc/vsftpd/user_list动态控制用户登录(黑白名单切换) userlist_enable+userlist_deny仅当 userlist_enable=YES时生效/etc/vsftpd/vsftpd.conf配置 FTP 服务全局参数(如匿名访问、权限控制) 自身参数(如 anonymous_enable)核心配置,控制服务整体行为  -  
vsftpd.conf配置详解
参数名称 可选值 默认值 说明与作用 anonymous_enableYES/NOYES⚠️ 是否允许匿名登录(建议生产环境设为 NO)local_enableYES/NONO是否允许本地系统用户登录(必须开启才能使用真实账号登录) write_enableYES/NONO🔑 全局写权限开关(若需上传/删除,必须设为 YES)local_umask八进制数值 (如 022)077本地用户创建文件的默认权限( 022对应文件644、目录755)dirmessage_enableYES/NONO进入目录时显示 .message文件内容(需创建该文件)xferlog_enableYES/NOYES📊 启用传输日志(记录在 /var/log/vsftpd.log)connect_from_port_20YES/NOYES强制使用端口 20 进行数据连接(主动模式兼容性) listenYES/NONO以独立守护进程模式运行(设为 YES时替代inetd启动)pasv_enableYES/NOYES🌐 启用被动模式(适用于客户端位于 NAT 后) pasv_min_port端口号 (如 40000)- 被动模式端口范围下限(需与防火墙配合开放,例: pasv_min_port=40000)pasv_max_port端口号 (如 50000)- 被动模式端口范围上限(例: pasv_max_port=50000,与pasv_min_port配套使用)xferlog_std_format YES/NOYES 控制日志格式标准化 xferlog_file /var/log/xferlog- 指定传输日志存储路径 idle_session_timeout 600 - 限制空闲会话存活时间 data_connection_timeout 120 - 设置数据连接时间 针对上传,下载 chroot_list_file 绝对路径(如 /etc/vsftpd/chroot_list)无 指定包含允许/禁止chroot的用户列表文件路径(需配合 chroot_list_enable使用),chroot_list_enable YES/NONO 启用/禁用 chroot_list_file配置的用户列表功能,与chroot_local_user配合决定列表用户的chroot行为(白名单/黑名单模式)chroot_local_user YES/NONO 启用时需确保用户主目录不可写(或通过 allow_writeable_chroot=YES放宽限制)allow_writeable_chroot YES/NONO 允许chroot环境下的用户主目录具有写权限(vsftpd 2.3.5+新增,解决安全限制)  -  
场景示例
-  
限制所有本地用户到主目录
chroot_local_user=YES allow_writeable_chroot=YES # 若主目录需写权限(不推荐) -  
仅允许列表用户chroot(白名单模式)
# chroot_list_file: 文件需手动创建,每行一个用户名,权限建议设为`root:root`且不可被普通用户修改 chroot_local_user=NO chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list # 列表中用户将被chroot -  
禁止列表用户chroot(黑名单模式)
chroot_local_user=YES chroot_list_enable=YES chroot_list_file=/etc/vsftpd/chroot_list # 列表中用户不被chroot 
 -  
 
