一、简介

          FTP(File Transfer Protocol, FTP)是TCP/IP网络上两台计算机传送文件的协

议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的

应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务

器上的目录。

概述

        FTP是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输。

FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处

理,就像MIME或Unencode一样。但是,FTP有着极高的延时,这意1味着,从开始请

求到第一次接收需求数据之间

的时间会非常长,并且不时的

必需执行一些冗长的登陆进

程。FTP服务一般运行在20和

21两个端口。端口20用于在客

户端和服务器之间传输数据

流,而端口21用于传输控制

流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲

状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当

大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因

为控制会话会被防火墙断开,传输会产生一些错误。

FTP的工作原理

         文件传输协议(FTP)是TCP/IP提供的标准机制,用来将文件从一个主机复制

到另一个主机。FTP使用TCP的服务。2

优点:

1.促进文件的共享(计算机程序或数据)

2.鼓励间接或者隐式的使用远程计算机

3.向用户屏蔽不同主机中各种文件存储系统的细节

4.可靠和高效的传输数据

缺点:

1.密码和文件内容都使用明文传输,可能产生不希望发生的窃听。

2.因为必须开放一个随机的端口以建立连接,当防火墙存在时,客户端很难过滤处

于主动模式下的FTP流量。这个问题通过使用被动模式的FTP得到了很大解决。

3.服务器可能会被告知连接一个第三方计算机的保留端口。

主动和被动模式

FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且

监听一个端口以建立连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。

所以,创立了被动模式。被动模式只要求服务器端产生一个监听相应端口的进程,这样

就可以绕过客户端安装了防火墙的问题。

Ftp服务器的安全性

1.协议  ftp  明文 

   ftps   ftp +ssl

2.帐号    匿名    本地   ---》虚拟帐号

二、案例一(Ftps)

安装vsftpd软件包:

[root@localhost ~]# mkdir /mnt/cdrom

[root@localhost ~]# mount /dev/cdrom /mnt/cdrom
mount: block device /dev/cdrom is write-protected, mounting read-only

[root@localhost ~]# cd /mnt/cdrom/Server

[root@localhost Server]# rpm -ivh vsftpd-2.0.5-16.el5.i386.rpm

[root@localhost Server]# cd /etc/pki/

[root@localhost pki]# vim tls/openssl.cnf

编辑结果:

43 [ CA_default ]
44
45 dir             = /etc/pki/CA           # Where everything is kept

87 [ policy_match ]
88 countryName             = optional
89 stateOrProvinceName     = optional
90 organizationName        = optional
91 organizationalUnitName  = optional
92 commonName              = supplied
93 emailAddress            = optional

134 [ req_distinguished_name ]
135 countryName                     = Country Name (2 letter code)
136 countryName_default             = CN
137 countryName_min                 = 2
138 countryName_max                 = 2
139
140 stateOrProvinceName             = State or Province Name (full name)
141 stateOrProvinceName_default     = HENAN
142
143 localityName                    = Locality Name (eg, city)
144 localityName_default            = ZHENGZHOU

[root@localhost pki]# cd CA

[root@localhost CA]# mkdir crl certs newcerts

[root@localhost CA]# touch index.txt serial

[root@localhost CA]# echo "01" >serial

创建CA私钥:

[root@localhost CA]# openssl genrsa 1024 >private/cakey.pem

[root@localhost CA]# chmod 600 private/*

创建CA证书:

[root@localhost CA]# openssl req -new -key private/cakey.pem -x509 -out cacert.pem

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [HENAN]:
Locality Name (eg, city) [ZHENGZHOU]:
Organization Name (eg, company) [My Company Ltd]:seccenter
Organizational Unit Name (eg, section) []:tec
Common Name (eg, your name or your server's hostname) []:rootca.net.net
Email Address []:

为FTP服务器创建证书、私钥等:

[root@localhost CA]# mkdir /etc/vsftpd/certs

[root@localhost CA]# cd /etc/vsftpd/certs

[root@localhost certs]# openssl genrsa 1024 >vsftpd.key

[root@localhost certs]# openssl req -new -key vsftpd.key -out vsftpd.csr

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [CN]:
State or Province Name (full name) [HENAN]:
Locality Name (eg, city) [ZHENGZHOU]:
Organization Name (eg, company) [My Company Ltd]:abc
Organizational Unit Name (eg, section) []:tec
Common Name (eg, your name or your server's hostname) []:ftp.abc.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

[root@localhost certs]# openssl ca -in vsftpd.csr -out vsftpd.cert

Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 1 (0x1)
        Validity
            Not Before: Aug  2 13:24:58 2012 GMT
            Not After : Aug  2 13:24:58 2013 GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = HENAN
            organizationName          = abc
            organizationalUnitName    = tec
            commonName                = ftp.abc.com
        X509v3 extensions:
            X509v3 Basic Constraints:
                CA:FALSE
            Netscape Comment:
                OpenSSL Generated Certificate
            X509v3 Subject Key Identifier:
                8C:2F:D7:2C:E9:91:FE:4B:01:22:FC:BC:18:70:EF:DE:4D:72:42:06
            X509v3 Authority Key Identifier:
                keyid:A2:88:0D:57:5F:17:5B:8D:FF:23:39:B2:B6:60:71:02:CF:C7:BE:C9

Certificate is to be certified until Aug  2 13:24:58 2013 GMT (365 days)
Sign the certificate? [y/n]:y

1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

编辑相关配置:

[root@localhost certs]# vim /etc/vsftpd/vsftpd.conf

编辑结果:

119 rsa_cert_file=/etc/vsftpd/certs/vsftpd.cert
120 rsa_private_key_file=/etc/vsftpd/certs/vsftpd.key
121 ssl_tlsv1=YES
122 ssl_sslv2=YES
123 ssl_sslv3=YES
124 ssl_enable=YES
125 force_local_logins_ssl=YES
126 force_local_data_ssl=YES

[root@localhost certs]# service vsftpd start
为 vsftpd 启动 vsftpd:                                    [确定]

三、案例二(虚拟账号)

编辑虚拟账号:

[root@localhost vsftpd]# vim viruser.txt

编辑结果:

test

123

test1

123

test2

123

把虚拟账号文件转变成数据库

首先安装db4-utils-4.3.29-10.el5.i386.rpm

[root@localhost Server]# rpm -ivh db4-utils-4.3.29-10.el5.i386.rpm

[root@localhost vsftpd]# db_load -T -t hash -f viruser.txt viruser.db

编辑接口文件

[root@localhost vsftpd]# vim /etc/pam.d/vsftpd

编辑结果:

auth required pam_userdb.so db=/etc/vsftpd/viruser

account required pam_userdb.so db=/etc/vsftpd/viruser

虚拟账号映射到真实帐号

建立帐号

[root@localhost vsftpd]# useradd user8

编辑vsftpd配置文件

[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf

编辑结果:

129 guest_enable=YES

130 guest_username=user8

进入user8家目录,新建文件

[root@localhost ~]# cd /home/user8

[root@localhost user8]# touch nxl

修改权限

[root@localhost home]# chmod a+rx user8

[root@localhost vsftpd]# service vsftpd restart

关闭 vsftpd: [确定]

为 vsftpd 启动 vsftpd: [确定]

设置匿名帐号和本地账号速度

编辑配置文件

[root@localhost home]# vim /etc/vsftpd/vsftpd.conf

编辑结果:

anon_max_rate=100000

local_max_rate=1000000

创建一个文件用于测试

[root@localhost pub]# cd /var/ftp/pub/

[root@localhost pub]# dd if=/dev/zero of=nxl bs=1M count=1

1+0 records in

1+0 records out

1048576 bytes (1.0 MB) copied, 0.00297739 seconds, 352 MB/s

[root@localhost home]# service vsftpd restart

关闭 vsftpd: [确定]

为 vsftpd 启动 vsftpd: [确定]