FTP协议采起的是明文传递,其余人很容易经过抓包工具抓取到用户的我的信息。数据库
咱们所采起的安全访问主要分为两种,vim
1.ftps安全
利用ftp+ssl 的结合,对用户的我的信息进行加密。app
2.虚拟帐号的映射tcp
虚拟帐号FTP看做是一种特殊的匿名FTP,这个特殊的匿名FTP,特殊在哪里呢,它拥有登陆FTP的用户名和密码,可是它所使用的用户名又不是本地用户(即它的用户名只能用来登陆FTP,而不能用来登陆系统),而且全部的虚拟用户名,在登陆FTP时,都是在映射为一个真实的帐号以后才登陆到FTP上的。(须要说明的是这个真实的号是能够登陆系统的,即它和本地用户在这一点上性质是同样的。)ide
[root@localhost ~]# mkdir /mnt/cdrom工具
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom测试
[root@localhost ~]# yum install vsftpd –yui
[root@localhost ~]# service vsftpd start加密
[root@localhost ~]# useradd test
[root@localhost ~]# passwd test
增长本地帐户test。以供测试。密码为123.
[root@localhost ~]# tshark -ni eth0 -R "tcp.dstport eq 21"
195.702847 192.168.145.10 -> 192.168.145.200 FTP Request: USER test
195.703455 192.168.145.10 -> 192.168.145.200 FTP Request: PASS 123
195.745117 192.168.145.10 -> 192.168.145.200 FTP Request: opts utf8 on
195.745739 192.168.145.10 -> 192.168.145.200 FTP Request: syst
195.746251 192.168.145.10 -> 192.168.145.200 FTP Request: site help
195.746526 192.168.145.10 -> 192.168.145.200 FTP Request: PWD
195.746808 192.168.145.10 -> 192.168.145.200 FTP Request: CWD /home/test/pub/
能够看到很容易就获得了用户的我的信息
1.FTPS的实现
[root@localhost ~]# vim /etc/pki/tls/openssl.cnf
45 dir = /etc/pki/CA
88 countryName = optional
89 stateOrProvinceName = optional
90 organizationName = optional
136 countryName_default = CN
141 stateOrProvinceName_default = BEIJING
144 localityName_default = BEIJING
[root@localhost ~]# cd /etc/pki/CA/
[root@localhost CA]# mkdir certs crl newcerts
[root@localhost CA]# touch index.txt serial
[root@localhost CA]# echo "01" >serial
[root@localhost CA]# openssl genrsa 1024 >private/cakey.pem
[root@localhost CA]# chmod 600 private/cakey.pem
[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) [BEIJING]:
Locality Name (eg, city) [BEIJING]:
Organization Name (eg, company) [My Company Ltd]:zz.com
Organizational Unit Name (eg, section) []:tec
Common Name (eg, your name or your server's hostname) []:www.zz.com
Email Address []:
[root@localhost CA]#
这样CA就搞定了,进行ftp证书的申请
[root@localhost CA]# mkdir -pv /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) [BEIJING]:
Locality Name (eg, city) [BEIJING]:
Organization Name (eg, company) [My Company Ltd]:zz.com
Organizational Unit Name (eg, section) []:tec
Common Name (eg, your name or your server's hostname) []:ftp://tec.zz.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: Jul 26 08:08:07 2012 GMT
Not After : Jul 26 08:08:07 2013 GMT
Subject:
countryName = CN
stateOrProvinceName = BEIJING
organizationName = zz.com
organizationalUnitName = tec
commonName = ftp://tec.zz.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
F1:76:A8:59:10:62:99:68:81:D3:D1:90:83:C5:0D:87:3E:C1:D7:BC
X509v3 Authority Key Identifier:
keyid:CC:D2:88:63:AF:D9:DD:0C:60:7F:D7:94:A7:3F:7F:F5:BC:17:CA:DA
Certificate is to be certified until Jul 26 08:08:07 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
经过man手册查看vsftpd中与cert,ssl相关参数。添加至vsftpd配置文件中
[root@localhost certs]# man 5 vsftpd.conf
[root@localhost certs]# vim /etc/vsftpd/vsftpd.conf
114 pam_service_name=vsftpd
115 userlist_enable=YES
116 tcp_wrappers=YES
117 rsa_cert_file=/etc/vsftpd/certs/vsftpd.cert //证书文件存放位置
118 rsa_private_key_file=/etc/vsftpd/certs/vsftpd.key //私钥存放位置
119 ssl_tlsv1=YES //版本支持
120 ssl_sslv2=YES
121 ssl_sslv3=YES
122 ssl_enable=YES
123 force_local_logins_ssl=YES //强制用户进行加密登陆
124 force_local_data_ssl=YES //强制数据加密
[root@localhost certs]# service vsftpd restart
咱们使用FTP客户端工具进行测试。
这里使用的是Flashfxp 。
站点选择站点管理器,右键Flashfxp新建站点,链接类型选为SSLV3
应用后进行链接
抓包能够发现已经抓取不到有价值的信息了
981.505168 192.168.145.10 -> 192.168.145.200 FTP Request: AUTH SSL
981.516046 192.168.145.10 -> 192.168.145.200 FTP Request: \200\332\001\003\000\000\261\000\000\000 \000\300\024\000\300
981.518291 192.168.145.10 -> 192.168.145.200 FTP Request: \026\003\000\000\204\020\000\000\200\234\2270\177V\306}<\365\230
981.723459 192.168.145.10 -> 192.168.145.200 TCP 55233 > 21 [ACK] Seq=443 Ack=921 Win=63320 Len=0
981.723778 192.168.145.10 -> 192.168.145.200 TCP [TCP Dup ACK 448#1] 55233 > 21 [ACK] Seq=443 Ack=921 Win=63320 Len=0 SLE=846 SRE=921
1036.808819 192.168.145.10 -> 192.168.145.200 FTP Request: \027\003\000\000\030w\253;\a\254z\273%*l\227\003\001\237\307\0335\374\003\253yt\254C\027\003\000\000 \223\033\330|O\254\214\261\317\271ixv>\345\023\362\327\274\357\t\267\375\205t\204\243\314r\354\275%
1036.817167 192.168.145.10 -> 192.168.145.200 FTP Request: \027\003\000\000\030\205\233\237\033\200'V\305\256\330Y\223\034\305\356\037A\234a\206\206\340\354\256\027\003\000\000 \274\303l/\026|\024#H\271f_KL\253\021\0167\271\271\335^\031\245/\355#\230P62\244
1036.818470 192.168.145.10 -> 192.168.145.200 FTP Request: \027\003\000\000\030\356\203\342\3309:\3760\366t\230j\005\2711\377\325\212\206\3707\3040<\027\003\000\000 \037\237*r5\201\242\346\031\322\202\266\023_k\316+]\221\020\371O\000\250\255\255\311m\232\215\251\037
1037.009523 192.168.145.10 -> 192.168.145.200 FTP Request: \027\003\000\000\030\2731\274\025\213\021\203<\223yMd\270\275\245?\031x\240\377\251\022\273\241\027\003\000\000 <\202\206#\3575\224U\247d6\037\346\244N\353\\342\352\365)\252\271\227)\263\230\367\355R\326l
1037.010302 192.168.145.10 -> 192.168.145.200 FTP Request: \027\003\000\000\030\036\006\a\363\267\327^q\242r
2.虚拟帐号的实现
[root@localhost ~]# mkdir /mnt/cdrom
[root@localhost ~]# mount /dev/cdrom /mnt/cdrom
[root@localhost ~]# yum install vsftpd –y
[root@localhost ~]# service vsftpd start
[root@localhost ~]# cd /etc/vsftpd/
创建三个虚拟帐号,奇数行为用户名,偶数行为密码。
[root@localhost vsftpd]# vim viruser.txt
1 user1
2 123
3 user2
4 123
5 user3
6 123
而后咱们须要生成hash加密的数据库文件以便让后续的pam.userdb 这个模块来读取咱们的用户名密码进行验证.咱们须要确认系统已经安装了db4_utils的rpm包,接下来执行:
[root@localhost vsftpd]# yum install db4-utils -y
[root@localhost vsftpd]# db_load -T -t hash -f viruser.txt viruser.db
生成数据库文件后,vsftpd要启用虚拟帐号须要跟PAM认证模块配合.咱们用rpm安装好vsftp套件后.在/etc/pam.d/下就会有一个vsftpd的文件,这个是vsftpd利用pam这个认证模块来认证用户登录的,
[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
这里的db=后面指的就是咱们生成好的hash数据文件.文件后缀的.db是不须要打的,pam_userdb.so这个模块会自动帮咱们识别.
由于虚拟帐号要登录系统必需要影射到咱们系统的真实用户上.不可能一个平白无故的用户跑到咱们系统上来.因此须要创建一个虚拟用户影射的系统帐号:useradd test 不须要给这个用户密码,那么他也永远不能登录系统.
[root@localhost vsftpd]# useradd test
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=test //guest帐号影射为test
[root@localhost vsftpd]# service vsftpd restart
[root@localhost vsftpd]# chmod a+rx /home/test
[root@localhost vsftpd]# cd /home/test/
[root@localhost test]# touch f1
测试:
若是咱们但愿用户有特殊的权限。咱们能够这样作
例如
user1具备浏览文件,目录和下载的权限.
user2具备下载,浏览,和创建目录的权限.
user3具备下载,上传,浏览,创建并删除目录的权限.
[root@localhost vsftpd]# vim /etc/vsftpd/vsftpd.conf
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
guest_enable=YES
guest_username=test //guest帐号影射为test
user_config_dir=/etc/vsftpd/viruser-conf (用户个性化配置目录)
[root@localhost ~]# mkdir /etc/vsftpd/viruser-conf
[root@localhost ~]# cd /etc/vsftpd/viruser-conf
分别创建user1,user2,user3 这三个文件,文件名必须跟虚拟用户名一致,而后咱们就能够在这些文件里面添加用户所对应的权限喽.....
在user1里添加 anon_world_readable_only=NO (这个选项是说用户只能够读取本身有权限读取的文件,这项为YES的话那么其余用户的文件就看不到了,这里咱们设置为NO)
而后user2的配置文件:
anon_world_readable_only=NO
download_enable=YES
write_enbale=YES
anon_write_mkdir_enable=YES
anon_max_rate=200000 (限速为200K)
user3的配置
anon_world_readable_only=NO
download_enable=YES
write_enbale=YES
anon_write_mkdir_enable=YES
anon_other_write_enabel=YES
local_root=/db/ftp (默认虚拟用户会登录到本身影射的系统用户主目录,若是你但愿他登录到其它目录就用这个选项)
重启下vsftpd服务,配置就生效了
参数还有不少:
anon_max_rate 匿名帐号的速率 local_max_rate 本地账号的速率 max_clients 同时在线的最大用户数量 max_per_ip 每用户的最大链接数 限定用户空间 磁盘配额 user_config_dir 用户的配置的目录