我之我见:ftp共享

author author     2022-08-08     495

关键词:

目录

1.ftp服务概述... 1

1.1简介... 1

1.2复合TCP连接... 1

1.3数据连接模式... 1

1.3.1主动模式... 1

1.3.2被动模式... 1

1.4数据传输模式... 1

1.5ftp类型... 1

2.部署ftp. 2

2.1安装ftp. 2

2.2ftp功能划分... 2

2.2.1ftp访问控制... 2

2.2.2ftp连接及传输控制... 2

2.2.3ftp上传文件默认权限和归属... 3

2.2.4ftp欢迎信息... 3

2.2.5ftp的日志配置... 3

2.2.6是否开启二进制传输... 3

2.6.7ftp用户禁锢... 3

2.6.8常用的ftp全局设置... 4

2.6.9ftp防火墙配置... 4

2.3配置匿名用户... 4

2.4配置验证用户... 5

3.访问ftp. 5

3.1Windows访问ftp. 5

3.1.1dos环境下直接访问ftp. 5

3.1.2浏览及下载工具... 6

4.出现的错误... 6

4.1bool值出错... 6

 

1.ftp服务概述

1.1简介

file transfer protocol 基于C/S结构的文件传输协议,它工作在OSI模型的第七层,即应用层,使用TCP传输, ftp客户端和服务器建立连接前就要进过“三次握手”的过程。

1.2复合TCP连接

--控制连接:tcp 21端口,发送ftp命令信息

--数据连接:tcp 20端口,上传/下载数据

1.3数据连接模式

1.3.1主动模式

1)主动模式:服务器20端口    主动连接    客户端

2)具体过程:第一个操作一定是由客户端发起的,服务器端不可能莫名其妙的去连接一个客户端。连接21端口,21端口是固定的。如果是主动模式,客户端连接21端口,还会告诉服务器我起了一个端口1120这个是随机的,一般是大于1024,连接21端口,服务器说ok,可以相互通信。客户端会先起一个端口,1121同时把端口号通过通道告诉服务器,我要下载你的数据,你传输的时候记得发给我的1121端口,服务器用自己的20端口发给客户端的1121   口。

3)缺点:一般我随便上网,但是不希望别人可以随便连我。防火墙只限制入站,不限制出去。你可以出去。在第二步服务器把数据发给你的时候,你本身的防火墙或路由器的防火墙可能会拦截,这是个主动模式的缺点。除非客户端没有防火墙。所以更多时候是被动模式。

1.3.2被动模式

1)被动模式:服务端??端口   被动连接  客户端

2)具体过程:客户端先访问服务器,使用21端口,连接上之后说我要下载你的数据。服务器不会直接把数据给客户端。服务器随机开一个端口,比如说1230,同时把端口号通过21端口告诉客户端。于是客户端随机开一个端口,2340连上服务器的1230,好了,我连上你了,你可以发送给我了。这条通道是客户端建立的。服务器端的端口是随机的。

3)配置文法:a可以改配置文件,将这个端口固定死。作为管理员可以自己定义了。b通过iptables,专门给ftp的工作模式设置一个特有的规则。只要是服务器起来的端口,我无所谓你开什么端口。被动模式默认端口号是随机的。

1.4数据传输模式

文本模式:ASCLL模式,文本序列传输

二进制模式:程序,图片,只要做ftp,就会有多种多样的数据,图片是记事本写不出来的。注意:采用哪种模式,程序会自己会选择的,不用我们太多的关注

1.5ftp访问类型

匿名用户:ftpanonymous,不用输用户名密码,一般存放公司的一些公共文件

本地用户:linux服务器本机的系统用户账号,需要改密码,人多的时候就不合适了

虚拟用户:账号信息存放在独立的文件或数据库内   在里面写用户名密码,让ftp读我的文件,但是用户名密码不在我的系统里。在一个文件里。为了安全,可能会转码,就成乱码了,就是说加密了。

2.部署ftp

2.1安装ftp

[[email protected] ~]# yum -y install vsftpd                //安装vsftpd服务

[[email protected] ~]# service vsftpd start                 //启动ftp服务

[[email protected] ~]# chkconfig vsftpd on                 //ftp服务设为开机自启

[[email protected] ~]# chkconfig vsftpd –list                //检查开机自启状态

技术分享

/var/ftp/pub

主目录

/usr/sbin/vsftpd

主程序

/etc/init.d/vsftpd  start

脚本,可以用来启动,关闭等

service /etc/init.d/vsftpd start

脚本,可以用来启动,关闭等

/etc/vsftpd/vsftpd.conf

主配置文件

注意:1:起服务是用以上两个脚本都可以,它们是用来管理我们的程序的。有一个脚本就可以了。

2:最原始的方法,就是查一下进程号,然后kill掉进程号,这是很麻烦的。用源码包装完后启动脚本是没有的,得自己写。

3: 匿名用户根目录默认是/var/fpt/pub,真实用户是自己的家目录

4ftp一个是配置文件中用户所拥有的权限,还有就是文件夹本身的权限,要实现某一功能,必须文件夹和用户所拥有的权限是一致的,或者说拒绝优先,交集是最终的权限。

2.2ftp功能划分

2.2.1ftp访问控制

/etc/vsftpd/ftpusers                     //黑名单

/etc/vsftpd/user_list                     ///白名单

userlist_enable=YES                     //YES为启用user_list,只有启用才会读这个文件

userlist_deny= NO/ YES                  //NO为白名单YES为黑名单

注意:

1user_list要么不用,要么就作为白名单,bool值为NO,是白名单

2ftpusers,列入其中的用户被禁止访问

3:内容格式为一行一个用户名称即可

4:两表冲突时拒绝优先

2.2.2ftp连接及传输控制

max_clients=100                           //限制并发的客户端个数为100

max_per_ip=2                             //限制每个客户机IP的并发连接数为2

anon_max_rate=50000                      //匿名最大速度50kb/s(字节/秒)

local_max_rate=500000                      //验证用户最大速率500kb/s(字节/秒)

accept_timeout=60                         //将客户端空闲一分钟后中断,(秒)

connect_timeout=60                        //中断一分钟后又重新连接(秒)

idle_session_timeout=600                    //用户会话空闲后10分钟(秒)

data_connection_timeout=120                //将数据连接空闲2分钟后断(秒)

注意:一台计算机跟另一台计算机通信,但是因为网络的延迟问题,迟迟没有通讯上。不会立马退出,至少再努力一把。连不通没关系,我再试一次,但是会有一个超时时间。迅雷下载就是可以改并发,所以速度就快了。网络实际传输的时候,是数据包,都是打散了。

2.2.3ftp上传文件默认权限和归属

local_umask=022                     //决定了文件的默认权限,文件666-mask值,目录777-mask值,为什么文件是666呢,目录是777呢,一个普通文件有的最大权限就是666,目录一定得有x权限,如果一个目录可读可写,必须得有x权限来进去这个目录。所以一般这么减

chown_uploads=YES                  //是否开启上传文件后,改变文件的归属

chown_username=whoerver           //你指定的是谁就是谁,比如说,有多个静态页面,负责的人不同,上传之后是root有时候就会出现权限问题,此时将所有者和所属组设为一样的权限,将上传文件所有者改为上级目录的所有者,大家都在这个组里,就都可以正常访问自己上传的文件了。

2.2.4ftp欢迎信息

ftpd_banner=写上你要说的话     //要说什么,写在这

dirmessage_enable=YES          //有一个客户端过来访问的时候,要不要出现一个欢迎词

.message                      //欢迎词在这个文件中

注意:

1:浏览器会把欢迎信息屏蔽掉。

2 ftpd_banner这句话加上后,每次将要登陆的时候会出现这句话,即一开始登陆的时候,这个时候要求你输入用户名和密码就会出现这句话。

3:当开启dirmessage后,在你要访问的目录下建立一个.message的隐藏文件,在这个文件中输入你想要说的话,登陆或切换到这个目录的时候就会出现.message文件当中的话。

2.2.5ftp的日志配置

Xferlog_enable=YES                         //日志功能是否开启

Xferlog_file=/var/log/xferlog                  //指定ftp的日志目录

Xferlog_std_format=YES                      //是否启用标准的日志格式

2.2.6是否开启二进制传输

Ascii_upload_enable=YES                     //允许二进制文件上传

Ascii_download_enable=YES                     //允许二进制文件下载

注意:自己会选择,不要强制设置,要不然传输的可能会有损坏

2.6.7ftp用户禁锢

chroot_local_user=YES                       //禁锢所有本地账户

chroot_list_enable=YES                      //开启禁锢列表

chroot_list_file=/etc/vsftpd/chroot_list         //指定禁锢列表,在此表中添加,一行一个

注意:不禁锢是一件非常危险的事情,禁锢就是将用户禁锢在一个特定的目录下,活动范围就是在这个里边。

2.6.8常用的ftp全局设置

write_enable:是否启用写入权限

download_enable:是否允许下载

listen=YES                                  //是否以独立运行的方式监听服务,是否监听端口,必须开,开ftp,始终监听21端口

listen_port                                  //设置监听ftp服务的端口,可以修改

listen_address                               //设置监听ftp服务的ip地址

listen_ipv6=YES                              //是否可以listen ipv6的地址

connect_from_port_20=YES                    //ftp主动模式传输数据的端口

local_enble=YES                             //验证用户是否开启
write_enable=YES                            //
是否可写

2.6.9ftp防火墙配置

经典案例:

公司在一台服务器上部署了网站,出于安全的考虑,要求网站只能在自己的分公司访问,所以做了防火墙。这个网站只是一个静态页面,所以只需要做一个ftp就可以了,把ftp的目录指定为网站的根目录,直接覆盖文件就好了。

pasv_min_port=30001                       //在配置文件中指定最小端口

pasv_max_port=31000                       //在配置文件中指定最大端口

-A INPUT -p tcp  -m multiport --dport 20,21  -m state --state NEW -j ACCEPT

-A OUTPUT -p tcp --sport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

-A INPUT -p tcp --dport 30001:31000 -j ACCEPT

-A OUTPUT -p tcp --sport 30001:31000 -j ACCEPT   //在防火墙中添加以上4条记录

这就是ftp的被动模式,服务器端设置防火墙,客户端直接过来连接。

2.3配置匿名用户

anonymous_enable=YES                    //开启匿名用户,开启后可匿名下载文件

anon_upload_enable=YES                   //匿名用户是否有上传文件权限,不包括目录

anon_mkdir_write_enable=YES               //匿名用户是否有创建目录的权限,开启后可以创建,上传目录。

anon_other_write_enable=YES               //开启后匿名用户拥有重命名,删除等权限

no_anon_password=YES                    //开启此项后不需要进行秘钥验证,直接进入

anon_root=匿名ftp的根目录               //此项可以定义匿名用户的家目录

1:此四项开启后是匿名用户可以达到的最大权限,根据实际情况调整;

2:在配置文件生效有时会有一定的延迟或缓存,解决方法有稍等、重新进入、刷新等操作。

3:要关闭匿名用户,将anonymous改为NO即可。相当于总开关,即使不注释anon的相关配置,匿名用户仍不可用。

4:注:匿名用户下载是使用的是nobody这个用户,所以相应的O这个位置要有R权限才能被下载。若想让匿名用户能上传和删除权限,必需设置

5anon_world_readable_only=YES   这个设置按理说可以控制匿名用户的下载权限,但是做了多次试验后基本几次都失败了,需要以后注意。

6:但是可以用另一个方法实现控制匿名用户的下载权限,即download_enable全局设置,是否允许下载,但是这个会制约本地用户。视情况使用

匿名用户其它配置

2.4配置验证用户

[[email protected] ~]# mkdir -p /ftp/zhang                     //创建共享目录

[[email protected] ~]# useradd -d /ftp/zhang/ ftper              //新建用户,并且指定家目录

[[email protected] ~]# echo "ftper123" | passwd --stdin ftper      //修改用户密码

[[email protected] ~]# usermod -s /sbin/nologin ftper            //修改用户的登录shell,禁止此用户登录系统

[[email protected] ftp]# chown ftper.ftper /ftp/zhang/            //更改目录的权限

[[email protected] ftp]# vim /etc/vsftpd/vsftpd.conf              //修改配置文件

anonymous_enable=NO //禁止匿名用户登录,开启后用匿名用户登录就会提示身份验证失败

local_enable=YES                                       //开启本地用户

chroot_list_enable=YES                                  //开启禁锢,即只能在自己的

                                                       家目录范围内活动

chroot_list_file=/etc/vsftpd/chroot_list                     //指定禁锢文件

[[email protected] ftp]# vim /etc/vsftpd/chroot_list              //添加需要禁锢的用户

Ftper

[[email protected] ftp]# usermod -s /usr/bin/passwd ftper     //用户在远程连接后只能修改密码

技术分享

1:这个经过我实验,是不能登录的,修改密码后只可以再次修改密码,但是,用来登录ftp提示验证失败,使用之前的密码也是提示验证失败。

2:也可以把用户加入一个组,因为这个文件夹的权限是所有者和所属组分配的,当你需要权限时,所有者不是自己,但是加入所属组以后会继承组成员的权限。

3:如果是linux不能识别的乱码文件,即使有权限,也不能删除。

4:一般本地用户登录后,默认配置就基本够了,一些基本权限都可以实现。

5:本地账户ftp,默认共享路径为自己的家目录

3.访问ftp

3.1Windows访问ftp

3.1.1dos环境下直接访问ftp

1:在window里边也可以直接打ftp,表名这个软件是可以用的

2:格式 ftp  IP地址输入用户名和密码就可以了。匿名的话直接输入ftp,回车就可以了。

3:在window里可以打help查看命令。

4:在进ftp之前的当前目录下!命令,临时调用/执行系统命令

技术分享

3.1.2浏览及下载工具

浏览器,wgetcurl

专用的ftp管理工具

Filezilla CuteFTp WinSCp

Wget ftp://192.168.4.5/passwd

Wget http://www.hao.com/a.txt 下载东西直接把链接粘过来就可以了

Firefox ftp://user:[email protected]/passwd

4.出现的错误

4.1bool值出错

我在修改了配置文件之后,重启服务,报如下的错误,原来是配置文件中tcp_wrappers=YE

这一行少了一个字母。像这种的它=后面识别的是bool值,bool值有YESNO,而YESNO也可以写为10。将S加上或者将值改为1即可。后边也不能加空格,加空格也会报如下的错,也不能不写,不写的话就会有missing value的报错

技术分享

技术分享

4.2账户无法创建目录,但是可以创建文件

这个问题我一开始还以为是配置文件的问题,但是一直以来就没有动过配置文件,一直找不到原因,最后发现磁盘空间满了,删除之后就可以了


本文出自 “庭中有奇树” 博客,请务必保留此出处http://zhangdl.blog.51cto.com/11050780/1859399

过拟合之我见

    查看详情

架构师之我见

...朋友也可以留言,我们共同探讨这个话题。 架构师之我见                                                                                  2009-08-06架构 查看详情

闭包之我见

一、闭包是什么?  · 闭包就是可以使得函数外部的对象能够获取函数内部的信息。  ·闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。... 查看详情

前端之我见(代码片段)

1.HTML介绍1.1服务器本质1importsocket234sk=socket.socket()56sk.bind(("127.0.0.1",8080))7sk.listen(5)8910whileTrue:11conn,addr=sk.accept()12data=conn.recv(8096)13conn.send(b"HTTP/1.1200OK\\r\\n\\r\\n")14conn.s 查看详情

httphelper之我见

    前几月一直用一个Http的访问类去调用WebApi,说句实话最开始没觉有什么,一是技术老,二是觉得比较简单,但是最近我一直关注云开发和AI这块儿微软技术,看到云平台调用API大多类似,所以回想这个早年的调... 查看详情

关于元素居中之我见(干货)

不使用定位    水平居中:text-align=center;(可继承)    竖直居中:margin:0auto;(块级元素)    其他居中:1.文字居中:父元素设置高子元素设置高  line-height=height(父元素)          2.图片居中: ... 查看详情

fec之我见一

顾名思义,FEC前向纠错,根据收到的包进行计算获取丢掉的包,而和大神沟通的结果就是纠错神髓:收到的媒体包+冗余包>=原始媒体包数据   直到满足 收到的媒体包+ 冗余包>=原始媒体包数据   ... 查看详情

关于堆栈和block之我见

临时变量存在栈里对象存在堆里关于blockc与oc最大的区别在于一个是静态语言一个是动态语言先看看c的写法voidtestFunc(){printf("helloworld");}voidtestFuncPoint(void){void(*x)(void)=testFunc;x();}  c语言没有block一说,叫做函数指针,其实现... 查看详情

classpathxmlapplicationcontext源代码阅读之我见

由于本人的能力有限,只能说出自己的见解,如有错漏什么的,请大家批评指出。由于代码封装太多,这里只列出了我认为的部分最重要的代码,一些简单的封装代码,不在下面列出。由于代码太过于复杂,在本次博客中,只列... 查看详情

jquery中的callbacks之我见

callbacks是jquery的核心之一。语法如下:jQuery.Callbacks(flags)  flags 类型: String 一个用空格标记分隔的标志可选列表,用来改变回调列表中的行为。once:确保这个回调列表只执行(.fire())一次(像一个递延Deferred).memory:... 查看详情

join()方法之我见

JavaScriptjoin()方法定义和用法join()方法用于把数组中的所有元素放入一个字符串。元素是通过指定的分隔符进行分隔的。语法arrayObject.join(separator)参数描述separator可选。指定要使用的分隔符。如果省略该参数,则使用逗号作为分... 查看详情

编译原理之我见

     经过网上的调查,我发现编译原理并不像我所想象的那样简单,我以为编译原理其实就是像塑造一个翻译师一样,赋予它翻译的架构即可,但是经过调查后,结果却不是我所想,编译原理就是将高级语言翻... 查看详情

fec之我见三

继续上文讲解:3)标准的RTP头结构如下所示:其中第一个字节中的x标志位是否扩展了RTP头,RTP协议允许用户自定义的扩展,扩展的字段紧挨上述RTP固定头。RTP扩展投中承载如下信息:1).当前包所在的Group组序号,码流由连续的Gr... 查看详情

依赖倒置之我见

  .net程序员对面向对象设计原则以及设计模式的重视似乎不如Java,包括许多有经验.net的程序员,也并没有将面向对象的思想渗透进项目中。我本身就是这样一个例子。C#和Java都是面向对象的语言,设计模式对两者是通用的,... 查看详情

云服务之我见

说实话,虽然工作了十几年,但是很少写东西,今后努力多写的东西,记录一下这几年在it领域工作的一些心得,来和大家一起分享!首先说一下笔者工作的是一个二三线城市,有幸进入了一家云计算的工作,不过主营业务并不... 查看详情

margin,padding之我见

 在网页布局中,margin和padding绝对会占很重要的作用,但是在实际的项目中,很多新手前端程序员们往往不能正确的使用它们,导致会出现一些不必要的麻烦,下面是我在前几天的项目中遇到的一些问题,以及个人总结的一... 查看详情

fec之我见四

接上文,来详细的说明一下FEC前向纠错的具体实现:FEC_matrix是一个比较常用的算法,Vandermonde,范德蒙矩阵是法国数学家范德蒙提出的一种各列为几何级数的矩阵。范德蒙矩阵的定义:V=其第i行、第j列可以表示为(αi)^(j-1)。范... 查看详情

快应用之我见

为了对抗微信小程序,安卓手机厂商联合起来推出了快应用,这是好事一件,但快应用的实现方式在我看来并不是一个最佳的方案。首先,既然是对抗小程序,就不应该学小程序的那一套类似于Vue的开发框架,而应该采用React框... 查看详情