• 1. 第5章 FTP服务器
    • 2. 第5章 FTP服务器FTP服务是互联网上的常见服务之一,本章主要介绍了FTP服务器的工作原理、工作模式和基本应用,并且重点讲解了在Red Hat Enterprise Linux 5 下VsFTP服务器的架构。
    • 3. 目录5.1 FTP服务器简介 5.1.1 FTP简介 5.1.2 FTP工作原理 5.1.3 FTP的两种操作模式:主动模式和被动模式 5.1.4 FTP体系结构 5.1.5 FTP服务的相关软件及登录形式 5.1.6 常用的匿名FTP
    • 4. 目录5.2 安装和配置FTP服务器 5.2.1 安装VsFTPD软件包 5.2.2 连接和访问FTP服务器 5.3 FTP服务器配置实例 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题
    • 5. 5.1 FTP服务器简介一般来说,用户联网的首要目的就是实现信息共享,文件传输是信息共享非常重要的一个内容之一。Internet上早期实现传输文件,并不是一件容易的事。我们知道 Internet是一个非常复杂的计算机环境,有PC机,工作站,大型机等。这些计算机可能运行在不同的操作系统下,有运行UNIX的服务器,也有运行DOS、WINDOWS的PC机和运行MacOS的苹果机等等。而各种操作系统之间的文件交流问题,需要建立一个统一的文件传输协议,这就是所谓的FTP。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议,这样用户就可以把自己的文件传送给别人,或者从其它的用户环境中获得文件。
    • 6. 5.1.1 FTP简介 5.1.1 FTP简介 1. FTP 定义 FTP即文件传输协议,全称是File Transfer Protocol,顾名思义,它是专门用来传输文件的协议。它支持的FTP功能是网络中最重要,用途最广泛的服务之一。用户可以连接到服务器上下载文件,也可以将自己的文件上传到FTP服务器中。以下载文件为例,当启动FTP服务从远程计算机拷贝文件时,事实上启动了两个程序:一个本地机上的FTP客户程序,它向FTP服务器提出拷贝文件的请求;另一个是启动在远程计算机上的FTP服务器程序,它响应用户的请求把指定的文件传送到客户机上
    • 7. 5.1.1 FTP简介2. FTP优点 FTP可将文件从网络上的一台计算机传送到另一台计算机。其突出的优点是可在不同类型的计算机之间传送文件和交换文件,比如在WINDOWS和UNIX、LINUX系统上均可传送。它实现了服务器和客户机之间的文件传输和资源再分配,是普遍采用的资源共享方式之一。FTP服务管理简单,且具备双向传输功能。
    • 8. 5.1.1 FTP简介3.FTP意义 FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层,即应用层。它使用TCP协议传输而不是UDP协议,这样,FTP客户端在和服务器建立连接之前就有一个“三次握手”的过程。它的意义在于客户端与服务器之间的连接是可靠的,而且是面向连接的,为数据的传输提供了可靠的保证。另外,FTP服务还有一个非常重要的特点是:它可以独立于平台。也就是说,在UNIX, LINUX, WINDOWS等操作系统中都可以实现FTP的客户端和服务器,相互之间可以跨平台进行文件传送。
    • 9. 5.1 FTP服务器简介 5.1.2 FTP工作原理 FTP的工作方式采用客户/服务器模式。客户端和服务器使用TCP进行连接。为建立连接,客户端和服务器都必须各自打开一个TCP端口。FTP服务器预置两个端口:控制端口(端口21)和数据端口(端口20)。控制端口为客户端和服务器之间交换命令和应答提供通信的通道;而数据端口只用来交换数据。其中端口21用来发送和接受FTP的控制消息,一旦建立FTP会话,端口21的连接在整个会话期间就始 终保持打开状态;端口20用来发送和接受FTP数据,只有在传输数据时才打开,一旦传输结束就断开。
    • 10. 5.1.2 FTP工作原理FTP使用TCP作为传输时的通信协议,因此它可以提供较可靠的面向连接的传输。FTP服务器和客户端计算机数据交换的过程如下: 1.FTP客户端使用Three-Way Handshake与FTP服务器建立TCP交谈。 2.FTP服务器利用TCP 21 连接端口以发送和接收控制信息,这个连接端口主要是用来倾听FTP客户端的连接请求,在交谈建立后,这个连接端口会在交谈时全程启动。 3.FTP服务器端另外使用TCP 20 连接端口以发送和接收FTP文件(ASCII或二进制文件),这个连接端口会在文件传输完立即关闭。
    • 11. 5.1.2 FTP工作原理4.FTP客户端在向FTP服务器提出连接请求时会动态指定一个连接端口号码,通常这些客户端指定的连接端口号码是1024—65535,因为0—1023端口(称Well-known Port Number)已由IANA(Internet Assigned Number Authority)预先指定给通信协议或其他的服务使用。 5.当FTP交谈建立后,客户端会启动一个连接端口以连接到服务器上的TCP 21连接端口 6.当文件开始传输时,客户端会启动另一个连接端口以连接到服务器的TCP 20连接端口,而且每一次文件传输时,客户端都会启动另一个新的连接端口以发送文件。
    • 12. 5.1.3 FTP的两种操作模式:主动模式和被动模式根据FTP数据连接建立方法,可将FTP客户端对服务器的访问分为两种模式:主动模式又称标准模式(Active Mode)和被动模式(Passive Mode)。 一般情况下使用主动模式,由FTP客户端发起到FTP服务器的控制连接,FTP服务器接收到数据请求命令后,再由FTP服务器发起客户端的连接。具体的讲,客户机首先向服务器的端口21(命令通道)发送一个TCP连接请求,然后执行login、dir等各种命令。一旦用户请求服务器发送数据,FTP服务器就用其20端口(数据通道)向客户的数据端口发起连接。主动模式实际上是一种客户端管理,FTP客户端可以在控制连接上给FTP服务器发送port命令,要求服务器使用port命令指定的TCP端口来建立从服务器上TCP端口21到客户端的数据连接。
    • 13. 5.1.3 FTP的两种操作模式:主动模式和被动模式如果使用被动模式,将由FTP客户端发起控制和数据连接。被动模式一般用Web浏览器连接FTP服务器。另外,从网络安全的角度看,被动模式比主动模式安全。被动模式实际上是一种服务器管理,FTP客户端发出Pasv命令后,FTP服务器通过一个用作数据传输(连接)的服务器动态端口进行响应,当客户端发出数据连接命令后,FTP服务器便立即使用动态端口连接客户端。 FTP服务器端或FTP客户端都可设置这两种模式。基于IIS的FTP服务同时支持主动模式和被动模式两种连接,但是究竟采用何种模式,取决于客户端指定的方法。
    • 14. 5.1.4 FTP体系结构FTP是一种C/S(客户端/服务器)的通信协议,因此在两台主机间传递文件时,其中一台必须运行FTP客户端程序,如IE6.0或FTP指令。而文件传递时有两种形式: 下载(Downloading/Getting): 文件由服务器发送到客户端。 上传(Uploading/Putting):文件由客户端发送到服务器。
    • 15. 5.1.5 FTP服务的相关软件及登录形式1. FTP服务的相关软件 在LINUX 下实现FTP服务的软件很多,其中比较有名的有WU-FTPD、ProFTPD、VsFTPD和.Pure-FTPD等等。VsFTPD是UNIX类操作系统上运行服务器的名字,是Red Hat Enterprise Linux5内置的FTP服务器,可以运行在LINUX、BSD、Solaris以及HP-UX等上面。它具有非常高的安全性需求、带宽限制、良好的可伸缩性、创建虚拟用户的可能性、IPV6支持、中等偏上的性能、分配虚拟IP的可能性等其他FTP服务器不具备的功能。所以有“秀外慧中”的美称。 通常,FTP访问服务器时需要经过验证,只有经过了FTP服务器的相关验证,用户才能进行访问和传输文件等操作。
    • 16. 5.1.5 FTP服务的相关软件及登录形式2. VsFTPD提供了以下3种登录形式 (1)anonymous(匿名账号) anonymous(匿名账号)是应用的最广泛的一种FTP服务器登录。如果用户在FTP服务器上没有账号,那么用户可以以anonymous为用户名,以自己的电子邮件地址为密码进行登录。当匿名用户登录FTP服务器后,其登录目录为匿名FTP服务器的根目录/var/ftp。为了减轻FTP服务器的负载,一般情况下,应关闭匿名账户的上传功能。
    • 17. 5.1.5 FTP服务的相关软件及登录形式(2)real(真实账户) real(真实账户)也称为本地账号,就是以真实的用户名和密码进行登录,但前提条件是用户在FTP服务器上拥有自己的账号。用真实账号登录后,其登录的目录为用户自己的目录,该目录在系统建立账号时就已经创建,例如,在Red Hat Linux 9系统中建立一个名称为xxk的用户,那么它的默认目录就是/home/xxk。真实用户可以访问整个目录结构,从而对系统安全构成极大的威胁,所以,应尽量避免用户使用真实账号来访问FTP服务器。 (3)guest(虚拟账号) 如果用户在FTP服务器上拥有一个账号,但此账号只能用于文件传输服务,那么该账号就是guest(虚拟账号)。guest是真实账号的一种形式,他们的不同之处在于,guest登录FTP服务器后,不能访问除宿主目录以外的内容。
    • 18. 5.1.6 常用的匿名FTP匿名FTP是这样一种机制,用户可通过它连接到远程主机上,并从其下载文件,而无需成为其注册用户。 当远程主机提供匿名FTP服务时,会指定某些目录向公众开放,允许匿名存取。系统中的其余目录则处于隐匿状态。作为一种安全措施,大多数匿名FTP主机都允许用户从其下载文件,而不允许用户向其上传文件。也就是说,用户可将匿名FTP主机上的所有文件拷贝到自己的机器上,但不能将自己机器上的任何一个文件拷贝至匿名FTP主机上。即使有些匿名FTP主机确实允许用户上传文件,用户也只能将文件上传至某一指定上传目录中。随后,系统管理员会去检查这些文件,他会将这些文件移至另一个公共下载目录中,供其他用户下载。利用这种方式,远程主机的用户得到了保护,避免了有人上传有问题的文件,如带病毒的文件。
    • 19. 5.2 安装和配置FTP服务器FTP服务器利用文件传输协议实现文件的上传与下载服务。Red Hat Enterprise Linux 5自带VsFTPD服务软件包,其名称为vsftp-2.0.5-10.e15.i386.rpm,可在Red Hat Enterprise Linux 5安装光盘中找到安装包。VsFTP (very security FTP)意为非常安全的FTP服务器,vsftpd是VsFTP服务器的一个守护进程,用于具体实现FTP服务器的功能。
    • 20. 5.2.1 安装VsFTPD软件包1. 检查并安装VsFTPD软件包 在终端窗口输入:“rpm -qa |grep vsftpd”命令检查系统是否安装了VsFTPD软件包,如图5-1所示。 图5-1 检查系统是否安装了vsftpd软件包
    • 21. 5.2.1 安装VsFTPD软件包从图5-1中可以看出,系统已经安装了版本号为2.0.5-12.el5的VsFTPD软件包。如果没有安装,可以在安装光盘的Server目录下找到vsftpd-2.0.5-12.el5.i386.rpm的安装包文件,然后用命令“rpm –ivh vsftpd-2.0.5-12.el5.i386.rpm”进行安装。 VsFTPD在安装时会自动创建FTP系统用户组ftp和属于该组的FTP系统用户ftp,该用户的主目录为/var/ftp,默认作为FTP服务器的匿名账户。执行命令“vi /etc/passwd”,可以看到ftp账户的基本信息,如图5-2所示。可以看到,ftp账户的用户ID号是14,组ID号是50,宿主目录为“/var/ftp”,登陆后的shell为“/sbin/nologin”。
    • 22. 5.2.1 安装VsFTPD软件包图5-2 检查ftp账户的基本信息
    • 23. 5.2.1 安装VsFTPD软件包当然,也可以用命令“vi /etc/group”查看ftp组的信息,如图5-3所示。 图5-3 检查ftp组的基本信息
    • 24. 5.2.1 安装VsFTPD软件包2. 设置VsFTPD服务的自启动 默认情况下,该服务并未启动,可采用以下命令来检查其启动状态:“chkconfig --list vsftpd”,如图5-4所示。 图5-4 查看vsftpd服务的启动状态
    • 25. 5.2.1 安装VsFTPD软件包 若要设置该服务在3和5运行级别时自动启动,则设置命令为:“chkconfig --level 35 vsftpd on”,如图5-5所示。 图5-5设置vsftpd服务的自启动
    • 26. 5.2.1 安装VsFTPD软件包3. VsFTPD服务的启动脚本 VsFTPD服务器在/etc/rc.d/init.d目录下,有一个名为vsftpd的服务启动脚本,利用该脚本,可实现vsftpd服务器的启动,重启,状态查询,停止等操作。 启动: /etc/rc.d/init.d/vsftpd start 或 service vsftpd start 停止:/etc/rc.d/init.d/vsftpd stop 或 service vsftpd stop 重启: /etc/rc.d/init.d/vsftpd restart 或 service vsftpd restart
    • 27. 5.2.1 安装VsFTPD软件包查询:/etc/rc.d/init.d/vsftpd status 或 service vsftpd status 具体操作如图5-6所示。 图5-6 VsFTPD服务的启动与停止
    • 28. 5.2.1 安装VsFTPD软件包4. VsFTPD配置文件简介 /etc/vsftpd/vsftpd.conf 。//VsFTPD的主配置文件是。另外还有加强VsFTPD服务器用户认证的/etc/pam.d/vsftpd。 /etc/vsftpd.ftpusers。 //禁止访问VsFTPD的用户列表文件。凡是该文件中包含的账户,都不能访问VsFTPD服务。一般处于安全性,常把root、bin和daemon等系统账户都写入该文件中。
    • 29. 5.2.1 安装VsFTPD软件包/etc/vsftpd.user_list。 //VsFTPD的用户列表文件。该文件中包含的用户可能是拒绝访问VsFTPD服务的,也可能是允许访问的,主要取决于VsFTPD的主配置文件/etc/vsftpd/vsftpd.conf中的userlist_deny参数是设置为“Yes”(缺省值)或者“No”。 /var/ftp。 //VsFTPD提供服务的文件集散地,它包括一个pub目录。在默认配置下,所有目录都是只读的,只有root用户具有写权限。
    • 30. 5.2.2 连接和访问FTP服务器 1. 匿名账户访问FTP服务器 VsFTPD服务器安装并启动服务后,按其默认配置,就可以正常工作了。VsFTPD默认的匿名用户账户为ftp,密码也为ftp,且默认允许匿名用户登录,登录后所在的FTP站点根目录为“/var/ftp”目录。匿名登录操作如图5-7所示。
    • 31. 5.2.2 连接和访问FTP服务器
    • 32. 5.2.2 连接和访问FTP服务器FTP登录成功后,将出现FTP的命令行提示符ftp>,可以在这里键入FTP命令实现相关的操作,常见的命令如下: ls //查看当前目录的文件列表 pwd //查看当前目录 mkdir //建立目录 rm //删除目录 get或mget //下载文件 put或mput //上传文件
    • 33. 5.2.2 连接和访问FTP服务器cd或lcd //切换服务器端或本地的目录 quit或exit//退出ftp登录 另外,在ftp>状态下键入?,可获得使用的ftp命令帮助。 需要注意的是,以匿名身份登录后是没有写权限和上传文件的权限的。另外,在进行匿名登录时即可用账户ftp登录也可用anonymous,如图5-8中就是以anonymous身份登陆的。
    • 34. 5.2.2 连接和访问FTP服务器注意,如果在本机上验证FTP服务正常,但在其它机器上验证失效,可将FTP服务器的防火墙关闭。
    • 35. 5.2.2 连接和访问FTP服务器关于匿名账户的高级配置,还需要对VsFTPD的主配置文件/etc/vsftpd/vsftpd.conf 中的相关参数进行设置。 anonymous_enable //控制是否允许匿名用户登录。YES为允许,NO为不允许,默认值为YES。 no_anno_password //控制匿名用户登录时是否需要密码。YES为不需要,NO为需要,默认值为NO。 anon_root //设置匿名用户的根目录。匿名用户登录后,将被锁定到此目录下。主配置文件中默认无此项,默认值为“/var/ftp”。
    • 36. 5.2.2 连接和访问FTP服务器anon_world_readable_only //控制是否允许匿名用户下载可阅读文档。当值为YES时,允许用户下载可阅读文档;当值为NO时,只允许匿名用户浏览整个服务器的文件系统。默认值为YES。 anon_upload_enable //控制是否允许匿名用户上传文件。YES为允许,NO为不允许,默认值为NO。除了这个参数外,还需要两个条件,即write_enable参数为YES,以及在文件系统上,FTP匿名用户对某个目录有写权限。 anon_mkdir_write_enable //控制是否允许匿名用户创建新目录。YES为允许,NO为不允许,默认值为NO。在文件系统上,FTP匿名用户必须对新目录的上层目录拥有写权限。 anon_other_write_enable //控制匿名用户是否拥有除了上传和新建目录之外的其它权限,如删除、更名等。YES为拥有,NO为不拥有,默认值为NO。
    • 37. 5.2.2 连接和访问FTP服务器下面我们用vi编辑器打开VsFTPD的主配置文件“/etc/vsftpd/vsftpd.conf”来具体查看一下与匿名用户相关的几个重要参数,如图5-9所示。 图5-9 VsFTPD的主配置文件
    • 38. 5.2.2 连接和访问FTP服务器在图5-9中可以看到,参数anonymous_enable的值设置为了YES,即允许匿名用户访问。参数local_enable用来设置是否允许本地用户访问FTP服务器,默认值为YES,表示允许本地账户登录访问。参数write_enable是设置是否允许向FTP服务器进行各种写入操作,默认值为YES,表示允许。参数anon_upload_enable的值设置为了YES,即允许匿名用户上传文件,但这里被注释掉了,并未生效。参数anon_mkdir_write_enable的值设置为了YES,允许匿名用户创建新目录,此参数默认也被“#”号注释了。
    • 39. 5.2.2 连接和访问FTP服务器2. 指定账户访问FTP服务器 对于有较高安全性的FTP服务器一般不允许匿名访问,更常见的方式是使用本地账户来登录和访问FTP服务器。所以,在使用和访问FTP服务器之前,应根据需要,先创建好所需的FTP账户。另外,作为FTP登录使用的账户,其Shell应设置为“/sbin/nologin”,以使用户账户只能用来登录FTP,而不能用来登录Linux系统。 补充:Shell是用户登录后所使用的一个命令行界面。输入的命令由Shell进行解释,并发送给Linux内核,由内核进行具体操作。Linux系统自带有许多种Shell,系统默认使用的是/bin/bash。若在配置文件中,该字段的值为空,则默认使用“/bin/sh”的Shell。查看/etc/目录下的shells文件,可以看到系统使用的全部Shell列表,如图5-10所示。
    • 40. 5.2.2 连接和访问FTP服务器图5-10 缺省的shells文件
    • 41. 5.2.2 连接和访问FTP服务器可以根据不同的需要,将不同账户的Shell设置成不同的值,典型的设置如下: 若要使某个用户账户不能登录Linux,只需设置该用户所使用的Shell为/sbin/nologin即可,比如对于FTP账户,一般只能用来登录FTP服务器,而不能用来登录Linux操作系统。 若要让某用户没有telnet权限,则应设置该用户使用的Shell为/bin/true即可。
    • 42. 5.2.2 连接和访问FTP服务器若要让某用户没有telnet和ftp登录权限,则应设置该用户使用的Shell为/bin/false。 在“/etc/shells”文件中,若没有“/bin/true”或“/bin/false”,则可以使用vi编辑器将其添加进去,如图5-11所示。 图5-11修改后的shells文件
    • 43. 5.2.2 连接和访问FTP服务器利用不同账户登录FTP服务器后,其FTP站点根目录不同这一特点,可将用户Web站点根目录与该用户的FTP站点根目录设置为相同。这样用户就可以利用FTP远程管理Web站点下的目录和文件,以实现对Web服务器的远程管理。 若要求各FTP用户登录后,其站点根目录均为同一个目录,比如,用于提供软件下载的FTP站点,此时可将各用户的主目录都设置为FTP站点的根目录即可。
    • 44. 5.2.2 连接和访问FTP服务器3. 登录和访问FTP服务器的方式 FTP服务器启动并创建好FTP账户后,登录和访问FTP服务器有2种方法: (1)在Linux的文本模式或Windows平台的MS-DOS方式下,利用“ftp 服务器IP地址命令”,以文本方式通过ftp命令来连接和访问FTP服务器。 (2)在浏览器中,利用ftp协议来访问FTP服务器,访问格式为:ftp://用户名:用户密码@网站域名 或 ftp://用户名@网站域名。
    • 45. 5.3 FTP服务器配置实例 宿主机器Windows XP的IP地址为:202.207.50.77;虚拟机VMware下的Red Hat Enterprise Linux 5的IP地址为:202.207.50.79。将Red Hat Enterprise Linux 5架设为FTP服务器,以宿主机器Windows XP作为客户机进行测试。
    • 46. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置创建一个名为abc的系统用户,属于ftp组,不允许登陆Linux系统,其主目录为/var/www/abc。利用该账户从客户机以文本方式登陆FTP服务器,并查看登录目录及当前目录下的文件列表,接着新建一个名为downloads的目录,并将本地新建的123.txt文件(内容随意),上传到downloads目录中,并查看上传结果。分别从Windows和Linux客户端通过文本方式访问FTP服务器,并下载downloads目录下的123.txt文件到Windows的“E:\”以及Linux的“/”目录下。
    • 47. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置1. 创建用户和用户组 由于ftp组是已存在的组,因此不再需要创建,下面直接创建用户账户。创建账户abc之前,先要创建其宿主目录“/var/www/abc”,如图5-12所示。图5-12 创建账户abc的宿主目录
    • 48. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置接下来使用“useradd”命令创建指定账户abc,如图5-13所示。 图5-13 创建账户
    • 49. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置useradd”命令中的参数说明: -r 创建的用户ID<500 -m 为账户创建主目录,如果主目录不存在 -g 指定组 -d 创建指定目录取代/home/username -s 指定用户登录时使用的Shell -c 注释
    • 50. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置下面来为该用户设置密码,并查看账户记录,如图5-14所示。图5-14 设置账户密码
    • 51. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置2. 设置用户主目录的所有者,所属的组和权限 可以使用chown命令来使某个目录隶属于某个用户,用chgrp命令使某个目录隶属于某个组。 格式为:chown 所属用户名 目录名 chgrp 所属组名 目录名 当然,也可以用“chown 所有者.所有组目录名”来一次性地修改目录的所有者和所有组。在图5-15所示的例子中,用命令“chown abc.ftp /var/www/abc”将目录“/var/www/abc”的所有者和所有组从原来的root用户和root组修改为了abc用户和ftp组。
    • 52. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置图5-15 修改目录的所有者和所有组
    • 53. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置在这里,还要设置一下宿主目录的权限。即只允许本用户对其宿主目录具有最高权限(读、写、执行),其它用户只有读和执行的权限。所以目录“/var/www/abc”的权限码为755,如果不是,可通过chmod命令修改,如图5-16所示。 图5-16 修改目录的权限
    • 54. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置3. 从客户机登陆FTP服务器创建目录downloads 使用ftp命令从客户机登录FTP服务器,然后进行所要求的操作。这里以宿主机Windows XP作为客户机登录,效果如图5-17所示。 图5-17 通过指定账户登录FTP服务器
    • 55. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置从客户端登录到FTP服务器后,使用“mkdir”命令创建子目录downloads。如图5-18所示。图5-18创建子目录downloads
    • 56. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置4. 从客户机登陆FTP服务器上传文件 下面就要用put命令进行文件的上传了。这里要特别注意,如果源文件的路径有误,或是目标路径不存在,都会导致上传文件失败,所以最简单的办法就是在登录到FTP服务器进行文件上传之前,先将目录定位到欲上传文件所在的目录下,然后再登陆FTP服务器,之后将目录定位到上传目标路径下,最后再用“put 上传文件名”的方式完成上传工作。
    • 57. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置首先在本地的某个目录(如E:\aaa)下建立123.txt文件,如图5-19所示。
    • 58. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置然后通过账户abc登录到FTP服务器上,用“cd”命令切换到目标位置(/var/www/abc/downloads),最后用“put”命令进行文件上传,效果如图5-20所示。 图5-20 上传文件
    • 59. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置put用于传输单个文件,mput用于一次传输多个文件,支持“*”和“?”通配符。 5. 从Windows客户机登录FTP服务器下载文件 要将FTP服务器发布的文件下载到客户端的指定目录中,最简单且不容易出错的方式就是在登陆FTP服务器之前,先将目录定位在目标位置(即要下载的目标目录),然后再登陆FTP服务器,用get命令进行文件的下载。get用于下载单个文件,mget用于一次下载多个文件。
    • 60. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置格式为:get 远程文件名 本地文件名 图5-21是通过Windows客户端登陆FTP服务器下载指定文件123.txt的效果图。可以看到,在登陆FTP服务器之前,已将目录定位到了下载的目标目录,即“E:\”,然后再登陆FTP服务器下载目标文件123.txt。
    • 61. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置图5-21 通过Windows客户端下载文件
    • 62. 5.3.1 基于文本访问方式的指定账户的FTP服务器的配置图5-22是通过Linux客户端登陆FTP服务器下载指定文件123.txt的效果图。可以看到,在登陆FTP服务器之前,已将目录定位到了下载的目标目录,即“/”,然后再登陆FTP服务器下载目标文件123.txt。图5-22 通过Linux客户端下载文件
    • 63. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 在5.3.1的基础上,给FTP服务器(202.207.50.60)注册域名ftp.bgl.net;然后在FTP服务器的发布目录(/var/www/abc)中创建一个文本文件qqq.txt,内容随意;分别从Windows和Linux客户端通过浏览器访问FTP服务器,并下载文件qqq.txt;然后再将本地的某个文件上传到服务器的downloads目录中。
    • 64. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 1. 配置DNS服务器 首先配置DNS服务器,为IP地址202.207.50.60注册域名ftp.bgl.net,可参考“第3章 DNS服务器”。 图5-23是在Windows客户端测试域名ftp.bgl.net是否畅通。 图5-23 在Windwos客户端测试域名
    • 65. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 图5-24是在Linux客户端测试域名ftp.bgl.net是否畅通。 图5-24在Linux客户端测试域名
    • 66. 2. 在FTP服务器端建立发布文件qqq.txt 在FTP服务器的发布目录/var/www/abc下建立文本文件qqq.txt,效果如图5-25所示。图5-25在发布目录下建立文件qqq.txt
    • 67. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 3. 在Windows客户端通过浏览器登录FTP服务器测试 在Windows客户端打开IE浏览器,在地址栏中输入“ftp://ftp.bgl.net”,然后回车,这时会发现FTP站点并未提示输入账户名和密码,而直接登录成功,如图5-26所示。这是因为匿名用户默认情况下是开启状态,所以如果直接登录,则认为是匿名登陆,这样一来,只能登录到匿名用户的宿主目录,即/var/ftp下,而无法下载账户abc宿主目录/var/www/abc下的qqq.txt。
    • 68. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 图5-26 匿名登陆
    • 69. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 解决方法有两种: 一是在浏览器的地址栏中访问FTP站点时,通过“ftp://用户名:用户密码@网站域名 或 ftp://用户名@网站域名”的方式。 在IE浏览器的地址栏中输入“ftp://abc@ftp.bgl.net”,系统会弹出如图5-27所示的登陆对话框,输入账户名abc及其密码abc,然后点击“登陆”按钮。图5-27通过指定账户登录FTP服务器
    • 70. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 如果账户名和密码正确无误,浏览器就会成功登录到FTP服务器的指定目录/var/www/abc中,如图5-28所示。图5-28在Windows客户端成功登录FTP服务器
    • 71. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 下载文件qqq.txt的操作就变得十分简单了。通过快捷菜单下的复制、粘贴,可将文件qqq.txt粘贴到客户机任意位置。 上传文件只需要先将欲上传的文件复制,然后直接在FTP服务器窗口粘贴即可,如图5-29所示。 图5-29在Windows客户端上传文件
    • 72. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 方法二是禁用匿名账户,这在前面的章节中介绍过,只需要修改FTP服务器的主配置文件/etc/vsftpd/vsftpd.conf 中的anonymous_enable参数即可,将其由默认的YES(允许匿名账户登录)改为NO(不允许)。然后用“service vsftpd restart”命令重启FTP服务器。   这时,再登录FTP服务器,如果不输入账户名和密码,是无法登录成功的。只能通过合法的账户名方可登录。
    • 73. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 4. 在Linux客户端通过浏览器登录FTP服务器测试   在Linux客户端浏览器的地址栏中输入“ftp://ftp.bgl.net”,由于前面已经禁用了匿名账户,所以这里会自动弹出图5-30所示的登录界面。 图5-30在Linux客户端登录FTP服务器
    • 74. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置 当正确输入账户名和密码后,会显示如图5-31所示的登录成功界面。 图5-31在Linux客户端成功登录FTP服务器
    • 75. 5.3.2 基于图形访问方式的指定账户的FTP服务器的配置下载文件qqq.txt,只需要鼠标右键单击该文件,在弹出的快捷菜单中选择“链接另存为”就可以下载该文件了,如图5-32所示。 图5-32在Linux客户端下载文件如果想上传文件,在Linux客户端的浏览器中还无法实现,当 然,可以利用FTP客户端软件来进行。
    • 76. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题 细心的读者会发现,在通过命令行方式访问FTP服务器时,可以通过“cd”命令切换目录;在浏览器访问时由于提供了“向上一层”按钮,所以也存在相同的问题。这样就会给FTP服务器造成很大的安全隐患。比如,本来限定某账户只能对其宿主目录下的内容进行操作,但这时,如果登录账户可以随意切换目录的话,他就可能对系统其它目录下的文件也进行相同权限的操作了,后果不堪设想。图5-33为切换目录的效果。
    • 77. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题 图5-33 FTP服务器存在的目录安全漏洞
    • 78. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题解决方法: 只需要修改FTP服务器的主配置文件/etc/vsftpd/vsftpd.conf 中的相关参数即可。 在FTP服务器的主配置文件/etc/vsftpd/vsftpd.conf中,与本地账户相关的参数包括: local_enable //控制是否允许本地用户登录。YES为允许,NO为不允许,默认值为YES。注意:下面的参数仅在local_enable的值为YES的前提下才能生效。
    • 79. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题chroot_local_user //控制本地用户是否锁定在其宿主目录下。YES为是,NO为不是,即可以切换到宿主目录以外的目录中,默认值为NO。 chroot_list_enable //当设置为YES时,表示本地用户也有例外,可以切换到宿主目录之外。 chroot_list_file //可以切换到宿主目录之外的用户包含在其指定的文件(默认文件是/etc/vsftpd/chroot_list)中。
    • 80. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题用vi编辑器修改FTP服务器的主配置文件/etc/vsftpd/vsftpd.conf,设置chroot_local_user参数的值为YES,如图5-34所示。图5-34 修改FTP服务器的主配置文件
    • 81. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题存盘退出后,用“service”命令重新启动FTP服务器,如图5-35所示。图5-35 重启FTP服务器
    • 82. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题再次通过客户端测试目录安全性。从图5-36中可以看到,当再使用“cd /”命令切换出其宿主路径时,没有起到任何效果,目录始终定位在该账户的宿主目录内。当然,如果在宿主目录下的子目录中切换,这是允许的。 图5-36 目录安全性测试
    • 83. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题下面,我们再来测试一下参数chroot_list_enable的效果。当把参数chroot_list_enable设置为YES时,表示本地用户也有例外,可以切换到宿主目录之外,但需要在用户列表文件chroot_list_file(默认文件是/etc/vsftpd/chroot_list)中指定哪些账户有效。   首先编辑FTP服务器的主配置文件/etc/vsftpd/vsftpd.conf,将chroot_list_enable的值设置为YES,如图5-37所示。
    • 84. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题图5-37 主配置文件/etc/vsftpd/vsftpd.conf
    • 85. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题存盘退出后,用vi编辑器打开用户列表文件/etc/vsftpd/chroot_list,在其中加入允许的账户名, 这里为abc,如图5-38所示。 图5-38 用户列表文件/etc/vsftpd/chroot_list
    • 86. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题修改完毕后,重启FTP服务器,如图5-39所示。
    • 87. 5.3.3 通过指定账户访问FTP服务器存在的安全隐患问题通过客户端测试目录安全性。账户abc又可以任意切换目录了
    • 88. 通过客户端测试目录安全性。账户abc又可以任意切换目录了