ftp的介绍与安装

ftp

文章目录

  • ftp
    • 1. ftp简介
    • 2. ftp架构
    • 3. ftp数据连接模式
    • 4. 用户认证
    • 5. vsftpd
      • 5.1 vsftpd安装
      • 5.2 vsftpd配置
      • 5.3 vsftpd虚拟用户配置

1. ftp简介

网络文件共享服务主流的主要有三种,分别是ftp、nfs、samba。

FTP是File Transfer Protocol(文件传输协议)的简称,用于internet上的控制文件的双向传输。

FTP也是一个应用程序,基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

在FTP的使用当中,用户经常遇到两种概念:下载和上传

下载(Download)上传(Upload)
从远程主机拷贝文件至自己的计算机上将文件从自己的计算机上拷贝至远程主机上

2. ftp架构

FTP工作于应用层,监听于tcp的21号端口,是一种C/S架构的应用程序。其有多种客户端和服务端的应用程序,下面来简单介绍一下

客户端工具服务端软件
ftp lftp,lftpget wget,curl filezilla gftp(Linux GUI) 商业软件(flashfxp,cuteftp)wu-ftpd proftpd(提供web接口的一种ftp服务端程序) pureftp vsftpd(Very Secure) ServU(windows平台的一种强大ftp服务端程序)

3. ftp数据连接模式

ftp有2种数据连接模式:命令连接和数据连接

  • 命令连接:是指文件管理类命令,始终在线的持久性连接,直到用户退出登录为止
  • 数据连接:是指数据传输,按需创建及关闭的连接

其中数据连接需要关注的有2点,一是数据传输格式,二是数据传输模式

数据传输格式有以下两种:

  • 文件传输
  • 二进制传输

数据传输模式也有2种:

  • 主动模式:由服务器端创建数据连接
  • 被动模式:由客户端创建数据连接

两种数据传输模式的建立过程:

传输模式建立过程
主动模式命令连接: Client(1025)–> Server(21) 客户端以一个随机端口(大于1023)来连服务器端的21号端口 数据连接: Server(20/tcp) --> Client(1025+1) 服务器端以自己的20号端口去连客户端创建命令连接时使用的随机端口+1的端口号
被动模式命令连接: Client(1110) --> Server(21) 客户端以一个随机端口来连成服务器端的21号端口 数据连接: Client(1110+1) --> Server(随机端口) 客户端以创建命令连接的端口+1的端口号去连服务器端通过命令连接告知自己的一个随机端口号来创建数据连接

主动模式有个弊端,因为客户端的端口是随机的,客户端如果开了防火墙,
则服务器端去连客户端创建数据连接时可能会被拒绝

4. 用户认证

ftp的用户主要有三种:

  • 虚拟用户:仅用于访问某特定服务中的资源
  • 系统用户:可以登录系统的真实用户
  • 匿名用户

5. vsftpd

此处我们要说的ftp应用程序是vsftpd,这也是在公司中用得最多的一款ftp软件。

5.1 vsftpd安装

[root@zhouwei ~]# yum -y install vsftpd
...
...
Total download size: 169 k
Installed size: 348 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transactionInstalling : vsftpd-3.0.2-22.el7.x86_64                              1/1Verifying  : vsftpd-3.0.2-22.el7.x86_64                              1/1Installed:vsftpd.x86_64 0:3.0.2-22.el7Complete!

5.2 vsftpd配置

/etc/pam.d/vsftpd       //vsftpd用户认证配置文件
/etc/vsftpd/            //配置文件目录
/etc/vsftpd/vsftpd.conf     //主配置文件//匿名用户(映射为ftp用户)的共享资源位置是/var/ftp
//系统用户通过ftp访问的资源位置为用户的家目录
//虚拟用户通过ftp访问的资源位置为给虚拟用户指定的映射成为的系统用户的家目录

vsftpd常见的配置参数:

参数作用
anonymous_enable=YES启用匿名用户登录
anon_upload_enable=YES允许匿名用户上传
anon_mkdir_write_enable=YES允许匿名用户创建目录,但是不能删除
anon_other_write_enable=YES允许匿名用户创建和删除目录
local_enable=YES启用本地用户登录
write_enable=YES允许本地用户有写权限
local_umask=022通过ftp上传文件的默认遮罩码
chroot_local_user=YES禁锢所有的ftp本地用户于其家目录中
chroot_list_enable=YES开启禁锢文件列表 需要与chroot_list_file参数一起使用
chroot_list_file=/etc/vsftpd/chroot_list指定禁锢列表文件路径 在此文件里面的用户将被禁锢在其家目录中
allow_writeable_chroot=YES允许被禁锢的用户家目录有写权限
xferlog_enable=YES是否启用传输日志,记录ftp传输过程
xferlog_std_format=YES传输日志是否使用标准格式
xferlog_file=/var/log/xferlog指定传输日志存储的位置
chown_uploads=YES是否启用改变上传文件属主的功能
chown_username=whoever指定要将上传的文件的属主改为哪个用户 此用户必须在系统中存在
pam_service_name=vsftpd指定vsftpd使用/etc/pam.d下的 哪个pam配置文件进行用户认证
userlist_enable=YES是否启用控制用户登录的列表文件: 默认为/etc/vsftpd/user_list文件
userlist_deny=YES是否拒绝userlist指定的列表文件中存在的用户登录ftp
max_clients=#最大并发连接数
max_per_ip=#每个IP可同时发起的并发请求数
anon_max_rate匿名用户的最大传输速率,单位是“字节/秒”
local_max_rate本地用户的最大传输速率,单位是“字节/秒”
dirmessage_enable=YES启用某目录下的.message描述信息 假定有一个目录为/upload,在其下创建一个文件名为.message, 在文件内写入一些描述信息,则当用户切换至/upload目录下时会自动显示.message文件中的内容
message_file设置访问一个目录时获得的目录信息文件的文件名,默认是.message
idle_session_timeout=600设置默认的断开不活跃session的时间
data_connection_timeout=120设置数据传输超时时间
ftpd_banner=“Welcome to chenlf FTP service.”定制欢迎信息,登录ftp时自动显示
//虚拟用户的配置://所有的虚拟用户会被统一映射为一个指定的系统帐号,访问的共享位置即为此系统帐号的家目录//各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定//虚拟用户帐号的存储方式:1.文件:编辑文件,此文件需要被编码为hash格式。奇数行为用户名偶数行为密码2.关系型数据库的表中:通过即时查询数据库完成用户认证mysql库:pam要依赖于pam_mysql软件,可以通过epel源yum安装

5.3 vsftpd虚拟用户配置

vsftpd虚拟用户的配置步骤如下:

//安装依赖的程序:
[root@zhouwei ~]# cd /etc/yum.repos.d/
[root@zhouwei yum.repos.d]# wget http://mirrors.163.com/.help/CentOS7-Base-163.repo
--2018-08-10 12:07:17--  http://mirrors.163.com/.help/CentOS7-Base-163.repo
Resolving mirrors.163.com (mirrors.163.com)... 59.111.0.251
Connecting to mirrors.163.com (mirrors.163.com)|59.111.0.251|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1572 (1.5K) [application/octet-stream]
Saving to: ‘CentOS7-Base-163.repo’100%[=================================>] 1,572       --.-K/s   in 0s2018-08-10 12:07:17 (191 MB/s) - ‘CentOS7-Base-163.repo’ saved [1572/1572]
[root@zhouwei ~]# sed -i 's/\$releasever/7/g' /etc/yum.repos.d/CentOS7-Base-163.repo
[root@zhouwei ~]# sed -i 's/^enabled=.*/enabled=1/g' /etc/yum.repos.d/CentOS7-Base-163.repo
[root@zhouwei ~]# yum clean all
[root@zhouwei ~]# yum -y install epel-release
[root@zhouwei ~]# yum -y install vsftpd//创建文本格式的用户名、密码列表,例如若要添加两个用户tom、jerry,密码分别为123、456
[root@zhouwei ~]# echo 'tom' >> /etc/vsftpd/vu.list
[root@zhouwei ~]# echo '123' >> /etc/vsftpd/vu.list
[root@zhouwei ~]# echo 'jerry' >> /etc/vsftpd/vu.list
[root@zhouwei ~]# echo '456' >> /etc/vsftpd/vu.list
[root@zhouwei ~]# cat /etc/vsftpd/vu.list
tom
123
jerry
456
//这里的用户名和密码是一一对应的,前面输的是帐号,后面跟的是密码//安装db4工具
[root@zhouwei ~]# yum -y install db4*//将刚创建的文本格式用户名、密码文件使用db4工具转换成数据库文件
[root@zhouwei ~]# db_load -T -t hash -f /etc/vsftpd/vu.list /etc/vsftpd/vu.db
//上面的-T表示转换,-t表示加密方式使用hash算法加密//为提高虚拟用户帐号文件的安全性,应将文件权限设置为600,以避免数据外泄
[root@zhouwei ~]# chmod 600 /etc/vsftpd/vu.*
[root@zhouwei ~]# ll /etc/vsftpd/vu.*
-rw-------. 1 root root 12288 Aug  2 15:53 /etc/vsftpd/vu.db
-rw-------. 1 root root    18 Aug  2 15:50 /etc/vsftpd/vu.list//添加虚拟用户的映射帐号、创建ftp根目录。例如要将使用的ftp根目录设置为/var/ftproot, \
//映射帐号的名称为vftp,可以执行以下操作
[root@zhouwei ~]# useradd -d /var/ftproot -s /sbin/nologin vftp
[root@zhouwei ~]# chmod 755 /var/ftproot/
[root@zhouwei ~]# ll -d /var/ftproot/
drwxr-xr-x. 2 vftp vftp 62 Aug  2 15:56 /var/ftproot///为虚拟用户建立PAM认证
[root@zhouwei ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
[root@zhouwei ~]# vim /etc/pam.d/vsftpd
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vu
account required pam_userdb.so db=/etc/vsftpd/vu//修改vsftpd配置文件,添加虚拟用户支持
[root@zhouwei ~]# echo 'guest_enable=YES' >> /etc/vsftpd/vsftpd.conf
[root@zhouwei ~]# echo 'guest_username=vftp' >> /etc/vsftpd/vsftpd.conf//为不同的虚拟用户建立独立的配置文件
[root@zhouwei ~]# echo 'user_config_dir=/etc/vsftpd/vusers_dir' >> /etc/vsftpd/vsftpd.conf
[root@zhouwei ~]# echo 'allow_writeable_chroot=YES' >> /etc/vsftpd/vsftpd.conf//有了上述配置后,就可以在/etc/vsftpd/vusers_dir目录中为每个虚拟用户分别建立配置文件了。 \
//例如,若要使用虚拟用户tom能够上传文件、创建目录,而jerry只有默认的下载权限, \
//可以执行以下操作
[root@zhouwei ~]# mkdir /etc/vsftpd/vusers_dir
[root@zhouwei ~]# ll /etc/vsftpd/
total 36
-rw-------. 1 root root   125 Mar 23  2017 ftpusers
-rw-------. 1 root root   361 Mar 23  2017 user_list
-rw-------. 1 root root  5106 Aug  2 16:01 vsftpd.conf
-rwxr--r--. 1 root root   338 Mar 23  2017 vsftpd_conf_migrate.sh
-rw-------. 1 root root 12288 Aug  2 15:53 vu.db
-rw-------. 1 root root    18 Aug  2 15:50 vu.list
drwxr-xr-x. 2 root root     6 Aug  2 16:03 vusers_dir//设置tom用户可上传文件、创建目录
[root@zhouwei ~]# echo 'anon_upload_enable=YES' >> /etc/vsftpd/vusers_dir/tom
[root@zhouwei ~]# echo 'anon_mkdir_write_enable=YES' >> /etc/vsftpd/vusers_dir/tom//设置jerry用户只有默认的下载权限,只需要创建一个名为jerry的空文件即可
[root@localhost ~]# touch /etc/vsftpd/vusers_dir/jerry//注意:虚拟用户是通过匿名访问的,所以必须开启匿名访问功能!!!//启动服务
[root@localhost ~]# systemctl start vsftpd
[root@localhost ~]# ss -antl
State      Recv-Q Send-Q   Local Address:Port                  Peer Address:Port
LISTEN     0      128                  *:22                               *:*
LISTEN     0      32                  :::21                              :::*
LISTEN     0      128                 :::22                              :::*
LISTEN     0      100                ::1:25                              :::**:*
LISTEN     0      32                  :::21                              :::*
LISTEN     0      128                 :::22                              :::*
LISTEN     0      100                ::1:25                              :::*

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

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

相关文章

Java 常用加密解密

Java 常用加密解密 常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。 对称加密 指加密和解密使用相同密钥的加密算法。对称加密算法的优点在于加解密的高速度和使用长密钥时的难破解性。假设两个用户需要使用对称加密方法加密然后…

B端产品经理学习-B端产品的项目管理

项目管理的作用 指导Roadmap落地 每个节点的项目时间需要按照时间点落地,才不会影响后面的项目事件 为了明确需求,明确研发的工作 避免产研部门因为需求扯皮、研发部门抱怨需求文档不够清晰、在开发过程中增加很多细节需求、增加了研发的工作量、初次…

java自定义工具类在List快速查找相同字段值对象

根据对象某一字段名,获取字段值,将List转换为Map中包含list,Key为字段值,Value为相同字段值的对象list,快速定位具有相同字段值的对象,转换之后便于在Map中根据字段值快速查找相同字段值的对象 //List转Map…

OPC UA 开源库编译方法及通过OPC UA连接西门S7-1200 PLC通信并进行数据交换[一]

前言 在现代工业自动化领域,OPC UA(开放性生产控制和统一架构)是一种广泛应用的通信协议。本文将以通俗易懂的方式解释OPC UA的含义和作用,帮助读者更好地理解这一概念。 一、OPC UA的定义 OPC UA全称为“开放性生产控制和统一…

R语言【paleobioDB】——pbdb_orig_ext():绘制随着时间变化而出现的新类群

Package paleobioDB version 0.7.0 paleobioDB 包在2020年已经停止更新,该包依赖PBDB v1 API。 可以选择在Index of /src/contrib/Archive/paleobioDB (r-project.org)下载安装包后,执行本地安装。 Usage pbdb_orig_ext (data, rank, temporal_extent…

生存分析序章4——生存分析之Python篇:自定义方法与进阶技术探索

目录 写在开头1. 定制生存曲线1.1 利用Python自定义生存曲线1.1.1 构建生存函数1.1.2 自定义曲线样式1.2 特殊需求下的曲线绘制2. 高级Cox模型2.1 引入时间依赖性的Cox模型2.1.1 时间依赖性的概念2.1.2 模型调整2.1.3 场景举例2.2 处理复杂数据的Cox模型应用2.2.1 类别型特征处…

08 整合SSM快速实战

整合配置实战 1 数据库/依赖/实体类/日志准备 CREATE DATABASE mybatis-example;USE mybatis-example;CREATE TABLE t_emp(emp_id INT AUTO_INCREMENT,emp_name CHAR(100),emp_salary DOUBLE(10,5),PRIMARY KEY(emp_id) );INSERT INTO t_emp(emp_name,emp_salary) VALUES(&qu…

Canvas的简单示例

Canvas可用于在网页上绘制图形、动画和交互式内容。 以下是一个简单的Canvas基本用法示例&#xff0c;用于绘制一个红色的矩形&#xff1a; HTML代码&#xff1a; <!DOCTYPE html> <html> <head> <title>Canvas Example</title> </…

简单整理FFmpeg相关命令集

FFmpeg相关命令集 简单整理了FFmpeg相关命令&#xff0c;主要包括ffplay播放控制和媒体播放命令、ffmpeg命令相关参数以及常用的提取音视频等命令。 &#x1f3a1;导航小助手&#x1f3a1; FFmpeg相关命令集1.ffmpeg命令分类查询2.ffplay命令2.1 ffplay播放控制2.2 ffplay命令…

数据绑定,defineProperty,v-on,事件处理

目录​​​​​​​ v-bind单向数据绑定 defineProperty 是v-on的简写 事件处理 v-bind单向数据绑定 从name绑定到v-bind到value单向数据绑定&#xff1a; <input type"text" :value"name"> <input type "text" v-model"na…

领导看了就给我升职加薪的年终总结,我只花5分钟就写完了!

年末正是做总结的时候&#xff0c;如果你正苦于年终总结不知道该如何下手&#xff0c;ProcessOn刚好上线了AI一键帮你生成年终总结的活动&#xff0c;还可以下载成PPT格式&#xff0c;或许可以助你一臂之力&#xff0c;操作起来十分简单。当然&#xff0c;计划也可以一键生成&a…

SpringBoot教程(三) | Spring Boot初体验

SpringBoot教程(三) | Spring Boot初体验 上篇文章我们创建了SpringBoot 项目&#xff0c;并且进行了简单的启动。整个项目了里其实我们就动了两个文件&#xff0c;一个是pom.xml负责管理springboot的相关依赖&#xff0c;一个是springBoot的启动类。 pom文件中通过starter的…

扫雷游戏【可展开一片,超详细,保姆级别,此一篇足够】

一、C语言代码实现的扫雷游戏的运行 C语言实现扫雷 二、扫雷游戏的分析与设计 1.扫雷游戏的界面设计 在玩家玩扫雷的时候&#xff0c;它会给你一个二维的棋盘&#xff08;下面的讲解都以9x9规格为例子&#xff09;&#xff0c;然后点击你想排查的坐标&#xff0c;若不是雷的&…

【Linux】第二十九站:再谈进程地址空间

文章目录 一、一些疑问二、程序没有加载前的地址&#xff08;程序)三、程序加载后的地址四、动态库的地址 一、一些疑问 什么是虚拟地址&#xff1f;什么是物理地址&#xff1f;CPU读到的指令里面用的地址&#xff0c;是什么地址&#xff1f;&#xff1f; 我们之前在使用动态…

记录汇川:H5U与Factory IO测试14

现实53工位的物料运输。 设置了自动连续存启动&#xff1a;就是一个一个运&#xff0c;按照顺序将空的货架填满。 设置了自动连续存停止&#xff1a;就是完成当前循环后退出。 设置了自动连续取启动&#xff1a;就是一个一个运&#xff0c;按照顺序将有货的货架清空。 设置…

如何在Docker中搭建MinIO容器并实现无公网ip远程访问本地服务

文章目录 前言1. Docker 部署MinIO2. 本地访问MinIO3. Linux安装Cpolar4. 配置MinIO公网地址5. 远程访问MinIO管理界面6. 固定MinIO公网地址 前言 MinIO是一个开源的对象存储服务器&#xff0c;可以在各种环境中运行&#xff0c;例如本地、Docker容器、Kubernetes集群等。它兼…

Android Studio安装超详细步骤(包括SDK安装不成功,模拟器无法创建等问题)

本文主要介绍CPU为AMD锐龙和英特尔两种类型在安装中出现的一些问题&#xff0c;两种解决的方案不同&#xff0c;所以首先查看属于哪种&#xff0c;然后找相对应的安装方法。 Android Studio的安装需要准备两个安装文件&#xff0c;一个是java JDK ,一个是Android Studio均可在官…

kubesphere DevOps部署SpringCloud项目

&#x1f34e;devops部署SpringCloud项目 &#x1f345;环境说明&#x1f345;部署流程&#x1f9c1;创建DevOps工程&#x1f9c1;填写流水线信息&#x1f9c1;创建流水线 &#x1f345;部署应用所需脚本&#x1f9c1;jenkinsfile&#x1f9c1;Dockerfile&#x1f9c1;deploy.y…

如何才能把图片无损放大?这几个无损放大的方法分享给你们

在互联网的浩瀚海洋里&#xff0c;我们常常迷失在繁星般的图片之中&#xff0c;寻找那一款能映照出我们内心的头像。无论是渴望在社交媒体上熠熠生辉&#xff0c;还是在游戏世界中塑造独一无二的形象&#xff0c;一个与我们心灵相通的头像总能带给我们难以言喻的喜悦与满足。然…

Qt6自定义QML控件的方式

简单修改样式 有时&#xff0c;您希望为UI的特定部分创建“一次性”外观&#xff0c;并在其他地方使用完整的样式。 例如&#xff0c;也许你不满意基本款式的纽扣有正方形的角。要使它们圆角&#xff0c;可以覆盖背景项并设置矩形的半径属性&#xff1a; import QtQuick impo…