linux服务篇-FTP服务

       FTP 是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。文件传输协议(File Transfer Protocol,FTP)是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层, 使用 TCP 传输而不是 UDP, 客户在和服务器建立连接前要经过一个“三次握手”的过程, 保证客户与服务器之间的连接是可靠的, 而且是面向连接, 为数据传输提供可靠保证。

       互联网上提供文件存储和访问服务的计算机,他们依照的是FTP协议提供服务!支持FTP协议的服务器就是FTP服务器!FTP协议提供存储和传输服务的一套协议!

       下载”(Download)和”上传”(Upload)。”下载”文件就是从远程主机拷贝文件至自己的计算机上;”上传”文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

 FTP允许用户以文件操作的方式(如文件的增、删、改、查、传送等)与另一主机相互通信。然而, 用户并不真正登录到自己想要存取的计算机上面而成为完全用户, 可用FTP程序访问远程资源, 实现用户往返传输文件、目录管理以及访问电子邮件等等, 即使双方计算机可能配有不同的操作系统和文件存储方式。

FTP 的目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。

常见的FTP服务

       Windows下:Serv-U FTP Server

Linux下有代表性的FTP服务器软件是Wu-FTP、ProFTP 及vsftpd。Wu-FTP(Washington University FTP)是由美国华盛顿大学开发的、以效率和稳定性为参考量的FTP软件。它的功能强大,配置较复杂,由于开发时间较早,应用十分广泛,也因此成为黑客们主要的攻击目标。Wu-FTP的早期各级版本不断出现安全漏洞,系统管理员不得不因安全因素而经常对其进行升级。ProFTP针对Wu-FTP的弱项而开发,除了在安全性方面进行了改进外,还具备设置简单的特点,并提供了一些Wu-FTP没有的功能,大大简化了架设和管理FTP服务器的工作。vsftpd 则凭借在安全性方面的出色表现,被很多大型网站广为采用。

工作端口和模式

       20号端口:数据传输端口 ftp-data

       21号端口:指令传输端口

[root@kylinos63 ~]# grep ftp /etc/services

ftp-data        20/tcp

ftp-data        20/udp

# 21 is registered to ftp, but also used by fsp

ftp             21/tcp

ftp             21/udp          fsp fspd  #fsp=file service protocol 文件服务协议

 

模式:FTP 是基于客户———服务器(C/S)模型而设计的,在客户端与 FTP 服务器之间建立两个连接。

工作原理

开发任何基于 FTP 的客户端软件都必须遵循 FTP 的工作原理,FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条 TCP 连接,一条是数据连接,用于数据传送;另一条是控制连接,用于传送控制信息(命令put、get和响应),这种将命令和数据分开传送的思想大大提高了 FTP 的效率,而其它客户服务器应用程序一般只有一条 TCP 连接。在整个交互的 FTP 会话中,控制连接始终是处于连接状态的,数据连接则在每一次文件传送时先打开后关闭。

数据传输原理

数据传输原理: FTP的传输有两种方式:ASCII、二进制(默认传输方式)。

 

ASCII传输方式

假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。

但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝。

二进制传输模式

在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。

如在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会损坏数据。(ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果传输二进制文件,所有的位都是重要的。)

支持模式

FTP客户端发起FTP会话,与FTP服务器建立相应的连接。FTP会话期间要建立控制信息进程与数据进程两个连接。控制连接不能完成传输数据的任务,只能用来传送FTP执行的内部命令以及命令的响应等控制信息;数据连接是服务器与客户端之间传输文件的连接,是全双工的,允许同时进行双向数据传输。当数据传输完成后,数据连接会撤消,再回到FTP会话状态,直到控制连接被撤消,并退出会话为止。

 

工作流程(原理):主动被动模式

       FTP会话包含了两个通道,控制通道和数据通道,FTP的工作有两种方式,一种是主动模式,一种是被动模式,以FTPServer为参照物,主动模式,服务器主动连接客户端传输,被动模式,等待客户端的的连接。这里都是相对于服务器而言的。

       (无论是主动模式还是被动模式,首先的控制通道都是先建立起来的,只是在数据传输模式上的区别)

主动模式(standard、PORT方式)

服务器是主动的连接客户端的,所以称这种模式为主动模式。

       工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理如下图:

426aa87af37345dd87c371c8bf62686a.png

PORT模式 :当FTP客户以PORT模式连接服务器时,他动态的选择一个端口号(本次试验是6015)连接服务器的21端口,注意这个端口号一定是1024以上的,因为1024以前的端口都已经预先被定义好,被一些典型的服务使用,当然有的还没使用,保留给以后会用到这些端口的资源服务。当经过TCP的三次握手后,连接(控制信道)被建立。现在用户要列出服务器上的目录结构(使用ls或dir命令),那么首先就要建立一个数据通道,因为只有数据通道才能传输目录和文件列表,此时用户会发出PORT指令告诉服务器连接自己的什么端口来建立一条数据通道(这个命令由控制信道发送给服务器),当服务器接到这一指令时,服务器会使用20端口连接用户在PORT指令中指定的端口号,用以发送目录的列表。当完成这一操作时,FTP客户也许要下载一个文件,那么就会发出get指令,请注意,这时客户会再次发送PORT指令,告诉服务器连接他的哪个”新”端口,你可以先用netstat -na这个命令验证,上一次使用的6044已经处于TIME_WAIT状态。当这个新的数据传输通道建立后(在微软的系统中,客户端通常会使用连续的端口,也就是说这一次客户端会用6045这个端口),就开始了文件传输的工作。

 

被动模式(Passive 、PASV)

服务器是被动的等待客户端来连接的,所以称这种模式为被动模式。

PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,原理如下图:

4f1121688c9f4b629816f61445f65381.png

 

 

PASV模式 :然而,当FTP客户以PASV模式连接服务器时,情况就有些不同了。在初始化连接这个过程即连接服务器这个过程和PORT模式是一样的,不同的是,当FTP客户发送ls、dir、get等这些要求数据返回的命令时,他不向服务器发送PORT指令而是发送PASV指令,在这个指令中,用户告诉服务器自己要连接服务器的某一个端口,如果这个服务器上的这个端口是空闲的可用的,那么服务器会返回ACK的确认信息,之后数据传输通道被建立并返回用户所要的信息(根据用户发送的指令,如ls、dir、get等);如果服务器的这个端口被另一个资源所使用,那么服务器返回UNACK的信息,那么这时,FTP客户会再次发送PASV命令,这也就是所谓的连接建立的协商过程。

 在被动方式FTP中,命令连接和数据连接都由客户端,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。

 

总结:

主动FTP:

                    命令连接:客户端 >高位端口 ——> 服务器 21端口

                    数据连接:客户端 >2高位端口 <—— 服务器 20端口

 

被动FTP:

                    命令连接:客户端 >高位端口 ——-> 服务器 21端口

                    数据连接:客户端 >2高位端口 ——-> 服务器 >Server高位端口

两个模式面临的问题:

主动方式FTP的主要问题实际上在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单的告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。

被动方式的FTP解决了客户端的许多问题,但同时给服务器端带来了更多的问题。最大的问题是需要允许从任意远程终端到服务器高位端口的连接。幸运的是,许多FTP守护程序,包括流行的WU-FTPD允许管理员指定FTP服务器使用的端口范围。

第二个问题是客户端有的支持被动模式,有的不支持被动模式,必须考虑如何能支持这些客户端,以及为他们提供解决办法。例如,Solaris提供的FTP命令行工具就不支持被动模式,需要第三方的FTP客户端,比如ncftp。

随着WWW的广泛流行,许多人习惯用web浏览器作为FTP客户端。大多数浏览器只在访问ftp://这样的URL时才支持被动模式。这到底是好还是坏取决于服务器和防火墙的配置。

主动与被动FTP优缺点的简要总结:

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。

active和passive模式的配置:

    在命令行输入vim /etc/vsftpd/vsftpd.conf:

    1> active mode:

        pasv_enable=NO     (passive模式关闭)

        pasv_min_port=3000

        pasv_max_port=4000

        port_enable=YES    (active模式开启)

        connect_from_port_20=YES  (即默认情况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。)

    2>passive mode:

        pasv_enable=YES

        pasv_min_port=3000 

        pasv_max_port=4000

        设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意(1024 – 65535端口)。默认值为0。把端口范围设在比较高的一段范围内,比如3000-4000。

    在linux上,如果不配置pasv_enable=NO,默认是passive模式。

用户分类

Real实体帐户

这类用户是指在FTP服务上拥有帐号。当这类用户登录FTP服务器的时候,其默认的主目录就是其帐号命名的目录。但是,其还可以变更到其他目录中去。如系统的主目录等等。

Guest虚拟用户

在FTP服务器中,我们往往会给不同的部门或者某个特定的用户设置一个帐户。但是,这个账户有个特点,就是其只能够访问自己的主目录。服务器通过这种方式来保障FTP服务上其他文件的安全性。这类帐户,在Vsftpd软件中就叫做Guest用户。拥有这类用户的帐户,只能够访问其主目录下的目录,而不得访问主目录以外的文件。增加了系统安全性,客户端使用guest账户登录,需要提交账号密码,管理员可以根据账号进行策略设置,增加了对用户和下载的可管理性。

Anonymous匿名用户

这也是我们通常所说的匿名访问。这类用户是指在FTP服务器中没有指定帐户,但是其仍然可以进行匿名访问某些公开的资源,权限较小。

在组建FTP服务器的时候,我们就需要根据用户的类型,对用户进行归类。默认情况下,Vsftpd服务器会把建立的所有帐户都归属为Real用户。但是,这往往不符合企业安全的需要。因为这类用户不仅可以访问自己的主目录,而且,还可以访问其他用户的目录。这就给其他用户所在的空间带来一定的安全隐患。所以,企业要根据实际情况,修改用户所在的类别。

 

软件包

       vsftpd-2.2.2-11.el6_4.1.x86_64.rpm             //服务端软件包

       ftp-0.17-54.el6.x86_64.rpm                         //客户端软件包

       lftp-4.0.9-1.el6.x86_64.rpm                         //类似ftp的客户端软件包,具有增强功能

lftp相对于ftp具有支持协议多,如ftp,ftps,http,https,hftp,等,其中ftps和https需要openssl库的支持,还有自动补全,历史记录,书签,排队,镜像,断点续传,多进程下载,多个后台任务执行的功能!

 

windows下的ftp工具:CuteFTP,FlashFXP,资源管理器

vsftpd的匿名用户:anonymous/ftp

匿名用户密码为空

相关配置文件和目录

       /etc/vsftpd/vsftpd.conf               //主配置文件,核心配置文件

       /etc/vsftpd/ftpusers                           //黑名单,这个里面的用户不允许访问FTP服务器

       /etc/vsftpd/user_list                           //白名单,允许访问FTP服务器的用户列表

[root@kylinos63 ~]# vim /etc/vsftpd/user_list

# vsftpd userlist

# If userlist_deny=NO, only allow users in this file

# If userlist_deny=YES (default), never allow users in this file, and

#如果在vsftpd.conf中设定了userlist_deny=no(默认是yes),是白名单,是yes就是黑名单,无法登陆,甚至连输入密码的机会都没有

# do not even prompt for a password.

# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers

# for users that are denied.

root

……

       /etc/vsftpd/vsftpd_conf_migrate.sh                   //VSFPTD操作的一些变量和设置的脚本等

       /var/ftp/                                                   //默认匿名用户跟目录

[root@kylinos63 ~]# cp /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.bak    //备份配置文件

anonymous_enable=YES                    #匿名用户登陆 允许

local_enable=YES                            #全局设置,是否容许写入(无论是匿名本地用户,若要启用上传权限的话,就要开启他)

write_enable=YES                            #支持本地用户的写权限

local_umask=022                         #本地用户上传上来的文件权限

anon_umask=022                          #匿名用户上传上来文件的权限   

anon_root=(none)                            #匿名用户主目录

anon_max_rate=(0)                     #匿名用户速度限制

anon_umask=(077)                  #匿名用户上传文件时有掩码(若想让匿名用户上传的文件能直接被匿名下载,就这设置这里为073)

#no_anon_password=YES           #匿名用户login时不询问口令,此项配置文件无

#anon_world_readable_only=YES  #控制匿名用户对文件的下载权限

#anon_upload_enable=YES             #匿名用户上传是否可以,默认拒绝

#anon_mkdir_write_enable=YES        #匿名用户是否可以建立目录的权限,默认拒绝

#anon_other_write_enable= YES   #控制匿名用户对文件和文件夹的删除和重命名,此项配置文件里面无

dirmessage_enable=YES                #显示目录下的.message文件内容,文件是隐藏的

xferlog_enable=YES                          #传输日志记录,默认位置/etc/var/log/xferlog_enable

connect_from_port_20=YES      #是否监控数据传输端口20,使用的20号端口来连接FTP

#chown_uploads=YES                  #所有匿名上传的文件的所属用户将会被更改成chown_username

#hown_username=find                     #匿名上传文件所属用户名

#xferlog_file=/var/log/xferlog      #配合xferlog_enable=YES使用,指定日志路径

xferlog_std_format=YES                  #使用标准的日志格式

#idle_session_timeout=600               #空闲超时时间,单位是秒

#data_connection_timeout=120        #数据传输超市时间,单位是秒

#nopriv_user=ftpsecure      #当服务器运行于底层的使用用户名,使用什么身份的用户运行

#async_abor_enable=YES       #允许使用”async ABOR””命令

来源:容易出问题

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年4月16日
下一篇 2022年4月16日

相关推荐