一、简介
FTP(File Transfer Protocol, FTP)是TCP/IP网络上两台计算机传送文件的协
议,FTP是在TCP/IP网络和INTERNET上最早使用的协议之一,它属于网络协议组的
应用层。FTP客户机可以给服务器发出命令来下载文件,上载文件,创建或改变服务
器上的目录。
概述
FTP是应用层的协议,它基于传输层,为用户服务,它们负责进行文件的传输。
FTP是一个8位的客户端-服务器协议,能操作任何类型的文件而不需要进一步处
理,就像MIME或Unencode一样。但是,FTP有着极高的延时,这意味着,从开始请
求到第一次接收需求数据之间
的时间会非常长,并且不时的
必需执行一些冗长的登陆进
程。FTP服务一般运行在20和
21两个端口。端口20用于在客
户端和服务器之间传输数据
流,而端口21用于传输控制
流,并且是命令通向ftp服务器的进口。当数据通过数据流传输时,控制流处于空闲
状态。而当控制流空闲很长时间后,客户端的防火墙会将其会话置为超时,这样当
大量数据通过防火墙时,会产生一些问题。此时,虽然文件可以成功的传输,但因
为控制会话会被防火墙断开,传输会产生一些错误。
FTP的工作原理
文件传输协议(FTP)是TCP/IP提供的标准机制,用来将文件从一个主机复制
到另一个主机。FTP使用TCP的服务。
优点:
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: [确定]
转载于:https://blog.51cto.com/caoruijun/992193