关键词:
目录
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访问类型
①匿名用户:ftp或anonymous,不用输用户名密码,一般存放公司的一些公共文件
②本地用户: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,真实用户是自己的家目录
4:ftp一个是配置文件中用户所拥有的权限,还有就是文件夹本身的权限,要实现某一功能,必须文件夹和用户所拥有的权限是一致的,或者说拒绝优先,交集是最终的权限。
2.2ftp功能划分
2.2.1ftp访问控制
/etc/vsftpd/ftpusers //黑名单
/etc/vsftpd/user_list //黑/白名单
userlist_enable=YES //YES为启用user_list,只有启用才会读这个文件
userlist_deny= NO/ YES //NO为白名单YES为黑名单
注意:
1:user_list要么不用,要么就作为白名单,bool值为NO,是白名单
2:ftpusers,列入其中的用户被禁止访问
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权限才能被下载。若想让匿名用户能上传和删除权限,必需设置
5:anon_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.1在dos环境下直接访问ftp
1:在window里边也可以直接打ftp,表名这个软件是可以用的
2:格式 ftp IP地址输入用户名和密码就可以了。匿名的话直接输入ftp,回车就可以了。
3:在window里可以打help查看命令。
4:在进ftp之前的当前目录下!命令,临时调用/执行系统命令
3.1.2浏览及下载工具
浏览器,wget,curl等
专用的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值有YES和NO,而YES和NO也可以写为1和0。将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框... 查看详情