当前位置: 首页 > news >正文

传输文件协议FTP与LFTP

目录

一.简介

二. FTP基础

主动模式(Active Mode):

被动模式(Passive Mode):

三. Vsftp 服务器简介

四. Vsftpd配置

1. 安装vsftpd(ftp服务端)

2.编辑配置文件 (ftp服务端)

3. FTP Clinet(lftp客户端)

4. FTP配置本地用户登录

4.1 创建 zhangsan、lisi  密码都设置为 “123456”

4.2 配置本地用户ftp配置文件

4.3在客户端操作(lftp)


一.简介

FTP(File Transfer Protocol,文件传输协议)是一种用于在网络上传输文件的标准协议。它允许用户通过网络连接到FTP服务器,并在客户端和服务器之间传输文件。

LFTP是一个基于命令行的FTP客户端程序,它是FTP的一个实现。与标准的FTP客户端相比,LFTP提供了更多的功能和灵活性,包括支持多个连接、断点续传、脚本编程等。

以下是FTP和LFTP之间的一些区别和特点:

  1. 功能和灵活性

    • FTP是标准的文件传输协议,提供基本的文件传输功能,但在功能和灵活性方面受到一些限制。
    • LFTP是一个功能强大的FTP客户端程序,提供了许多高级功能,如多连接支持、断点续传、脚本编程等。它更适合于复杂的文件传输任务和自动化操作。
  2. 命令行界面

    • FTP客户端通常有图形用户界面(GUI)和命令行界面(CLI)两种版本。CLI版本通常使用命令行来执行文件传输操作。
    • LFTP是一个纯命令行的FTP客户端程序,所有操作都通过命令行执行。
  3. 使用场景

    • FTP通常用于简单的文件传输任务,如上传和下载文件。
    • LFTP更适用于复杂的文件传输需求,如需要同时传输多个文件或者需要使用脚本自动化文件传输操作的情况。

二. FTP基础

        FTP Server
        作用:提供文件共享服务,实现上传下载
        端口:
        21号,建立tcp连接  默认端口
        20号:传输数据

        软件包:        vsftpd
        FTP端口:       控制端口:21/tcp 
        配置文件:       /etc/vsftpd/vsftpd.conf

FTP协议中的主动模式(Active Mode)和被动模式(Passive Mode)是用于建立数据连接的两种不同方式。在FTP传输过程中,除了控制连接(用于发送命令和响应)外,还需要建立数据连接来传输文件和目录列表等数据。主动模式和被动模式主要影响了数据连接的建立方式。

  1. 主动模式(Active Mode)

    • 在主动模式中,FTP客户端向服务器的端口20发起连接,用于传输数据。
    • 在数据传输之前,FTP客户端会向FTP服务器的端口20发送一个PORT命令,其中包含了客户端用于数据传输的IP地址和端口号。
    • 服务器收到PORT命令后,会主动连接到客户端指定的IP地址和端口,然后进行数据传输。
  2. 被动模式(Passive Mode)

    • 在被动模式中,FTP客户端向服务器的端口21发起连接,用于发送命令和控制连接。
    • 在数据传输之前,FTP客户端会向FTP服务器发送一个PASV命令,服务器在一个范围的高端口中选择一个端口并将其通知给客户端。
    • 客户端收到服务器返回的被动端口后,会建立一个新的数据连接,连接到服务器选择的端口上,然后进行数据传输。

主动模式和被动模式的区别在于数据连接的建立方式。在主动模式中,服务器主动连接到客户端指定的端口,而在被动模式中,客户端主动连接到服务器选择的端口。被动模式通常用于解决防火墙和网络地址转换(NAT)等环境下的问题,因为它可以减少对防火墙的配置要求。

三. Vsftp 服务器简介

vsftpd(Very Secure FTP Daemon)是一个开源的FTP服务器软件,它专注于安全性、性能和稳定性。vsftpd 服务器以其简单、轻量级和高性能而闻名,并且广泛用于Linux和Unix系统中。

以下是vsftpd服务器的一些特点和功能:

  1. 安全性

    • vsftpd致力于提供高级的安全功能,包括支持SSL/TLS加密、虚拟用户、限制用户访问权限等。
    • 通过SSL/TLS加密传输,vsftpd可以提供数据的加密传输,防止数据在传输过程中被窃听或篡改。
  2. 性能

    • vsftpd被设计为高性能的FTP服务器,具有较低的内存消耗和高效的文件传输速度。
    • 它支持异步I/O和多线程处理,能够处理大量的并发连接和高负载的FTP访问。
  3. 灵活性

    • vsftpd提供了丰富的配置选项,可以根据用户的需求进行灵活配置。
    • 它支持用户和组的管理,允许管理员创建虚拟用户、限制用户的访问权限、限制用户的上传和下载速度等。
  4. 轻量级

    • vsftpd是一个轻量级的FTP服务器软件,它的代码简洁、清晰,并且运行稳定。
  5. 易于部署和管理

    • vsftpd易于安装、配置和管理,可以快速部署一个安全、高性能的FTP服务器。
    • 它提供了丰富的文档和在线资源,以帮助管理员进行配置和管理。

四. Vsftpd配置

 
实验环境--准备两台机器,修改其主机名用来区分

#对192.168.226.100修改主机名
hostnamectl set-hostname ftp-server#对192.168.226.130修改主机名
hostnamectl set-hostname client


都关闭防火墙和selinux

systemctl stop firewalld
systemctl disable firewalld    
setenforce 0

1. 安装vsftpd(ftp服务端)

[root@ftp-server ~]# yum install -y vsftpd           #下载
[root@ftp-server ~]# systemctl start vsftpd          #启动
[root@ftp-server ~]# systemctl enable vsftpd         #开机自启

FTP默认共享目录:/var/ftp 

[root@ftp-server ~]# mkdir /var/ftp/upload            #创建自己的共享目录
[root@ftp-server ~]# touch /var/ftp/upload/test.txt  #创建文件到共享目录
[root@ftp-server ~]# cd /var/ftp/
[root@ftp-server ftp]# ls
pub upload#修改ftp目录下所有文件的属主与属组,当时ftp目录切记不能自己修改,只能修改ftp目录下的文件
[root@ftp-server ftp]# chown ftp.ftp * -R     
[root@ftp-server ftp]# ll
总用量 0
drwxr-xr-x 2 ftp ftp  6 6月  10 2021 pub
drwxr-xr-x 2 ftp ftp 22 5月  14 14:53 upload
  • 重点:改变根目录的属主,如果不改变的话,只能访问,其他权限不能生效。因为我们是以ftp用户的身份访问的,而默认的属主属组是root。

  • 注意: - 修改完配置之后需要重启完服务才能生效
                - 还需要从新从客户端登陆,否则修改后的配置看不到效果。

2.编辑配置文件 (ftp服务端)

#找到下面的这些配置选项,取消注释,如果每找到就新增即可,但开启的参数避免重复引发报错
[root@ftp-server ftp]# vi /etc/vsftpd/vsftpd.conf +29anon_umask=022                #添加匿名用户上传下载目录权限掩码,022 表示匿名用户上传的文件将会具有权限 rw-r--r--
anon_upload_enable=YES        #这个选项用于允许匿名用户上传文件到FTP服务器
anon_mkdir_write_enable=YES   #这个选项允许匿名用户在FTP服务器上创建目录(文件夹)
anno_other_write_enable=YES   #这个选项用于允许其他用户对匿名用户上传的文件进行写操作

 

#重启服务
[root@ftp-server ftp]# systemctl restart vsftpd

3. FTP Clinet(lftp客户端)

注意关闭防火墙和selinux

[root@client ~]# yum -y install lftp                            #安装客户端1.get命令(下载,首先要开启下载功能[root@client ~]# lftp 192.168.226.100
lftp 192.168.226.100:~> ls
drwxr-xr-x    2 14       50              6 Jun 09  2021 pub
drwxr-xr-x    2 14       50             22 May 14 06:53 upload
lftp 192.168.226.100:/> cd upload/
lftp 192.168.226.100:/upload> ls
-rw-r--r--    1 14       50              0 May 14 06:53 test.txt
lftp 192.168.226.100:/upload> get test.txt                       #下载
lftp 192.168.226.100:/upload> exit
[root@client ~]# ls                                           #会下载到当前目录
anaconda-ks.cfg  test.txt2.put命令(上传命令,上传之前请在服务端进行配置,将上传功能打开)[root@client ~]# touch /ceshi.txt              #创建测试文件
[root@client ~]# mkdir /yut/                   #创建测试目录
[root@client ~]# touch /yut/b.txt              #在测试目录下面创建测试文件[root@client ~]# lftp 192.168.226.100
lftp 192.168.226.100:~> cd upload/
cd 成功, 当前目录=/upload
lftp 192.168.226.100:/upload> put /ceshi.txt                  #上传文件
lftp 192.168.226.100:/upload> ls
-rw-------    1 14       50              0 May 14 07:50 ceshi.txt
-rw-r--r--    1 14       50              0 May 14 06:53 test.txt
lftp 192.168.226.100:/upload> mirror -R /yut/                 #上传目录以及目录中的子文件
Total: 1 directory, 1 file, 0 symlinks
New: 1 file, 0 symlinks
2 bytes transferred
lftp 192.168.226.100:/upload> ls
-rw-r--r--    1 14       50              0 May 14 08:30 ceshi.txt
-rw-r--r--    1 14       50              0 May 14 06:53 test.txt
drwxr-xr-x    2 14       50             19 May 14 08:43 yut
lftp 192.168.226.100:/upload> mkdir tty                        #创建文件夹
mkdir 成功, 建立 `ty'
lftp 192.168.226.100:/upload> rm ceshi.txt                    #删除ceshi.txt
rm 成功, 删除 `ceshi.txt'
lftp 192.168.226.100:/upload> ls
-rw-r--r--    1 14       50              0 May 14 06:53 test.txt
drwxr-xr-x    2 14       50              6 May 14 08:28 tty
drwx------    2 14       50             19 May 14 08:19 yut
lftp 192.168.226.100:/upload> mirror yut/                    #下载目录
Total: 1 directory, 1 file, 0 symlinks
New: 1 file, 0 symlinks
2 bytes transferred
lftp 192.168.226.100:/upload> exit                            #退出[root@client ~]# ll
总用量 4
-rw-------. 1 root root 1257 4月  30 23:34 anaconda-ks.cfg
-rw-r--r--  1 root root    0 5月  14 14:53 test.txt
drwxr-xr-x  2 root root   19 5月  14 16:45 yut
[root@client ~]# cd yut
[root@client yut]# ls
b.txt

4. FTP配置本地用户登录

4.1 创建 zhangsan、lisi  密码都设置为 “123456”
[root@ftp-server ~]# useradd zhangsan
[root@ftp-server ~]# useradd lisi
[root@ftp-server ~]# echo '123456' | passwd --stdin  zhangsan
更改用户 zhangsan 的密码 。
passwd:所有的身份验证令牌已经成功更新。
[root@ftp-server ~]# echo '123456' | passwd --stdin  lisi
更改用户 lisi 的密码 。
passwd:所有的身份验证令牌已经成功更新。
4.2 配置本地用户ftp配置文件
[root@ftp-server ~]# vim /etc/vsftpd/vsftpd.conf #对如下参数找到并进行添加注释并修改anonymous_enable=NO           #将允许匿名登录关闭
#anon_umask=022                #匿名用户所上传文件的权限掩码 
#anon_upload_enable=YES        #允许匿名用户上传文件
#anon_mkdir_write_enable=YES   #允许匿名用户创建目录
#anon_other_write_enable=YES    #是否允许匿名用户有其他写入权(改名,删除,覆盖)
103 chroot_list_enable=YES     #启用限制登陆用户在主目录里面
104 # (default follows)
105 chroot_list_file=/etc/vsftpd/chroot_list  #限制登陆的用户在这个文件列表中,一行一个用户#需要添加的参数:
allow_writeable_chroot=YES  #允许限制的用户对目录有写权限
local_root=/home/zhangsan       # 设置本地用户的FTP根目录,一般为用户的家目录
local_max_rate=0                # 限制最大传输速率(字节/秒)0为无限制[root@ftp-server ~]# vim /etc/vsftpd/chroot_list     #新增zhangsan
zhangsan
#重启服务
[root@ftp-server ~]# systemctl restart vsftpd
4.3在客户端操作(lftp)
[root@client ~]# lftp 192.168.226.100 -u zhangsan
口令: 
lftp zhangsan@192.168.226.100:~> ls       
lftp zhangsan@192.168.226.100:~> mkdir uuio
mkdir 成功, 建立 `uuio'
lftp zhangsan@192.168.226.100:~> mkdir tgh
mkdir 成功, 建立 `tgh'
lftp zhangsan@192.168.226.100:~> put /root/test.txt
lftp zhangsan@192.168.226.100:~> ls
-rw-------    1 1000     1000            0 May 14 09:25 test.txt
drwx------    2 1000     1000            6 May 14 09:29 tgh
drwx------    2 1000     1000            6 May 14 09:25 uuio
lftp zhangsan@192.168.226.100:~> rm -rf tgh
rm 成功, 删除 `tgh'
lftp zhangsan@192.168.226.100:~> ls
-rw-------    1 1000     1000            0 May 14 09:25 test.txt
drwx------    2 1000     1000            6 May 14 09:29 uuio#现在切换回服务端查看有无刚刚在客户端上传和创建的文件
#服务器端查看[root@ftp-server ~]# cd /home/zhangsan/
[root@ftp-server zhangsan]# ll
总用量 0
-rw------- 1 zhangsan zhangsan 0 5月  14 17:25 test.txt
drwx------ 2 zhangsan zhangsan 6 5月  14 17:25 uuio

4.4 lftp常用命令总结

get下载单个文件
mget下载多个文件
mirror下载目录
put上传单个文件
mput上传多个文件
mirror -R上传目录
mkdir创建目录
rm -rf删除文件或者目录

相关文章:

传输文件协议FTP与LFTP

目录 一.简介 二. FTP基础 主动模式(Active Mode): 被动模式(Passive Mode): 三. Vsftp 服务器简介 四. Vsftpd配置 1. 安装vsftpd(ftp服务端) 2.编辑配置文件 (…...

expdp和impdp 实战

1 查询需要导出数据的用户 select username,default_tablespace from dba_users where username like %USERNAME%; 2 查看原来表空间大小 set linesize 9999 pagesize 9999 SELECT total.tablespace_name, Round(total.MB, 2) AS Total_MB, Round(t…...

知了汇智引领未来:全新AIGC系列课程,打造数字时代人才新标杆

在全球AIGC(生成式人工智能)技术加速发展的背景下,一系列权威报道揭示了该领域内市场潜力、行业应用、教育研究、政府监管以及具体应用场景的蓬勃进展。据腾讯网4月19日报道,中国AIGC应用市场规模预计于2024年达到200亿人民币&…...

软件项目验收第三方测试报告如何获取

软件项目验收第三方测试报告是确保软件质量、安全性和稳定性的重要环节。对于企业和开发者来说,获取一份全面、专业的第三方测试报告,对于提升软件产品的竞争力和用户满意度至关重要。本文将介绍如何获取软件项目验收第三方测试报告,以及相关…...

linux下脚本监控mysql主从同步异常时发邮件通知

在MySQL中,同步异常监控通常涉及监控复制的状态。可以通过查询SHOW SLAVE STATUS命令来获取复制的状态信息,并对其进行监控。以下是一个简单的SQL脚本,用于监控MySQL复制状态并输出异常信息: 查mysql slave状态 SHOW SLAVE STAT…...

【MySQL】分组排序取每组第一条数据

需求:MySQL根据某一个字段分组,然后组内排序,最后每组取排序后的第一条数据。 准备表: CREATE TABLE t_student_score (id int(11) NOT NULL AUTO_INCREMENT COMMENT ID,stu_name varchar(32) NOT NULL COMMENT 学生姓名,course…...

滚珠螺杆在精密机械设备中如何维持精度要求?

滚珠螺杆在精密设备领域中的运用非常之广泛,具有精度高、效率高的特点。为了确保滚珠螺杆在生产设备中能够发挥最佳性能,我们必须从多个维度进行深入考量,并采取针对性的措施,以确保其稳定、精准地服务于现代化生产的每一个环节。…...

现代 c++ 三:右值引用与移动语义

c11 为了提高效率,引入了右值引用及移动语义,这个概念不太好理解,需要仔细研究一下,下文会一并讲讲左值、右值、左值引用、右值引用、const 引用、移动构造、移动赋值运行符 … 这些概念。 左值和右值 左值和右值是表达式的属性。…...

Java学习【类与对象—封装】

Java学习【类与对象—封装】 封装的概念封装的实现包的概念import 导包导包中*的介绍import static 导入包中的静态方法和字段 static关键字的使用static 修饰成员变量static修饰方法静态成员变量的初始化 代码块静态代码块非静态代码块/实例化代码块/构造代码块加载顺序 封装的…...

Co-Driver:基于 VLM 的自动驾驶助手,具有类人行为并能理解复杂的道路场景

24年5月来自俄罗斯莫斯科研究机构的论文“Co-driver: VLM-based Autonomous Driving Assistant with Human-like Behavior and Understanding for Complex Road Scenes”。 关于基于大语言模型的自动驾驶解决方案的最新研究,显示了规划和控制领域的前景。 然而&…...

硅胶可以镭射吗?

在科技发展的今天,我们经常会遇到各种各样的材料,其中就有一种叫做硅胶的材料。那么,硅胶可以镭射吗?答案是肯定的,硅胶不仅可以镭射,而且在某些应用中,它的镭射特性还非常突出。 首先&#xff…...

财务风险管理:背后真相及应对策略

市场经济蓬勃发展,机遇与风险并存也是市场经济的一项重要特征。而财务状况的好坏影响着一个企业的发展前景,作为市场经济的必然产物,财务风险贯穿于企业的一切生产经营活动中,无法预知也不以人的意志为转移。 一、企业财务风险的特…...

MySQL深入理解事务(详解)

事务概述 事务是数据库区别于文件系统的重要特性之一,当我们有了事务就会让数据库始终保持一致性,同时我们还能通过事务机制恢复到某个时间点,这样可以保证已提交到数据库的修改不会因为系统崩溃而丢失。 1、基本概念 事务:一组…...

【Linux系统】进程控制

本篇博客整理了进程控制有关的创建、退出、等待、替换操作方面的知识,最终附有模拟实现命令行解释器shell来综合运用进程控制的知识,旨在帮助读者更好地理解进程与进程之间的交互,以及对开发有一个初步了解。 目录 一、进程创建 1.创建子进…...

Go语言数值类型教程

Go语言提供了丰富的数值类型,包括整数类型、浮点类型和复数类型。每种类型都有其特定的用途和存储范围。下面将详细介绍这些类型,并附带示例代码。 原文链接: Go语言数值类型教程 - 红客网-网络安全与渗透技术 1. 整数类型 原文链接&#xf…...

Linux进程控制——Linux进程等待

前言:接着前面进程终止,话不多说我们进入Linux进程等待的学习,如果你还不了解进程终止建议先了解: Linux进程终止 本篇主要内容: 什么是进程等待 为什么要进行进程等待 如何进程等待 进程等待 1. 进程等待的概念2. 进…...

GPT-4o:融合文本、音频和图像的全方位人机交互体验

引言: GPT-4o(“o”代表“omni”)的问世标志着人机交互领域的一次重要突破。它不仅接受文本、音频和图像的任意组合作为输入,还能生成文本、音频和图像输出的任意组合。这一全新的模型不仅在响应速度上达到了惊人的水平,在文本、音频和图像理解方面也表现出色,给人带来了…...

灵活的静态存储控制器 (FSMC)的介绍(STM32F4)

目录 概述 1 认识FSMC 1.1 应用介绍 1.2 FSMC的主要功能 1.2.1 FSMC用途 1.2.2 FSMC的功能 2 FSMC的框架结构 2.1 AHB 接口 2.1.1 AHB 接口的Fault 2.1.2 支持的存储器和事务 2.2 外部器件地址映射 3 地址映射 3.1 NOR/PSRAM地址映射 3.2 NAND/PC卡地址映射 概述…...

nginx-rtmp

1.已经安装nginx;configure配置模块;make编译无需安装;把objs/nginx复制到已安装的宁目录下 ./configure --prefix/usr/local/nginx --add-module/usr/local/src/fastdfs-nginx-module/src --add-module/usr/local/src/nginx-rtmp-module-mas…...

nginx 代理java 请求报502

情况:nginx代理java 请求 后端返回正常,但是经过nginx 时报502 经过多次对比其他接口发现可能是返回的请求头过大,导致nginx 报错:如下 2024/05/13 02:57:12 [error] 88#88: *3755 upstream sent too big header while reading r…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解(7大核心步骤实战技巧) 一、爬虫完整工作流程 以下是爬虫开发的完整流程,我将结合具体技术点和实战经验展开说明: 1. 目标分析与前期准备 网站技术分析: 使用浏览器开发者工具(F12&…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解&#xff1a;从决策树开始理解三、解法一&#xff1a;二叉决策树 DFS四、解法二&#xff1a;组合式回溯写法&#xff08;推荐&#xff09;五、解法对比 递归算法是编程中一种非常强大且常见的思想&#xff0c;它能够优雅地解决很多复杂的…...