Linux中FTP配置与vsftpd服务部署指南

一、FTP 核心概念

1、基本定义
  • 文件传输协议(FTP),基于 C/S模式 工作。
  • 控制端口21(身份验证与指令传输)
    数据端口20(主动模式数据传输)
2、工作模式对比
  1. 主动模式(standard)
    • 客户端从一个随机非特权端口N(>1024)连接到服务器的控制端口(21)
      • 其中Prot命令包含了客户端的IP地址和数据端口(N+1)
    • 服务器收到这条PORT命令,从它的数据端口(20)主动发起连接到客户端指定的IP地址和端口(N+1)
    • 需要服务端与客户端重新建立一个新的连接来传输数据
  2. 被动模式(passive)
    • 客户端从一个随机非特权端口N(>1024)连接到服务器的控制端口(21)
      • 其中Pasv命令包含了客户端的数据端口(N+1)
    • 此时服务端会随机生成一个高端端口P(P>1024),并发送PORT命令给客户端(使用控制端口)
      • 其中Prot命令包含了服务端的IP地址和数据端口P
    • 客户端从数据端口N+1发起一个请求连接服务端数据端口P,这时产生了数据连接
    • 不需要服务端与客户端重新建立一个新的连接来传输数据
模式连接发起方端口使用相同点
主动模式服务端 → 客户端服务端数据端口20 → 客户端高端口N+1服务端控制端口为21
被动模式客户端 → 服务端客户端高端口N+1 → 服务端随机高端口p服务端控制端口为21

二、FTP服务器主配置文件参数

参数默认值功能说明注意事项
anonymous_enableNO控制匿名用户访问权限YES表示允许匿名访问FTP服务器
local_enableYES控制FTP用户是否可以访问FTP服务器SELinux启用时需注意调整ftp_home_dir的bool值(RHEL7+ 无需配置)
write_enableYES控制FTP用户对FTP服务器的可写权限必须启用后,其他写操作参数才生效
local_umask022FTP用户创建目录或文件时的umask值创建目录权限 755,文件权限 644
anon_upload_enable注释控制匿名用户上传文件的权限SELinux启用时需注意调整 ftpd_anon_writeftpd_full_access 的bool值
anon_mkdir_write_enable注释控制匿名用户创建目录的权限需同时启用 write_enable=YES
anon_other_write_enable允许匿名用户重命名/删除文件高风险操作,谨慎启用
dirmessage_enableYES显示说明性文件用户进入目录时自动显示
xferlog_enableYES控制文件在传输过程中是否被日志记录日志默认位置:/var/log/xferlog
connect_from_port_20YES强制使用20端口进行数据传输仅主动模式生效
chown_uploads注释默认匿名用户上传文件的所有者为FTP需配合 chown_username 使用
chown_username注释匿名用户上传文件的所有者将变成该FTP用户例:chown_username=whoever
xferlog_file注释设置FTP服务日志文件位置例:xferlog_file=/var/log/xferlog
xferlog_std_formatYES设置标准的FTP Xferlog模式兼容 wu-ftpd 日志格式
idle_session_timeout600控制连接空闲超时(秒)超时自动断开连接
data_connection_timeout120数据传输连接空闲超时(秒)超时自动断开数据连接
nopriv_user注释指定非特权运行用户例:nopriv_user=ftpsecure
ftpd_banner注释成功连接FTP服务器时的提示语例:ftpd_banner=Welcome to My FTP service
deny_email_enable注释禁止下载文件到指定的邮箱地址中需配合 banned_email_file 使用
banned_email_file注释设置电子邮箱地址例:banned_email_file=/etc/vsftpd/banned_emails
chroot_local_user注释控制FTP用户能否离开自己的FTP主目录YES表示禁止FTP用户离开自己的FTP主目录
chroot_list_enable注释控制列表中的FTP用户能否离开自己的FTP主目录需配合 chroot_list_file 使用
chroot_list_file注释FTP用户列表文件,每一行一个用户名默认:/etc/vsftpd/chroot_list
ls_recurse_enable注释控制FTP用户是否能使用类似 ls -R命令默认是禁止的,YES表示允许使用
listenNO控制是否侦听ipv4套接字listen_ipv6 互斥
listen_ipv6YES控制是否侦听ipv6套接字启用时兼容 IPv4 连接
pam_service_namevsftpd设置PAM认证文件的名称默认:/etc/pam.d/vsftpd
userlist_enableYES启用用户列表控制需配合 /etc/vsftpd/user_list 文件
tcp_wrappersYES启用 TCP Wrappers 主机访问控制通过 /etc/hosts.{allow,deny} 管理
pasv_min_port被动模式最小端口号建议设置高端口范围(例:10000)
pasv_max_port被动模式最大端口号需在防火墙放行该端口范围(例:11000)
allow_writeable_chroot允许 chroot 环境下的可写主目录避免 500 错误(替代 chmod u-w /home/user

三、配置场景示例

服务端下载

yum -y install vsftpd

客户端下载

yum -y install lftp
1、匿名用户
  1. 设置允许匿名用户访问FTP服务器

    vim /etc/vsftpd/vsftpd.confpasv_enable=YES				# 启用passive被动模式pasv_min_port=10000			# 开启最低的pasv端口,建议采用大于1024的高端口pasv_max_port=11000			# 开启最高的pasv端口systemctl restart vsftpd
    

    centos7默认允许,不用做修改;centos8修改如上

    在这里插入图片描述

  2. 设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下进行文件上传

    vim /etc/vsftpd/vsftpd.confwrite_enable=YESanon_upload_enable=YESsystemctl restart vsftpdsetfacl -m u:ftp:rwx /var/ftp/pub
    

    在这里插入图片描述

  3. 设置允许匿名用户访问FTP服务器时能够在/var/ftp/pub目录下创建目录

    vim /etc/vsftpd/vsftpd.confwrite_enable=YESanon_mkdir_write_enable=YESsystemctl restart vsftpdsetfacl -m u:ftp:rwx /var/ftp/pub
    

    在这里插入图片描述

  4. 设置允许匿名用户访问FTP服务器时能够对/var/ftp/pub目录中的文件或目录进行重命名或删除操作

    vim /etc/vsftpd/vsftpd.confwrite_enable=YESanon_other_write_enable=YESsystemctl restart vsftpdsetfacl -m u:ftp:rwx /var/ftp/pub
    

    在这里插入图片描述

2、FTP目录

创建用户

useradd ftpuser1
useradd ftpuser2
useradd ftpuser3for i in ftpuser{1..3}>do echo 123321 | passwd --stdin $i>done

在这里插入图片描述

  1. 设置允许FTP用户访问FTP服务器:

    1. local_enable=YES write_enable=YES 这两个值为默认设置

    2. 通过FTP用户访问FTP服务器时,默认访问的主目录为FTP用户家目录

    3. 此时FTP用户可以在自己的家目录下上传文件、下载文件、创建目录、重命名文件或者目录、删除文件或目录,同时FTP用户可以切换至其他目录中访问

    vim /etc/vsftpd/vsftpd.conflocal_enable=YESwrite_enable=YESsystemctl restart vsftpd
    

    在这里插入图片描述

  2. 设置FTP用户访问FTP服务器时,将所有FTP用户访问的目录限制在自己的主目录中,不允许FTP用户访问其他目录

    vim /etc/vsftpd/vsftpd.confchroot_local_user=YESsystemctl restart vsftpd
    

    在这里插入图片描述

    发现提示登录失败

    这是因为如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!

    但是用户主目录此时任然具有写权限,所以提示该错误

    解决方法一

    chmod u-w /home/ftpuser1
    

    使用命令 chmod u-w /home/ftpuser1 去除用户主目录的写权限

    可以解决问题,但不合理,不推荐使用

    在这里插入图片描述

    解决方法二

    vim /etc/vsftpd/vsftpd.confallow_writeable_chroot=YESsystemctl restart vsftpd
    

    在这里插入图片描述

  3. 设置FTP用户访问FTP服务器时,将部分FTP用户访问的目录限制在自己的主目录中,其他FTP用户仍然可以访问其他目录

    vim /etc/vsftpd/vsftpd.confchroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_listvim /home/ftpuser1chroot_listftpuser1systemctl restart vsftpd
    

    在这里插入图片描述

    • chroot_local_enable=NO
      • chroot_list_enable=YES 代表只限制 /etc/vsftpd/chroot_list 文件中定义的FTP用户,其他的ftp用户不受限
      • chroot_list_enable=NO 所有的FTP用户均不受限
  4. 设置FTP用户访问FTP服务器时,部分FTP用户可以访问其他目录,其他FTP用户访问的目录仍然限制在自己的家目录中

    vim /etc/vsftpd/vsftpd.confchroot_local_user=YESchroot_list_enable=YESchroot_list_file=/etc/vsftpd/chroot_listvim /home/ftpuser1chroot_listftpuser1systemctl restart vsftpd
    

    在这里插入图片描述

    • chroot_local_enable=YES
      • chroot_list_enable=YES 代表 /etc/vsftpd/chroot_list 文件中定义的FTP用户不受限,其他的ftp用户受限
      • chroot_list_enable=NO 代表所有的FTP用户受限
  5. 仅允许

    vim /etc/vsftpd/vsftpd.confuserlist_deny=NOvim /etc/vsftpd/user_listftpuser1systemctl restart vsftpd
    

    在这里插入图片描述

    /etc/vsftpd/ftpusers/etc/vsftpd/user_list 文件默认禁用这些用户访问ftp服务器

    userlist_deny=NO 写入 /etc/vsftpd/vsftpd.conf

    • /etc/vsftpd/ftpusers 为黑名单
    • /etc/vsftpd/user_list 为白名单
    • 两者名单列表冲突时,拒绝优先

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/95442.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/95442.shtml
英文地址,请注明出处:http://en.pswp.cn/diannao/95442.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Web UI自动化测试的早期介入?

在传统研发流程中,Web UI自动化测试常被视为“后期活动”——必须等待前端界面完全稳定才能启动。这种滞后导致自动化测试难以覆盖早期迭代,形成“开发等测试、测试等稳定”的恶性循环。本文将系统破解这一困局,提供一套从需求阶段介入、持续…

基于学科竞赛的高职计算机网络教学解决方案

一、引言《关于深化产教融合的若干意见》明确提出 “推行面向企业真实生产环境的任务培养模式”,为我国职业教育发展指明了产教深度融合的方向。在数字经济时代,计算机网络技术正以前所未有的速度迭代更新,产业界对具备前沿技术应用能力和实践…

猿大师中间件:Chrome网页内嵌PhotoShop微信桌面应用程序

随着桌面应用程序集成到网页的需求不断增长,尤其在Chrome浏览器缺乏原生调用EXE功能的情况下,传统网页内嵌解决方案面临失效挑战,猿大师中间件因此发展成为当前主流方案。 2025年猿大师发布了EXE、OCX、COM三个通用组件,自此猿大…

EF (Entity Framework) vs LINQ to SQL vs SqlSugar 全方位对比分析

文章目录1. 概述与背景介绍1.1 Entity Framework (EF)1.2 LINQ to SQL1.3 SqlSugar2. 架构设计对比2.1 EF架构设计2.2 LINQ to SQL架构2.3 SqlSugar架构3. 性能对比3.1 基准测试数据3.2 性能分析3.3 内存使用4. 功能特性对比4.1 数据库支持4.2 主要功能对比4.3 高级特性5. 开发…

MySQL 多表联查与内外连接详解

多表联查是关系型数据库的核心操作,用于从多个表中关联数据。MySQL 支持多种连接方式,最常用的是内连接和外连接(左/右/全外连接)。一、多表联查基础语法 SELECT 列列表 FROM 表1 [连接类型] JOIN 表2 ON 连接条件 [连接类型] JOI…

《网络爬虫》

网络爬虫,是一种自动化程序,用于抓取互联网上的数据。它们通过模拟浏览器行为,抓取网页内容并提取有用信息。爬虫广泛应用于数据采集、搜索引擎索引、竞争对手分析等领域。爬虫的工作流程:请求目标网页:爬虫首先发送 H…

openpnp - 顶部相机环形灯光DIY

文章目录openpnp - 顶部相机环形灯光DIY概述笔记ENDopenpnp - 顶部相机环形灯光DIY 概述 底部相机灯光用环形灯(用钣金折弯成一个10mm高的矩形盒子)是可以的。因为吸嘴落到Z方向和PCB平齐时,用COB灯带装在一个矩形盒子中正好能照射到吸嘴尖端高度附近。 顶部相机…

[AI React Web] E2B沙箱 | WebGPU | 组件树 | 智能重构 | 架构异味检测

第三章:E2B沙箱交互 在前两章中,我们掌握了对话状态管理和AI代码生成管道的运作原理。 但生成代码如何真正运行?这正是E2B沙箱交互的核心价值。 架构定位 E2B沙箱是专为open-lovable打造的虚拟计算环境,具备以下核心能力&…

Redis宝典

Redis是什么 Redis是开源的,使用C语言编写的,支持网络交互,可基于内存也可持久化到本地磁盘的Key-Value数据库。 优点: 因为Redis是基于内存的,所以数据的读取速度很快Redis支持多种数据结构,包括字符串Str…

MyBatis-Plus 分页失效问题解析:@Param 注解的影响与解决方案

引言在 Spring Boot MyBatis-Plus 的开发中,分页查询是常见的需求。然而,有时我们会遇到分页失效的问题,尤其是在方法参数上添加 Param 注解后。本文将通过一个实际案例,分析 Param 注解如何影响 MyBatis-Plus 的分页机制&#x…

机器学习——模型的简单优化

在训练模型时我们可能会遇到模型不满足于预期需要进行改善的环节,这些情况通常包括以下几种常见问题和对应的解决方案:数据质量不足数据量过少:当训练样本不足时,模型难以学习到有效的特征表示。建议通过数据增强(如图…

17.MariaDB 数据库管理

17.MariaDB 数据库管理 数据库介绍 数据库(Database)简单来说,就是按照一定规则存数据的 “仓库”。它能高效存大量数据,还能方便地查、增、改、删数据,是各种信息系统的核心。 核心特点: 结构化存储:数…

AI抢饭碗,软件测试该何去何从?

AI 浪潮下,软件测试路在何方 当某大厂宣布 “AI 测试机器人上岗首日就覆盖 80% 的功能测试” 时,测试圈炸开了锅 —— 有人连夜更新简历,有人在技术论坛发问:“十年测试经验,难道真的不如一行 AI 代码?”AI…

09 ABP Framework 中的 MVC 和 Razor Pages

ABP Framework 中的 MVC 和 Razor Pages 该页面详细介绍了 ABP Framework 与 ASP.NET Core MVC 和 Razor Pages 的集成,涵盖框架组件、项目模板、主题系统和模块集成模式等内容,提供了 ABP 应用程序中传统的服务器端 Web UI 选项。 框架集成组件 ABP 提供…

docker 容器内编译onnxruntime

docker run -itd -p 49142:49142 --gpus "device0" --name cpp_env_20250812 --shm-size"5g" -v /本地路径/onnxruntime:/onnxruntime nvidia/cuda:11.8.0-cudnn8-devel-ubuntu20.04进入容器内安装必要的依赖git clone --branch v1.13.1 --recursive https…

-bash: ll: 未找到命令

“ll” 并不是 Linux 系统的原生命令,而是 “ls -l” 命令的一个常用别名(快捷方式)。提示 “-bash: ll: 未找到命令” 说明你的系统中没有配置这个别名,只需手动添加即可:步骤:添加 ll 别名编辑当前用户的…

docker network 与host的区别

所以docker run的时候只需要加入指定的network,就会从该network自动分配对应的ip是吗 是的,你的理解完全正确! Docker 网络自动分配 IP 机制 当你使用 docker run 命令并指定网络时,Docker 会自动从该网络的子网中分配一个 IP 地址…

GPT-5 现已上线 DigitalOcean Gradient™ AI 平台!

OpenAI 于 8 月 7 日发布其最新人工智能模型 GPT-5。根据 OpenAI 介绍,GPT-5 在编程、数学、写作、视觉等方面的性能全面领先,幻觉更低,指令更准。新架构整合高速模型与深度推理,可实时切换速答或深思。近日,DigitalOc…

#C语言——学习攻略:自定义类型路线--结构体--结构体类型,结构体变量的创建和初始化,结构体内存对齐,结构体传参,结构体实现位段

🌟菜鸟主页:晨非辰的主页 👀学习专栏:《C语言学习》 💪学习阶段:C语言方向初学者 ⏳名言欣赏:“人理解迭代,神理解递归。” 目录 1. 结构体类型 1.1 旧知识回顾 1.1.1 结构体声…

机器学习——TF-IDF算法

TF-IDF(Term Frequency-Inverse Document Frequency)是一种广泛应用于文本挖掘和信息检索领域的经典加权算法,主要用于评估一个词语在文档集合中的重要程度。其核心思想是:一个词语在文档中出现的频率越高,同时在所有文…