探索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用户,切换根目录后,还是在自己的家目录当中

(四)修改端口号

在配置文件中添加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.rhkb.cn/news/238750.html

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

相关文章

如何在电脑上建立待办事项列表,高效管理每日待办事项?

很多人在日常工作中都面临着诸多待办的任务,确保这些任务按时、高效地完成对工作效率至关重要。想象一下:你是一名项目经理,每天需要跟进各个项目的进展情况,安排会议、协调团队工作、处理突发问题等,这些需要严格按时…

分布式架构理论:从头梳理分布式架构的重难点

文章目录 一、分布式架构 - 系统理论1、分布式一致性与CAP理论2、BASE理论3、分布式一致性算法:Raft(1)Paxos算法(2)Raft算法(3)共识算法:拜占庭将军问题 4、脑裂现象和Lease机制&am…

【ceph】在虚拟环境中需要给osd所在的虚拟盘扩容操作

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》:python零基础入门学习 《python运维脚本》: python运维脚本实践 《shell》:shell学习 《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战 《k8…

Java_线程通信

一、线程通信 首先,什么是线程通信呢? 当多个线程共同操作共享资源时,线程间通过某种方式互相告知自己的状态,以相互协调,避免无效的资源挣抢。 线程通信的常见模式:是生产者与消费者模型 生产者线程负…

Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式

Vue 中修改 Element 组件的 下拉菜单(Dropdown) 的样式 今天在项目中碰到一个 UI 改造的需求,需要根据设计图把页面升级成 UI 设计师提供的设计图样式。 到最后页面改造完了,但是 UI 提供的下拉菜单样式全部是黑色半透明的,只能硬着头皮改了。…

【LeetCode】组合两个表(mysql)

题目 编写解决方案,报告 Person 表中每个人的姓、名、城市和州。如果 personId 的地址不在 Address 表中,则报告为 null 。 以 任意顺序 返回结果表。 结果格式如下所示。 答 select firstName ,lastName,city,state from Person left join Address …

[渗透测试学习] Hospital - HackTheBox

文章目录 信息搜集getshell提权信息搜集 nmap扫描一下端口 发现8080端口和443端口有http服务 然后发现3389端口是启用了ms-wbt-server服务 在对443端口的扫描没有收获,并且只有邮箱登录界面无法注册 接着看向8080端口,我们随便注册用户登录后发现有文件上传功能 getshell …

git撤销提交到本地的commit

有些时候,当我们提交代码到本地后,突然发现因为某些原因需要撤销提交本地的代码。 就比如我,因为代码写错了分支,已经提交到本地了,而我需要取消,并且还要把代码搞得另外的分支上。 提交前: …

放空一下自我 free

文章目录 放空一下自我 free默认的效果使用易读的参数间隔显示内存状态查看meminfo文件更多信息 放空一下自我 free **free**这个命令在Linux系统监控的工具里面,算是使用的比较多的一个。 使用_man_查看可知,官方含义为: Display amount o…

基于Spring Boot+vue的云上新鲜水果超市商城系统

本云上水果超市是为了提高用户查阅信息的效率和管理人员管理信息的工作效率,可以快速存储大量数据,还有信息检索功能,这大大的满足了用户、员工信息和管理员这三者的需求。操作简单易懂,合理分析各个模块的功能,尽可能…

SpringMVC-异常处理及常用组件

异常处理器 1.基于配置的异常处理 springmvc提供了一个处理控制器方法执行过程中所出现的异常的接口: HandlerExceptionResolver HandlerExceptionResolver接口的实现类有: DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver springmvc提供了自定义的异常处…

实践学习PaddleScience飞桨科学工具包

实践学习PaddleScience飞桨科学工具包 动手实践,在实践中学习!本项目可以在AIStudio平台一键运行!地址:https://aistudio.baidu.com/projectdetail/4278591 本项目第一次执行会报错,再执行一次即可。若碰到莫名其妙的…

C++ | 四、指针、链表

指针 指针用来储存地址定义方式,int *ptr;,使用*来表示所定义的变量是指针取地址符,ptr &a;,通过&来取得一个普通变量的地址,并储存到指针中取值(解引用),想要取得一个指针…

15.鸿蒙HarmonyOS App(JAVA)进度条与圆形进度条

15.鸿蒙HarmonyOS App(JAVA)进度条与圆形进度条 progressBar2.setIndeterminate(true);//设置无限模式,运行查看动态效果 //创建并设置无限模式元素 ShapeElement element new ShapeElement(); element.setBounds(0,0,50,50); element.setRgbColor(new RgbColor(255,0,0)); …

排序——计数排序

文章目录 概念思路绝对映射:相对映射 代码实现特性结果演示 概念 计数排序是一个非基于比较的排序算法,该算法于1954年由 Harold H. Seward 提出。它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(nk)(其中k是整数的范围…

typora导出html添加目录

typora导出html添加目录 使用方法 首先要从typora导出html文件,之后用记事本编辑器html文件 找到文档最后面,如图: 用文字编辑类工具打开sideBar.txt,复制其中所有内容【内容在下面】 在如上图的位置插入所复制的内容 打开修改…

【深入挖掘Java技术】「源码原理体系」盲点问题解析之HashMap工作原理全揭秘(上)

HashMap工作原理全揭秘 — 核心源码解析 知识盲点概念介绍数据结构数组链表数组VS链表哈希表不同JVM版本HashMap的展现形式 HashMap VS HashTable特性区别对比 hashcodehashCode的作用equals方法和hashcode的关系key为null怎么办执行步骤 核心参数容量探讨负载因子探讨加载因子…

usb个人总结

一、usb工具分析 1、不同的usb抓包工具抓包分析 2、USB抓包分析方式 外接usb分析仪分析 (1)力科usb分析仪 (2)HD-USB12 协议分析仪 (3)沁恒CH552 usb分析仪,软件工具USB2.0 Monitor (4)等等…

PHP留言板实现

完整教程PHP留言板 登陆界面 一个初学者的留言板(登录和注册)_php留言板登录注册-CSDN博客 留言板功能介绍 百度网盘 请输入提取码 进入百度网盘后,输入提取码:knxt,即可下载项目素材和游客访问页面的模板文件。 &…

基于springboot书籍学习平台源码和论文

首先,论文一开始便是清楚的论述了平台的研究内容。其次,剖析平台需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确平台的需求。然后在明白了平台的需求基础上需要进一步地设计平台,主要包罗软件架构模式、整体功能模块、数据库设计。本项…