探索FTP:原理、实践与安全优化

引言 

在正式开始讲解之前,首先来了解一下文件存储的类型有哪些。

DAS、SAN和NAS是三种不同的存储架构,分别用于解决不同场景下的数据存储需求。

DAS (Direct Attached Storage 直接附加存储):DAS 是指将存储设备(如硬盘)直接连接到服务器的内部总线或通过外部接口(如USB、SATA、SCSI等)连接到服务器。这种存储方式简单、成本较低,适用于小型网络环境或单机系统,但是不便于多台服务器共享数据,并且扩展性有限。

SAN (Storage Area Network 存储区域网络):SAN 是一种高速专用网络,将存储设备集中管理并通过光纤通道(Fibre Channel)、iSCSI等技术与服务器相连。服务器可以像访问本地存储一样快速地访问SAN中的共享存储资源。SAN具有高带宽、低延迟的特点,适合大型企业应用和数据库服务,支持存储资源共享、备份和容灾策略实施。

NAS (Network Attached Storage 网络附加存储):NAS 是一种独立于服务器的文件级存储解决方案,通过标准网络协议(如TCP/IP,通常是NFS或FTP)为多台客户端提供文件共享服务。NAS设备通常包含操作系统、存储介质和网络接口,用户可以通过网络进行文件读写操作。NAS非常适合文件共享、备份以及中小型企业存储需求,易于部署和管理,但相比SAN在性能上可能稍逊一筹。

本文将深入探讨FTP的基本原理,分享实用操作技巧,并着重讨论如何加强FTP服务的安全性。

在互联网的早期,FTP作为一种标准文件传输协议,在数据共享和网站管理中扮演了关键角色。即便在今天,FTP依然在众多场景下发挥着重要作用,尤其是在网页开发、备份、文件同步以及大规模数据交换等领域。

一、FTP基础概念与工作原理

(一)基本概念

 FTP是一种基于C/S架构的协议,允许用户通过网络上传、下载和管理远程计算机上的文件。它使用两个主要端口——21号端口进行命令交互,20号端口用于数据传输。

(二)传输方式

FTP有主动模式和被动模式两种连接方式,以适应不同的网络环境需求。

FTP 数据传输的类型:

1.主动模式

主动模式:FTP 服务端主动向 FTP 客户端发起连接请求

过程:在主动模式下,客户端告诉服务器它想要使用的一个高位端口号(大于1023),然后客户端在这个端口上开启监听。

连接:服务器收到客户端的请求后,会主动连接到客户端指定的这个端口进行数据传输。

网络环境问题:由于服务器需要主动发起连接,所以如果客户端位于防火墙或者NAT设备之后,并且防火墙或NAT设备没有正确配置以允许服务器的入站连接,主动模式可能会遇到问题。

2.被动模式

被动模式:FTP 服务端等待 FTP 客户端的连接请求

过程:在被动模式下,客户端首先发送一个PASV命令给服务器,请求服务器提供一个用于数据传输的随机高位端口号。

连接:服务器收到请求后,在本地系统中选择一个空闲端口并告知客户端,接着由客户端主动发起连接到服务器提供的这个端口进行数据传输。

优点:被动模式适用于那些网络设置阻止了服务器向客户端发起连接的情况,因为所有的连接都是从客户端发起的。这样,即使客户端位于防火墙或NAT设备之后,只要这些设备允许出站连接,就能正常进行文件传输。

二、vsftpd软件

(一)vsftpd软件介绍

vsftpd (Very Secure FTP Daemon) 是一个非常流行且安全的开源FTP服务器软件,专为类Unix系统设计,如Linux、FreeBSD等。它以其高性能、低内存占用和高度的安全性著称,被广泛应用于各种规模的企业和个人环境中。

主要特点:

安全性:vsftpd支持多种安全功能,包括强制数据传输加密(FTPS或FTP-over-SSL)、CHROOT限制用户访问、禁止匿名登录、启用PAM认证机制以增强权限控制,并可配置防火墙规则以确保仅允许特定IP地址或网络访问FTP服务。

性能与资源优化:vsftpd的设计目标之一是轻量级和高效运行,因此即使在资源有限的环境下也能提供良好的性能表现。

灵活性:支持虚拟用户模式,可通过数据库存储用户信息并进行身份验证。提供详细的配置选项,可以针对不同的用户群组设定独立的上传/下载权限、速率限制、目录访问限制等。

并发连接处理:可以同时处理大量并发FTP会话,并能有效防止DoS攻击。

文件传输模式:支持ASCII和二进制两种传输模式,以及被动和主动两种FTP连接模式。

日志记录:提供详细的日志记录功能,便于追踪FTP活动和问题排查。

SELinux兼容:与SELinux(Security-Enhanced Linux)兼容,能够更好地融入到具有严格安全策略的环境中。

总之,vsftpd是一个强大而灵活的FTP服务器解决方案,适合需要稳定可靠FTP服务的任何场景,尤其是对于注重安全性和效率的用户而言,vsftpd无疑是理想的选择。

(二)vsftpd安装

首先先来安装该软件:yum  install vsftpd  -y

分析一下主配置文件的基本信息

[root@localhost ~]#grep -v "#" /etc/vsftpd/vsftpd.conf #过滤出配置文件中未被注释的信息
anonymous_enable=YES           #启用允许匿名用户访问
local_enable=YES               #允许本地系统用户登录FTP服务器。
write_enable=YES               #允许所有用户在FTP服务器上执行写入操作,如上传文件
local_umask=022                #本地用户上传文件的 umask值。
dirmessage_enable=YES          #当用户在FTP服务器上创建新目录时,会显示一条欢迎消息
xferlog_enable=YES             #启用FTP会话的日志记录功能
connect_from_port_20=YES       #要求数据连接使用FTP标准端口20,这是FTP协议规范的一部分
xferlog_std_format=YES         #按照标准格式记录FTP日志,以便于分析和处理
listen=NO                      #不以独立运行的方式监听服务,通常与下一行listen_ipv6=YES结合使用
listen_ipv6=YES                #通过IPv6地址提供FTP服务。
pam_service_name=vsftpd        #指定PAM的服务名称,用于进行身份验证
userlist_enable=YES            #启用用户列表文件(通常是/etc/vsftpd/user_list),可以在此文件中 制哪些用户可以或不可以登录FTP服务器。
tcp_wrappers=YES               #启用TCP Wrappers支持,允许通过/etc/hosts.allow 和/etc/hosts.deny文件对FTP客户端的访问进行更细粒度的控制。

(三)基础操作

两台机器

FTP服务端192.168.83.30
FTP客户端    192.168.83.40                    

服务端开启vsftpd服务:systemctl  start  vsftpd  

客户端下载ftp :yum  install  ftp  -y

使用ftp 命令连接  ftp IP地址:连接服务端

用户名称:用户分为三类

匿名用户:任何人都可以使用ftp,anonymous用户,无需验证口令即可登入 FTP 服务端。

本地用户:使用 FTP 服务器中的用户、密码信息

虚拟用户:特定服务的专用用户,独立的用户/密码文件

我们在安装程序的是时候会自动生成一个程序用户

所以我们在使用ftp连接时,会直接进入ftp程序用户的家目录

连接时,可以在前面看到不同的数字信息,这些数字代表不同的含义

1xx: 这些信息代码表示临时响应,请求已收到并正在处理中。

例如:125 Data connection already open; transfer starting表示数据连接已经建立,传输即将开始。

2xx: 成功的执行或结束命令。

例如:

220 Service ready for new user. 表示FTP服务器准备接受新的用户连接。

230 User logged in, proceed. 表示用户成功登录。

3xx: 需要进一步的动作才能完成请求。

例如:

331 Password required for user. 表示用户名有效,但需要提供密码。

4xx: 客户端错误,通常是语法错误或者命令无法执行。

例如:

425 Can't open data connection. 表示不能打开数据连接。

421 Timeout. 表示超时,需要重新登录

5xx: 服务器错误,由于内部错误或者资源不可用导致命令无法执行。

例如:

530 Login incorrect. 表示登录失败,用户名或密码不正确。

550 Permission denied.表示没有权限访问指定的文件或目录。

其他代码:

421 :Service not available, closing control connection.表示服务不可用,关闭控制连接。

500 :Syntax error, command unrecognized. 命令格式错误或未识别。

553 :Requested action not taken: file name not allowed 文件名不允许,比如上传文件名不符合服务器规则

登录后,可以输入help查可以使用哪些命令

输入quit退出,也可以按ctrl  d 退出

1.匿名用户

FTP 匿名访问模式是比较不安全的服务模式,尤其在真实的工作环境中千万不要存放敏感的数据,以免泄露.vsftpd 程序默认已经允许匿名访问模式,我们要做的就是开启匿名用户的上传和写入权限

vim  /etc/vsftpd/vsftpd.conf 添加以下内容

参数作用
anonymous_enable=YES允许匿名访问模式。
anon_umask=022匿名用户上传文件的 umask 值。
anon_upload_enable=YES允许匿名用户上传文件
anon_mkdir_write_enable=YES允许匿名用户创建目录
anon_other_write_enable=YES允许匿名用户修改目录名或删除目录

修改完毕后重启服务,让配置文件生效systemctl restart vsftpd

①创建文件

但是重启服务后会发现,还是不能创建文件

这是因为我们对程序用户的家目录还没有权限

原来匿名用户的 FTP 根目录的属主与属组都是 root,所以匿名用户没有写入权限,没有写入权限,就无法创建文件

现在来添加一下权限setfacl   -m  u:ftp:rwx   /var/ftp/pub

切记,在添加权限时,不能写到/var/ftp,这样是比较危险的操作,一旦修改之后,系统会拒绝匿名用户登录,因为添加此项权限后,ftp用户就可以切换真正的系统根。会对文件安全带来威胁。

来服务端查看一下文件

②下载文件

从服务端复制一些文件到/var/ftp/pub目录中

输入get  文件名 就可以下载文件了

但是要注意,在登录之前,客户端在哪个目录,文件就会下载到哪个目录,所以在下载时,要注意磁盘空间

③上传文件

使用put命令  put 文件名

上传本地的文件到服务器后,可以看到,用户的所有者使ftp用户,还需要我们去更改属主或权限才可以,每次都更改太麻烦,我们可以指定文件所有者和权限.默认权限就是644,可以更改其他权限

再来上传一个文件进行测试

我们可以看到,文件的所有者权限与之前都发生了改变

④删除文件

这里是使用delete命令,而不是rm命令

2.本地用户

使用本地用户登录,那么它的根就是本地用户的家目录了

在配置文件中规定,本地用户是可以直接上传文件的

但是,它可以切换到服务端的根目录,所以,客户端使用本地用户的时候,要额外注意权限设置,保证系统安全

我们也可以将它禁锢在自己的家目录中,需要修改一下配置文件,启用禁锢。

将103、104、106行注释掉,默认是关闭,注释后开启

  1. chroot_local_user=YES: 这个选项设置为YES 表示所有本地(非匿名)用户在登录后将被限制在他们的主目录内,不能切换到系统的其他部分。这被称为“更改根目录”或“chroot”。

  2. chroot_list_enable=YES: 当此选项设置为YES 时,表示启用一个用户列表来控制哪些用户不受上一行chroot_local_user=YES 的限制。

  3. chroot_list_file=/etc/vsftpd/chroot_list: 指定一个文件路径,即 /etc/vsftpd/chroot_list。在这个文件中列出的用户不会受到 chroot 限制,即使 chroot_local_user=YES已启用。也就是说,这些用户登录FTP后可以离开自己的主目录访问服务器上的其他目录。

首先,需要创建一个文件,这个文件里的用户是可以切到系统根的用户,除此之外的都不可以

登录kysw用户,切换根目录后,还是在自己的家目录当中

3.虚拟用户


因为虚拟用户模式的帐号口令都不是真实系统中存在的,所以只要配置妥当虚拟用户模式会比本地用户模式更加安全,但是 Vsftpd 服务配置虚拟用户模式的操作步骤相对复杂一些,具体流程如下:

第 1步:建立虚拟 FTP用户数据库文件

切换到FTP程序目录  cd   /etc/vsftpd/

创建用于生成 FTP 用户数据库的原始帐号和密码文件 :vim   userlist

使用db_load 命令用HASH算法生成FTP用户数据库文件vuser.db

因为数据库文件内容比较敏感,所以权限要给小一点  chmod  600  user.db

第 2步:创建 FTP根目录及虚拟用户映射的系统用户

创建用户 zhaowu并设置为不允许登陆系统并定义该用户的家目录,为保证其他用户可以访问,给予rwxr-xr-x 权限

第 3步:建立支持虚拟用户的 PAM 认证文件

第 4步:在 vsftpd.conf 文件中添加支持配置

anonymous_enable=NO禁止匿名开放模式。
local_enable=YES允许本地用户模式。
guest_enable=YES开启虚拟用户模式。
guest_username=zhaowu指定虚拟用户帐号.
pam_service_name=user.vu指定 pam文件。
allow_writeable_chroot=YES允许禁锢的 FTP 根目录可写而不拒绝用户登入请求

第 5步:为虚拟用户设置不同的权限

现在不论是 zhangsan 还是lisi帐户,他们的权限都是相同的一一默认不能上传、创建、修改文件,如果希望用户 lisi 能够完全的管理 FTP 内的资料,就需要让FTP 程序支持独立的用户权限配置文件了

指定用户独立的权限配置文件存放的目录,在配置文件中添加下图信息

vim  /etc/vsftpd/vsftpd.conf

在/etc/vsftpd/创建目录,并切换到该目录

创建空白的zhangsan用户的配置文件,并创建lisi用户的配置文件,指定具体权限

第 6步:重启 vsftpd 服务,验证实验效果

systemctl restart vsftpd重启服务

可以看到,我们登录lisi用户是不存在的,创建的文件是在zhaowu用户的家目录下,就是之前指定映射的系统用户

(四)修改端口号

在配置文件中添加listen_port=10086,默认值为21

修改完毕后重启服务systemctl restart vsftpd,记住,每次修改配置文件后都有需要重启服务,使配置文件生效

再去连接时就要指定端口号

(五)PAM模块认证登录

由于ftp是明文传输, 抓取是可可以获取密码的 默认是不让使用root 用户登录的

首先看一下vsftpd程序的pam模块   vim  /etc/pam.d/vsftpd

我们先来看一下文件

ftpusers: 这是一个系统文件(通常位于 /etc/vsftpd/ftpusers),包含了不允许登录 FTP 服务器的用户列表。将用户名添加到此文件可禁止该用户通过 FTP 登录。

user_list: 在 vsftpd 的配置中,可以使用user_list  文件来指定是否对某些用户进行 chroot(改变根目录)限制。在/etc/vsftpd/user_list 中列出的用户会根chroot_local_user、chroot_list_enable 配置项的影响而受到不同的权限控制。

在这两个文件里的用户是无法通过FTP登录的

可以看到,这两个文件中都有root用户

直接会拒绝登录

将pam模块中的deny改为allow,表示允许这个文件里的用户登录

将user_list文件中的root用户注释掉

然后在之前创建的chroot_list中添加root,或者将配置文件注释

这样我们就可以登录了

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

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

相关文章

阿里云国外云服务器地域、收费标准及活动报价参考

阿里云国外服务器优惠活动「全球云服务器精选特惠」,国外服务器租用价格24元一个月起,免备案适合搭建网站,部署独立站等业务场景,阿里云服务器网aliyunfuwuqi.com分享阿里云国外服务器优惠活动: 全球云服务器精选特惠…

AI语音合成工具-Lalamu Studio

近期,Lalamu Studio开启了beta版本测试:Lalamu Studio。该工具整合了TTS和lip sync功能,可以让任意视频中的人物开口说话,并精确模拟口型。 例如,选择一段视频素材,添加由Ai合成的语音,即可完成…

为什么要选择“零代码”开发的智慧能源管理平台?

全球低代码市场发展较早,集中度逐渐凸显,零代码市场尙未形成市场格局,很多企业出现“业务部门不懂技术,技术部门不懂业务”的现象往往会制约软件的开发进度,如何快速搭建软件系统应用,助力业务增长与效率提…

京东云开发者DDD妙文欣赏(1)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 京东云开发者原文链接:DDD落地实践-架构师眼中的餐厅>>,以下简称《餐厅》。 我截图时,阅读量有6044,在同类文章中已经算是热文了…

山西电力市场日前价格预测【2024-01-20】

日前价格预测 预测说明: 如上图所示,预测明日(2024-01-20)山西电力市场全天平均日前电价为304.16元/MWh。其中,最高日前电价为486.22元/MWh,预计出现在18:15。最低日前电价为87.43元/MWh,预计出…

adb 配对+无线连接

配对 打开手机开发者选项-无线调试-使用配对码配对设备 出现ip端口和配对码后,电脑输入命令: adb pair ip:端口 eg:adb pair 192.168.137.244:39683 提示输入配对码:就按照手机上的输入。 此时配对成功 连接 再使用命令adb connect ip:port…

Java工具类:将xml转为Json

目录 一、场景二、工具类三、测试类四、测试结果 一、场景 在对接第三方接口时,由于接口返回的并不是常见的Json,而是XML,所以需要将XML转为Json,方便后续处理 二、工具类 package com.xxx.util;import org.apache.commons.lang…

力扣 | 15. 三数之和

暴力解法import java.util.*;public class _15_ThreeSum1 {public List<List<Integer>> threeSum(int[] nums) {if (nums null || nums.length < 3)return new ArrayList<>();Set<List<Integer>> res new HashSet<>();Arrays.sort(nu…

Linux的常用命令

查看命令的帮助 命令名 --help 切换目录命令cd cd app 切换到app目录 cd .. 切换到上一层目录 cd / 切换到系统根目录 cd ~ 切换到用户主目录 cd - 切换到上一个所在目录 使用tab键来补全文件路径 列出文件列表&#xff1a;ls ll ls(list)是一个非常有用的命令&…

排序:计数排序

目录 思想&#xff1a; 操作步骤&#xff1a; 思路&#xff1a; 注意事项&#xff1a; 优缺点&#xff1a; 代码解析&#xff1a; 完整代码展示&#xff1a; 思想&#xff1a; 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。 操作步骤&#xff…

基于 Hologres+Flink 的曹操出行实时数仓建设

本文整理自曹操出行实时计算负责人林震基于 HologresFlink 的曹操出行实时数仓建设的分享&#xff0c;内容主要分为以下六部分&#xff1a; 曹操出行业务背景介绍曹操出行业务痛点分析HologresFlink 构建企业级实时数仓曹操出行实时数仓实践曹操出行业务成果分析未来展望 一、曹…

AI新势力|将创业当作修行的BookGPT

近期&#xff0c;科技慢半拍联合AIGC开放社区采访了AI创业产品BootGPT的创始人陆再谋。陆总分享了他的创业之旅&#xff0c;从贵州到北京&#xff0c;再回到贵州的整段创业经历&#xff0c;从最初的困难到逐渐取得的成果&#xff0c;打造出了BookGPT这款创业产品。 在本次访谈中…

c++学习笔记-STL案例-机房预约系统4-管理员模块

前言 衔接上一篇“c学习笔记-STL案例-机房预约系统3-登录模块”&#xff0c;本文主要设计管理员模块&#xff0c;从管理员登录和注销、添加账号、显示账号、查看机房、清空预约五个功能进行分析和实现。 目录 7 管理员模块 7.1 管理员登录和注销 7.1.1 构造函数 ​编辑7.1.2…

加速电压对扫描电子显微镜成像的影响

扫描电子显微镜&#xff08;SEM&#xff09;是一种利用聚焦电子束扫描样品表面&#xff0c;通过激发和收集二次电子、特征X射线等信号&#xff0c;获得样品表面形貌和成分信息的分析仪器。在SEM成像过程中&#xff0c;加速电压是一个关键参数&#xff0c;对成像效果具有重要影响…

【概述版】悲剧先于解析:在大型语言模型的新时代,历史重演了

这篇论文探讨了大型语言模型&#xff08;LLM&#xff09;的成功对自然语言处理&#xff08;NLP&#xff09;领域的影响&#xff0c;并提出了在这一新时代中继续做出有意义贡献的方向。作者回顾了2005年机器翻译中大型语法模型的第一个时代&#xff0c;并从中汲取教训和经验。他…

运动型蓝牙耳机推荐哪款?2024运动耳机排行榜最新

​运动耳机在运动爱好者的装备清单中占有重要地位&#xff0c;要求舒适佩戴、卓越音质和环境适应性。市面上的运动耳机琳琅满目&#xff0c;选择合适的可能令人犹豫。那么都有哪些运动耳机值得入手呢&#xff1f;今天来跟大家聊聊运动耳机推荐哪款。 1.南卡开放式耳机&#xff…

数据结构:链式栈

stack.h /* * 文件名称&#xff1a;stack.h * 创 建 者&#xff1a;cxy * 创建日期&#xff1a;2024年01月18日 * 描 述&#xff1a; */ #ifndef _STACK_H #define _STACK_H#include <stdio.h> #include <stdlib.h>typedef struct stack{int data…

环形链表问题2(返回链表开始入环的第一个节点)

环形链表问题2&#xff08;返回链表开始入环的第一个节点&#xff09; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream…

妇幼保健院污水处理需要哪些工艺设备

妇幼保健院作为医疗机构&#xff0c;在日常运营中会产生大量的污水&#xff0c;因此污水处理是一个非常重要的环节。为了保证污水得到有效处理&#xff0c;并达到相关的排放标准&#xff0c;妇幼保健院污水处理工艺设备是必不可少的。 首先&#xff0c;妇幼保健院污水处理需要一…

【蓝桥杯EDA设计与开发】资料汇总以及立创EDA及PCB相关技术资料汇总(持续更新)

[18/01/2024]&#xff1a;目前为了准备蓝桥杯做一些资料贴&#xff0c;于是写下这一篇博客。 各种资料均来源于网络以及部分书籍、手册等文档&#xff0c;参考不保证其准确性。 如果在准备蓝桥杯&#xff0c;可与我私信共同学习&#xff01;&#xff01;&#xff01;&#xf…