目录

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

[root@localhost ~]# yum -y install vsftpd                //安装vsftpd服务

[root@localhost ~]# service vsftpd start                 //启动ftp服务

[root@localhost ~]# chkconfig vsftpd on                 //ftp服务设为开机自启

[root@localhost ~]# chkconfig vsftpd –list                //检查开机自启状态

2C427A639B7A43C39CAEFAB5A4583BE1

/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配置验证用户

[root@myweb ~]# mkdir -p /ftp/zhang                     //创建共享目录

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

[root@myweb ~]# echo "ftper123" | passwd --stdin ftper      //修改用户密码

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

[root@myweb ftp]# chown ftper.ftper /ftp/zhang/            //更改目录的权限

[root@myweb ftp]# vim /etc/vsftpd/vsftpd.conf              //修改配置文件

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

local_enable=YES                                       //开启本地用户

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

                                                       家目录范围内活动

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

[root@myweb ftp]# vim /etc/vsftpd/chroot_list              //添加需要禁锢的用户

Ftper

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

CFD1FEE8155942CDA894B7B6995C0EBE

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之前的当前目录下!命令,临时调用/执行系统命令

B13C45BCC203450AB23C185F0AA79BA6

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:pass@192.168.4.5/passwd

4.出现的错误

4.1bool值出错

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

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

391EE3B9F1DE4C38936AC0C8AB999551

9D16BE6164DD4E3FBEC6304B59E2E5DC

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

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