文件服务FTP

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

一、FTP协议

FTP协议:文件传输协议(File Transfer Protocol)

  • 协议定义了一个在远程计算机系统和本地计算机系统之间传输文件的一个标准
    • FTP运行在OSI模型的应用层,并利用传输协议TCP在不同的主机之间提供可靠的数据传输
    • FTP在文件传输中还支持断电续传功能,可以大幅度减少CPU网络带宽的开销

FTP模型

  • 用户接口:提供一个用户接口并使用客户端协议解释器的服务
    • 客户端协议解释器:向远程服务器发送命令并建立客户数据传输过程
    • 服务端协议解释器:响应客户协议机发出的命令并驱动服务端数据传输过程
    • 客户端数据传输协议:负责完成和服务器数据传输过程及客户端本地文件系统的通信
    • 服务端数据传输协议:负责完成和客户数据过程及服务器端文件系统的通信

控制连接(端口号21)

  • 主要用来传送在实际通信过程中需要执行的FTP命令及命令的响应
    • 只需要很小的网络带宽
    • FTP服务端监听21端口号来等待控制连接建立
    • 建立控制连接后,还需要验证客户身份,决定是否建立数据连接
    • 当需要目录列表,传输文件时,才建立数据连接,并且每次客户端都是用不同的端口号来建立数据连接。数据传输完毕,就中断这条临时的数据连接
    • 在FTP连接期间,控制连接始终保持通常的连接状态。在数据连接存在期间,控制连接必须存在;一旦控制连接断开,数据连接会自动关闭。

数据连接(端口号20)

  • FTP服务端监听20端口来等待数据连接
    • 数据连接依赖于控制连接
    • 建立方式(主动被动都是相对服务器而言)

主动模式

  • 通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口
    • 控制连接建立后,客户端进行身份验证,协商数据连接采用主动模式;随后客户端会向FTP服务器发送Port报文,表明自己监听的IP+端口,并等待FTP服务器(20端口)向自己监听的IP+端口发起数据连接请求。
    • 服务端发起数据连接请求,建立数据连接

被动模式

  • 通过三次握手,建立控制连接;客户端的源端口是高位随机端口,目标端口是21端口;
    • 控制连接建立后,客户端进行身份验证,协商数据连接采用被动模式;随后客户端向服务器发送PASV报文,表示我们采用被动模式
    • 服务端收到PASV报文,于是向客户端发送Port报文,表明自己监听的IP+端口
    • 客户端发起数据连接请求,建立数据连接

分为控制连接(端口号21)和数据连接(端口号20)
在这里插入图片描述

二、VSFTPD服务介绍

  • 服务包:vsftpd
  • 服务类型:由systemd启动的守护进程
  • 配置单元:/usr/lib/system/vsftpd.service
  • 守护进程:/usr/sbin/vsftpd
  • 端口:21(ftp),20(ftp-data)
  • 主配置文件:/etc/vsftpd/vsftpd.conf
  • 用户访问控制配置文件:/etc/vsftpd/ftpusers /etc/vsftpd/user_list
  • 日志文件:/etc/logrotate.d/vsftpd
  • 配置文件参数
参数作用
listen=NO是否以独立运行的方式监听服务
listen_address=ip地址设置要监听的IP地址
listen_port=21设置FTP服务的监听端口
download_enable=YES是否允许下载文件
userlist_enable=YES设置用户列表为“允许”
userlist_deny=YES设置用户列表为“禁止”
max_clients=0最大客户端连接数,0为不限制
max_per_ip=0同一IP地址的最大连接数,0为不限制
anonymous_enable=YES是否允许匿名访问
anon_upload_enable=YES是否允许匿名用户上传文件
anon_umask匿名用户上传文件的umask
anon_root=/var/ftp匿名用户的ftp根目录
anon_mkdir_write_enable=YES是否允许匿名用户创建目录
anon_other_write_enable=YES是否开放匿名用户的其他写入权限(重命名、删除等)
anon_max_rate=0匿名用户的最大传输速率,0为不限制
local_enable=yes是否允许本地用户登录
local_umask=022本地用户上传文件的umask值
local_root=/var/ftp本地用户的ftp根目录
chroot_local_user=YES是否将用户权限禁锢在ftp目录,以确保安全
local_max_rate=0本地用户的最大传输速率,0为不限制

基础配置

安装vsftp
[root@localhost ~]#yum -y install vsftpd
准备分发的文件
[root@localhost ~]#touch /var/ftp/abc.txt
启动服务
[root@localhost ~]#systemctl start vsftpd 
[root@localhost ~]#systemctl enable vsftpd
关闭防火墙
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#setenforce 0
  • 客户端工具

Linux中

安装的都是客户端连接工具

  • 第一种
[root@localhost ~]#yum install ftp -y 
[root@localhost ~]#ftp <IP地址>
username:.......anonymous
password:.......
  • 第二种
[root@localhost ~]#yum install lftp -y 
[root@localhost ~]#lftp <IP地址>
  • 区别
    • ftp工具是一定要输入用户名称和密码的,登录成功或者失败会给出提示。lftp不会直接给出登录成功或者失败的提示,需要输入ls工具才可以发现是否连接成功,优点在于连接更加方便

windows中

第一种

  • 可以在浏览器、允许窗口或者资源管理器中输入ftp://IP地址/,这样访问的是ftp的根位置,如果需要访问相关目录可以输入ftp://IP地址/目录/文件名

第二种

  • 在cmd窗口中,输入命令ftp <IP地址>即可访问

匿名用户访问(默认开启)

[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES 
anon_umask=022 
anon_upload_enable=Yes 
anon_mkdir_write_enable=Yes
anon_other_write_enable=Yes 
local_enable=YES 
write_enable=YES 
local_umask=022 
dirmessage_enable=YES 
xferlog_enable=YES 
connect_from_port_20=YES 
xferlog_std_format=YES 
listen=NO 
listen_ipv6=YES 
pam_service_name=vsftpd 
userlist_enable=YES 
tcp_wrappers=YES 
[root@localhost ~]# systemctl restart vsftpd
linux的目录权限会限制我们不允许往里新建文件,但是如果直接添加目录的w权限会导致触发他的安全判断问题,所以就把ftp里的pub目录的属主属组改成ftp解决,并且添加写权限
chown ftp:ftp /var/ftp/pub
chmod 777 /var/ftp/pub
现在就可以往里写文件了

本地用户访问

使用本地用户(在linux服务端下创建的可以登录的用户)登录成功时位置在家目录的位置

[root@localhost ~]# vi /etc/vsftpd/vsftpd.conf 
anonymous_enable=NO 
local_enable=YES 
write_enable=YES 
local_umask=022 
dirmessage_enable=YES 
xferlog_enable=YES 
connect_from_port_20=YES 
xferlog_std_format=YES 
listen=NO 
listen_ipv6=YES 
pam_service_name=vsftpd 
userlist_enable=YES 
tcp_wrappers=YES 
[root@localhost ~]# systemctl restart vsftpd 
[root@localhost ~]# systemctl enable vsftpd 
注意:出现在/etc/vsftpd/ftpuser /etc/vsftpd/user_list这两个文件 中的内容将会被定义为黑名单

虚拟用户访问

1、创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。

[root@localhost ~]# cd /etc/vsftpd/ 
[root@localhost vsftpd]# vi vuser.list 
eagle 
centos 
cisco 
centos 
huawei 
centos

2、使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件

3、降低数据库文件的权限(避免其他人看到数据库文件的内容)

4、把原始的明文信息文件删除。

[root@localhost vsftpd]# db_load -T -t hash -f vuser.list vuser.db 
[root@localhost vsftpd]# file vuser.db 
vuser.db: Berkeley DB (Hash, version 9, native byte-order) 
[root@localhost vsftpd]# chmod 600 vuser.db 
[root@localhost vsftpd]# rm -f vuser.list

5、创建一个本地用户,用来做虚拟用户在本地的代理,为了安全起见,禁止这个本 地用户登录

[root@localhost vsftpd]# useradd -d /var/ftproot -s /sbin/nologin virtual 
[root@localhost vsftpd]# ls -ld /var/ftproot/ 
drwx------. 2 virtual virtual 59 810 23:04 /var/ftproot/ 
[root@localhost vsftpd]# chmod -Rf 777 /var/ftproot/

6、新建一个用于虚拟用户认证的PAM文件vsftpd.vu,利用pam模块(linux内核的一个认证模块)做一个认证

[root@localhost vsftpd]# vi /etc/pam.d/vsftpd.vu 
auth required pam_userdb.so db=/etc/vsftpd/vuser 
account required pam_userdb.so db=/etc/vsftpd/vuser

7、配置文件

[root@localhost vsftpd]# cat /etc/vsftpd/vsftpd.conf 
anonymous_enable=NO 
local_enable=YES 
guest_enable=YES
guest_username=virtual 
allow_writeable_chroot=YES 
write_enable=YES 
local_umask=022 
dirmessage_enable=YES 
xferlog_enable=YES 
connect_from_port_20=YES 
xferlog_std_format=YES 
listen=NO 
listen_ipv6=YES 
pam_service_name=vsftpd.vu 
userlist_enable=YES 
tcp_wrappers=YES 
[root@localhost vusers_dir]# systemctl restart vsftpd
用刚刚创建好的用户登录,但是只能登录,不能写文件,想要给权限,这个用户的权限是被匿名用户权限控制的

8、如果想要针对不同的用户设置不同的权限

[root@localhost vsftpd]# mkdir /etc/vsftpd/vusers_dir/ 
[root@localhost vsftpd]# cd /etc/vsftpd/vusers_dir/ 
[root@localhost vusers_dir]# touch huawei 
[root@localhost vusers_dir]# vi eagle 
anon_upload_enable=YES 
anon_mkdir_write_enable=YES 
anon_other_write_enable=YES 
[root@localhost vusers_dir]# vi /etc/vsftpd/vsftpd.conf 
anonymous_enable=NO 
local_enable=YES 
guest_enable=YES
guest_username=virtual 
allow_writeable_chroot=YES 
write_enable=YES 
local_umask=022 
dirmessage_enable=YES 
xferlog_enable=YES 
connect_from_port_20=YES 
xferlog_std_format=YES 
listen=NO 
listen_ipv6=YES 
pam_service_name=vsftpd.vu  #记得修改这里为我们自己的认证文件
userlist_enable=YES 
tcp_wrappers=YES 
user_config_dir=/etc/vsftpd/vusers_dir #告诉主配置文件,我们下面还有配置
[root@localhost vusers_dir]# systemctl restart vsftpd
huawei没有权限
eagle有权限
下载FTP服务器,通过FTP客户端获取FTP服务器根目录下的所有文件文件列表 题目:下载一个FTP服务器(Serv-U/Wing FTP Server等),自己写一个FTP客户端,控制台打印出FTP服务器根目录下所有文件文件夹下的文件名称 要求:         a.客户端不能使用第三方jar,需使用Socket、Socket  Server         b.读取的文件目录结构要和服务器一致,名称显示要层级清晰         c.支持中文名称和空格的显示,对比服务器... 阅读详情

相关推荐

文件从一个ftp服务器传到另一个ftp服务器

ftpClient1 -->ftpClient2 public void uploadeFile(String filePath,String ywh,String xzqu,String bjbh,Map fj,String id){ filePath=filePath.trim(); String fileName=filePath.substring(filePa...

工作中遇到bug 1808

ftpserver-ftp服务端c++

** 接收tcp数据:TcpSocket-套接字,data-数据,DataLen-希望读取长度,RecvLen-实际读取长度,timeout-超时:返回0-成功,1-对端关闭,-1-参数错误,-2-select超时,-3-select失败,-4-接收失败 *//** 发送tcp数据:TcpSocket-tcp套接字,data-数据,DataLen-数据长度,timeout-超时:返回0-成功,-1-select失败,-2-select超时,-3-发送失败 */= 0)//文件结束。

hx0318的博客 1234

Apache FtpServer在Windows上使用以及SpringBoot中集成apache ftpserver实现Ftp 服务端搭建

Apache FtpServer是100%纯Java FTP服务器。它被设计为基于当前可用的开放协议的完整且可移植的FTP服务器引擎解决方案。FtpServer可以作为Windows服务或Unix / Linux守护程序独立运行,也可以嵌入Java应用程序中。我们还提供对Spring应用程序内集成的支持,并以OSGi捆绑软件的形式提供我们的发行版。默认的网络支持基于高性能异步IO库Apache MINA。使用MINA,FtpServer可以扩展到大量并发用户。

BADAO_LIUMANG_QIZHI的博客 3397

开源FTP 服务器 FileZilla Server

FileZilla 包括FileZilla客户端和FileZilla Server。 Filezilla服务器是免费的开源FTPFTPS服务器。根据GNU通用公共许可证的条款免费分发的开源软件。

西京刀客 1万+

快速入门FTP服务器:手把手教你搭建

FTP服务器

weixin_43263566的博客 2万+

网络协议——FTP(简介、搭建FTP服务端)

网络协议——FTP(简介、搭建FTP服务端),简介、主动模式与被动模式、搭建FTP服务端。

计算机硕士的博客 1万+

两台电脑通过FTP服务进行传输文件

两台电脑通过FTP服务进行传输文件1.扫盲:windows系统自带的ftp服务1.1 打开windows的FTP服务器服务1.2 设置IIS管理器 这篇博客不讲ftp服务的原理,如果想要学习原理可以去看看其他人的博客,这里就是简单的拿来主义 1.扫盲:windows系统自带的ftp服务 如何使用windows系统自带的ftp服务:[1],[2] 1.1 打开windows的FTP服务器服务 win+r 1.2 设置IIS管理器 ...

Cream_Cicilian的博客 2万+

ftp服务器内部文件复制,ftp服务器文件拷贝文件

ftp服务器文件拷贝文件 内容精选换一换您需要将编译后的可执行文件拷贝到目标服务器,并构造相关输入数据,从而运行工程。对于本文档的应用示例,查看$HOME/tools/projects/Custom_Engine/main.cpp中所需输入数据如下所示:以ascend用户登录DDK所在服务器。执行如下命令,拷贝后的目录结构请见表1。cp -r $HOME/tools/projeModel Fil...

weixin_28881575的博客 1669

FTP文件传输服务

FTP文件传输协议摘要 FTP(File Transfer Protocol)是用于网络文件传输的标准协议,采用客户-服务器模型,提供文件上传、下载和管理功能。其工作原理包括主动模式(服务器使用20端口发起数据连接)和被动模式(服务器随机开启高端口,由客户端发起连接)。FTP服务器可通过vsftpd软件部署,配置文件(/etc/vsftpd/vsftpd.conf)可控制匿名用户访问、本地用户权限、文件传输日志等设置。匿名用户默认访问/var/ftp目录,本地用户访问各自家目录。安全配置包括chroot限制

m0_57074908的博客 1966

本地文件上传到远程FTP服务器和从远程FTP服务器下载文件到本地

第2篇    将本地文件上传到远程FTP服务器和从远程FTP服务器上下载文件到本地 1、首先需要在本地设置一个FTP站点 (1)我的电脑——》管理——》本地用户和组——》用户——》新增用户,即设置FTP登录的用户名和密码 (2)其次是在C盘新建文件夹“FTP上传”和“FTP下载”两个文件夹!并在每个文件夹里放不同的文件,以便区分! (3)之后是安装IIS组件,开始——》控制面板——》程序—

水木轩昊昊 1万+

文件服务 FTP Server

FTP Server 简介 名词解释 FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一 logo 作用 提供文件共享服务 互联网上多的媒体资源和软件资源。绝大部分都是通过FTP服务器传递。 软件包 vsftpd 基础 控制端口 command 21/tcp 数据端口 data 20/tcp FTP Server 默认配置 1....

lxfqianfeng的博客 1967

直接读取ftp服务器文件,java读取ftp服务器文件

java读取ftp服务器文件[2021-02-05 07:08:30]简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐:《PHP视频教服务器一、进程与线程二、vsftp服务器1.文件传输协议(fil...

weixin_42377790的博客 2324

通过FTP服务器上下载文件

1.先设置好FTP服务器地址、端口、服务器文件存放路径、文件本地存储路径、用戶名和密碼(我这里获取的是服务器根目录下当天日期 (“yyyy-mm-dd”) 的文件夹) Date now = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); String date = dateFormat.format(now); String FTP_PATH = "/"+date; //服务器文件

ll123151190的博客 3894

ftp服务器文件复制文件路径,FTP文件复制到同一FTP的另一个位置

我需要将同一文件上传到同一FTP的2个不同位置。 有没有办法将FTP上的文件复制到另一个位置,而不是再次上传? 谢谢。斯坦 自从他问了这个简单的问题以来已经7年了,而每个人都必须努力完成这项任务已经7年了。 FTP仅允许重命名,并且没有"从副本复制为"命令,因此两次将相同名称的文件上载两次仍然浪费资源。没有通过FTP协议复制远程文件的标准方法。但是某些FTP服务器为此支持专有或非标准扩展。一些FT...

weixin_34717961的博客 3463

ftp 传输文件服务器,ftp 传输文件服务器

ftp 传输文件服务器 内容精选换一换安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器。例如QQ.exe。本地磁盘映射(推荐使用)使用远程桌面连接MSTSC方式进行数据传输。该方式不支持断点续传,可能存在传输中断的情况,因此不建议上传大文怎样上传文件到Win...

weixin_34696080的博客 851

Linux文件服务配置FTP服务_linux ftp配置

之前学习了网络管理,在平时我们去各网站下载电影或者文件,比如去电影天堂下载电影的时候,细心的会发现网站的前缀是ftp://,这篇文章就开始学习怎么配置ftp服务器供客户端进行下载文件FTP(File Transfer Protocol,文件传输协议)是TCP/IP协议组中的协议之一;作用:提供文件共享服务,互联网上多的媒体资源和软件资源。绝大部分都是通过FTP服务器传递。

m0_60388292的博客 1293

ftp同步服务器文件,ftp同步服务器文件

ftp同步服务器文件 内容精选换一换FTP/SFTP连接适用于从线下文件服务器或ECS服务器上迁移文件到OBS或数据库。当前仅支持Linux操作系统FTP 服务器。连接FTP或SFTP服务器时,他们的连接参数相同,如表1所示。FTP/SFTP连接参数参数名说明取值样例名称连接的名称,根据连接的数据源类型,用户可自定义便于记忆、区分的连接名。ftp_link主机名或IPFTFTP/SFTP连接适用...

weixin_39999536的博客 503

删除ftp服务器文件,java 删除ftp服务器上的文件

java 删除ftp服务器上的文件[2021-02-05 07:06:36]简介:在php中可以使用“ftp_delete”函数删除服务器文件,其语法是“ftp_delete(ftp_connection,file)”,参数“ftp_connection”表示要使用的FTP连接,参数“file”表示要删除的文件php ftp删除文件的实现方法:首先连接ftp;然后通过“ftp_get”函数下载...

weixin_39706491的博客 1372
上一篇: 边界网关路由协议(BGP)
下一篇: 网络文件系统NFS
Dream visit
博客等级 码龄7年 1077粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值