简单的Linux Ftp服务搭建

简单的Linux FTP服务搭建

1.需求

公司有一个esb文件传输代理,其中我们程序有文件传输功能,需要将本地文件传输到esb文件代理服务器上,传输成功之后发送http请求,告知esb将固定文件进行传输到对应外围其他服务的文件目录中,整个过程我们使用到了FTP服务,此处记录一下方便后续复习使用。

2.简单概念

FTP(file Transfer Protocol,文件传输协议),是典型的C/S架构的应用层协议,由客户端软件和服务端软件两个部分共同实现文件传输功能,FTP客户端和服务器之间的连接时可靠的,面向连接的,为数据的传输提供了可靠的保证。

FTP 是TCP传输协议,主要使用20和21端口,20端口用来传输数据,21号端口用来传输FTP控制命令的。

FTP一共分为两种工作模式,分别为主动模式以及被动模式

  • 主动模式:FTP服务端接收下载控制命令后,会主动从tcp/20端口发送数据传输给客户端
    动模式下,客户端下载文件时,FTP服务会主动发起一个连接到客户端(通常是1024以上的端口)建立数据传输通道。
    服务器发送一个PORT命令给客户端,告诉客户端自己的IP地址和使用的端口号。
    客户端打开指定的端口等待接收来自服务器的数据连接。
  • 被动模式:FTP服务端接收下载控制命令后,会开启一个空闲端口被动等待客户端数据传输连接
    在被动模式下,当客户端请求从服务器下载文件时,FTP服务器不会直接连接到客户端的数据端口。
    相反,服务器会创建一个临时的端口[可以指定范围]并处于监听状态,然后通过PASV命令告诉客户端这个端口的信息。
    客户端主动连接到服务器提供的端口,从而建立数据传输通道。

这两种模式的选择主要取决于网络环境的限制,例如NAT或防火墙设置。在某些情况下,主动模式可能因为防火墙或NAT设备的限制而无法正常工作,此时就需要使用被动模式来绕过这些限制。

3.安装过程

我们使用的是 vsftpd服务,首先确认服务是否以前安装过

# 检查服务是否安装过
rpm -q vsftpd

在这里插入图片描述
执行安装命令

yum -y install vsftpd

在这里插入图片描述
进入到/etc/vsftpd目录,进行原有配置文件备份

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

在这里插入图片描述
编辑ftp的配置文件vsftpd.conf

vim /etc/vsftpd/vsftpd.conf

# 文件中具体修改信息
anonymous_enable=YES			# 开启匿名访问,默认开启
local_enable=YES				# 允许本地用户登录
write_enable=YES				# 是否开启ftp的写权限,上传使用
local_umask=022					# 使用本地用户上传文件,文件默认权限是多少 2 写权限
anon_umask=022                  # 设置匿名用户所上传数据权限
anon_upload_enable=YES          # 允许匿名用户上传文件。需取消注释
anon_mkdir_write_enable=YES     # 允许匿名用户创建(上传)目录,需取消注释
anon_other_write_enable=YES     # 允许删除、重命名、覆盖等操作,需要新增
anon_root=/var/ftp/				# 允许匿名用户上传目录,需要新增

编辑完成后重启vsftpd服务,关闭防火墙设置执行模式为宽容模式

systemctl restart vsftpd
systemctl stop firewalld
setenforce 0

在这里插入图片描述

注意:setenforce 0 这个 Linux 命令的作用是将 SELinux (Security-Enhanced Linux) 的执行模式设置为宽容模式(Permissive mode)。

  • Enforcing Mode(强制模式):SELinux 完全启用,并且会强制执行所有的安全策略规则。任何违反策略的行为都会被拒绝,并记录在日志中。
  • Permissive Mode(宽容模式):SELinux 启用,但是不会强制执行策略规则。虽然会检查所有安全策略规则,但是对于违反策略的行为只会记录日志,而不会阻止操作。
    Disabled(禁用):SELinux 完全不工作。

当你运行 setenforce 0 命令时,SELinux 会进入 Permissive 模式,在这种模式下,你可以观察到哪些操作会被 SELinux 阻止,但实际操作还是会继续执行。这对于调试 SELinux 的策略或者查看是否有 SELinux 引起的问题是非常有用的。

需要注意的是,更改 SELinux 的模式通常需要管理员权限。此外,对于系统的安全性来说,运行在 Enforcing 模式下比运行在 Permissive 或 Disabled 模式下更安全。如果你不确定 SELinux 对你的系统的影响,请谨慎操作。

我们上面配置匿名用户的访问目录为 /var/ftp,我们在此目录中随意新增一个jj.xx文件,然后使用windows客户端进行连接
在这里插入图片描述
在cmd中进行客户端匿名连接,使用anonymous/ftp用户登录,密码为空,则可以直接登录,观察到jj.xx文件存在于配置的目录中
在这里插入图片描述
使用get 以及 put 命令进行文件传输下载以及上传操作

get jj.xx
put jj2.xx

在这里插入图片描述

安全隐患:匿名用户权限过高,可靠性低。实际生产过程中,都会禁止匿名用户登录,开始配置

vim /etc/vsftpd/vsftpd.conf
local_enable=Yes                 # 启用本地用户
anonymous_enable=NO              # 关闭匿名用户访问
write_enable=YES                 # 开放服务器的写权限(若要上传,必须开启)
local_umask=077                  # 可设置仅宿主用户拥有被上传的文件的权限
chroot_local_user=YES			 # 将本地用户限制在其主目录内。这意味着当本地用户登录 FTP 服务器后,他们只能访问其主目录及其子目录,不能访问其他目录
allow_writeable_chroot=YES		 # 允许在 chroot 环境下的目录具有写入权限。如果设置了 chroot_local_user=YES,那么默认情况下,用户的主目录通常是只读的。此选项允许用户在他们的主目录内进行写入操作
local_root=/var/ftp/root		 # 指定本地用户的根目录。在这个例子中,所有本地用户的 FTP 访问都将被限制在 /var/ftp/root 目录内。
userlist_deny=NO				 # 当userlist_deny=NO时,用户列表中的用户将被允许登录FTP服务器。YES则相反,无法登录服务器

配置之后我们修改 user_list文件, 在最后添加可以登录ftp的用户信息,此处我们添加risk风险用户在这里插入图片描述
添加之后重启vsftpd服务

systemctl restart vsftpd

我们再使用risk用户进行登录,进行尝试
在这里插入图片描述

3.java客户端连接ftp测试

我们在服务器上随意添加一个目录以及文件,具体信息如下
在这里插入图片描述
我们使用java客户端进行连接,我们首先导入使用的hutool以及ftp包信息

<!-- ftp上传下载-->
<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.7</version>
</dependency>
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.5.7</version>
</dependency>

具体代码部分为:

package cn.git.ftp;

import cn.hutool.extra.ftp.Ftp;

import java.io.File;

/**
 * @description: ftp连接测试
 * @program: bank-credit-sy
 * @author: lixuchun
 * @create: 2024-05-04
 */
public class FTPTest {
    public static void main(String[] args) {
        // ftp连接信息
        Ftp ftp = new Ftp("192.168.138.129", 21, "risk", "101022li");
        File file = new File("D:\\test\\core_2024-09-04.txt");
        // 配置目录需要配置相对路径,相对于ftp服务器配置的根目录,当前我配置的为 /var/ftp/root
        // 实际最后获取文件真实地址为: /var/ftp/root/cus/local/batch/core/core_2024-09-04.txt
        ftp.download("/cus/local/batch/core/core_2024-09-04.txt", file);

        // 或者修改工作目录,再次进行下载
        ftp.cd("/cus/local/batch/core");
        ftp.download("core_2024-09-04.txt", file);

        // 修改工作目录上传文件
        File file2 = new File("D:\\test\\local_20240829154850006b2dx.txt");
        ftp.cd("/COMS");
        ftp.upload("./", file2);
    }
}

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DBA运维小技巧之存储篇-Oracle服务器根目录满了怎么处理(1)LVM情况

故障发生了&#xff01; 周末正在逛街DBA小倩接到一个客户紧急任务&#xff0c;客户说自己的业务数据库突然不好使了&#xff0c;连接也出现了问题&#xff0c;开发人员连库就报这个错 还好正在逛街的小倩同学随身带了笔记本电脑 小倩要来了系统的登录用户名密码&#xff…

AIGC之GAN生成器和判别器的公式

提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 在GAN&#xff08;生成对抗网络&#xff09;中&#xff0c;生成器&#xff08;Generator&#xff09;和判别器&#xff08;Discriminator&#xff09;通常是通过神经网络实现的&#xff0c;因此它们并没有…

林草湿地址、导出echart为word

2.导出 // 导出exportDoc () {this.loading truelet arrRefs [this.$refs.endChart, this.$refs.processChart, this.$refs.officeEndChart]setTimeout(() > {Promise.all(arrRefs.map((canvasDom) > {return this.html2canvasHandle(canvasDom)})).then(res > {let…

【AIGC】InstructPixPix:基于文本引导的图像编辑技术

github:diffusers/examples/instruct_pix2pix/train_instruct_pix2pix_sdxl.py at main huggingface/diffusers GitHub 论文&#xff1a;https://arxiv.org/pdf/2211.09800 摘要 我们提出了一种从人类指令编辑图像的方法&#xff1a;给定一个输入图像和告诉模型做什么的书面…

百度MEG数据开发治理平台-TDS

导读 百度MEG的上一代大数据产品存在平台分散、质量不均和易用性差等问题&#xff0c;导致开发效率低下、学习成本高&#xff0c;业务需求响应迟缓。为了解决这些问题&#xff0c;百度MEG内部开发了图灵3.0生态系统。图灵3.0覆盖了数据全生命周期&#xff0c;包括Turing Data …

人工智能数据基础之概率论入门-学习篇

目录 基本概念随机变量及其分布期望、方差、协方差常见概率分布大数定律与中心极限定理 一、基本概念 1. 试验、事件与样本空间&#xff1a; 试验&#xff08;Experiment&#xff09; 试验是指对一个或多个试验对象进行一次观察或测量的过程。试验具有以下几个特点&#xf…

【计算机网络】电路交换、电报交换、分组交换

【计算机网络】电路交换、电报交换、分组交换 目录 【计算机网络】电路交换、电报交换、分组交换1. 电路交换2. 电报交换3. 分组交换4. 基于分组交换~“虚电路交换”技术 1. 电路交换 电路交换&#xff08;Circuit Switching&#xff09;:通过物理线路的连接&#xff0c;动态地…

JavaScript练手小技巧:利用鼠标滚轮控制图片轮播

近日&#xff0c;在浏览网站的时候&#xff0c;发现了一个有意思的效果&#xff1a;一个图片轮播&#xff0c;通过上下滚动鼠标滚轮控制图片的上下切换。 于是就有了自己做一个的想法&#xff0c;顺带复习下鼠标滚轮事件。 鼠标滚轮事件&#xff0c;参考这篇文章&#xff1a;…

【人工智能学习笔记】4_2 深度学习基础之多层感知机

感知机概述 感知机是人工智能最早的模型,是一种有监督的算法,本质上是一个二分类问题,是神经网络和支持向量机的基础缺点:感知机智能解决单纯的线性问题 感知机的过程 多层感知机的层级结构 多层感知机的层级结构主要包括输入层、隐藏层和输出层、可以用于拟合非线性函数。…

初中生台灯哪个牌子的质量好?五款真的有护眼效果的台灯

现在市面上形形色色的打着“护眼”口号的台灯太多了&#xff0c;因为眼睛对于我们来说很重要&#xff0c;我们看到美丽的事物都因为有他&#xff0c;所以大家一听到护眼就会选择购买。初中生台灯哪个牌子的质量好&#xff1f;很多商家为了赚钱&#xff0c;随便贴个标签就说护眼…

【Mysql】系统服务启动访问报错问题处理:this is incompatible with sql_mode=only_full_group_by

一、背景&#xff1a; 本来已经正常运行的平台&#xff0c;突然有一天由于对服务器进行部分操作迁移&#xff0c;发现jar可以正常启动&#xff0c;但是访问功能一直报错&#xff0c;监控后台日志后&#xff0c;发现了问题&#xff1a; 报错的具体信息如下&#xff1a; Caused…

安全产品概述

防火墙 防火墙的核心功能是过滤掉有害的流量&#xff0c;在专用网络和公共网络之间建立保护屏障。防火墙过滤通常基于一系列规则&#xff0c;如 IP 地址、域名、协议、端口号、关键字等&#xff0c;对入站和出站的流量进行过滤。这些规则也称为访问控制列表&#xff08;ACCESS…

JSON格式

JSON&#xff08;JavaScript Object Notation, JS对象简谱&#xff09;是一种轻量级的数据交换格式。JSON 就是一种字符串格式,这种格式无论是在前端还是在后端,都可以很容易的转换成对象,所以常用于前后端数据传递 说明&#xff1a; JSON的语法 ​ var obj“{‘属性名’:‘…

Vue3.0项目实战(三)——大事件管理系统首页 layout 架子与文章分类的实现

目录 1. 首页 layout 架子 [element-plus 菜单] 1.1 基本架子拆解 2. 登录访问拦截 2.1 需求 2.2 vue3 和 vue2 中的 Vue-Router 区别 3. 用户基本信息获取&渲染 4. 退出功能 [element-plus 确认框] 5. 文章分类页面 - [element-plus 表格] 5.1 基本架子 - PageCo…

Tomcat Request Cookie 丢失问题

优质博文&#xff1a;IT-BLOG-CN 一、问题描述 生产环境偶尔(涉及到多线程处理)出现"前端传递Cookie为空"的告警&#xff0c;导致前端请求丢失&#xff0c;出现请求失败问题。告警内容如下 前端传递Cookie为空 告警内容&#xff1a;服务端获取request Cookie为空&…

大屏地图区域显示、复选框多选打点,自定义窗体信息(vue3+TS)

效果图&#xff1a; NPM 安装 Loader&#xff1a; npm i amap/amap-jsapi-loader --save 并设置 key 和安全密钥&#xff1a; import AMapLoader from amap/amap-jsapi-loader;//引入高德地图window._AMapSecurityConfig {securityJsCode: "「你申请的安全密钥」"…

[数据集][目标检测]百事可乐可口可乐瓶子检测数据集VOC+YOLO格式195张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;195 标注数量(xml文件个数)&#xff1a;195 标注数量(txt文件个数)&#xff1a;195 标注类别…

前端登录鉴权——以若依Ruoyi前后端分离项目为例解读

权限模型 Ruoyi框架学习——权限管理_若依框架权限-CSDN博客 用户-角色-菜单&#xff08;User-Role-Menu&#xff09;模型是一种常用于权限管理的设计模式&#xff0c;用于实现系统中的用户权限控制。该模型主要包含以下几个要素&#xff1a; 用户&#xff08;User&#xff09;…

【VSCode v1.93.0】手动配置远程remote-ssh

开发环境 VS Code版本&#xff1a;1.93.0 (Windows) Ubuntu版本&#xff1a;20.04 使用VS Code 插件remote-ssh远程访问Ubuntu服务器中的代码&#xff0c;若Ubuntu无法联网&#xff0c;在连接的时候会报错&#xff1a; Could not establish connection to "xxxx": F…

店匠科技携手Stripe共谋电商支付新篇章

在全球电商行业蓬勃发展的背景下,支付环节作为交易闭环的核心,其重要性日益凸显。随着消费者对支付体验要求的不断提高,以及跨境电商的迅猛发展,支付市场正经历着前所未有的变革与挑战。在这一充满机遇与竞争的领域,店匠科技(Shoplazza)凭借其创新的嵌入式支付解决方案—— Sho…