许多INTERNET爱好者最先接触的东西就是FTP ,它带来的文件 共享的便利(可以跨平台访问等),但是明文传输的 ftp的安全性,成为一个很大的问题。本文主要从基本安全,tcp-wrapper,ftps,虚拟用户四个方面来聊聊ftp的安全性。

1、基本安全

a、限制匿名用户使用指定邮箱作为密码:

  #vim /etc/vsftpd/vsftpd.conf

deny_email_enable=YES

# (default follows)

banned_email_file=/etc/vsftpd/banned_emails

  #vim /etc/vsftpd/banned_emails

[email protected]

聊聊vsftpd安全性_第1张图片

 b、限制本地用户登录后,切换目录

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list

   #vim /etc/vsftpd/chroot/_list   编辑文件,将user1加入其中

user1

聊聊vsftpd安全性_第2张图片

3.禁止本地某些用户登录:

#vim /etc/vsftpd/vsftpd.conf

userlist_enable=YES   (默认值)

将用户加入/etc/vsftpd/ftpusers/etc/vsftpd/user_list文件中,user_list的安全性更高些,

聊聊vsftpd安全性_第3张图片

2、tcp-wrapper

   a.先聊聊 TCP Wrapper 是什么:

一般在操作系统层面上安装防火墙来处理网络连接,然而虽然防火墙有非常广泛的用途,但他却不是万能的,例如它无法处理类似的向连接发起者发送一些文本这样的任务。
TCP Wrappers扩展了inetd为受其控制的服务程序实施控制的能力,通过使用这种方法,它能够提供日志支持、返回消息给联入的连接、使得服务程序只接受内部连接,等等。
然而,由TCP-Wrappers提供的一些额外的安全功能,不应被视为好的防火墙的替代品,TCP Wrappers 应结合防火墙或其他安全加强设施一并使用,为系统多提供一层安全防护。

b. TCP Wrapper 系统概述

聊聊vsftpd安全性_第4张图片

从上图可以看出tcp wrapper 在系统中的层级结构和应用程序的关系.
注意 : Netfilter(iptable) 是工作在网络层的 而 tcp wrapper 是工作在应用层

聊聊vsftpd安全性_第5张图片

从上图可以清楚的看出 /etc/hosts.allow 和 /etc/hosts.deny 配置文件规则关系

#yum install vsftpd

默认配置文件tcp_wrappers=YES

要查看vsftp是否支持tcp_wrapper,

#ldd  $(which vsftpd)

linux-gate.so.1 =>  (0x009e8000)

libssl.so.6 => /lib/libssl.so.6 (0x00b44000)

libwrap.so.0 => /lib/libwrap.so.0 (0x00ce2000)

libnsl.so.1 => /lib/libnsl.so.1 (0x00c98000)

libpam.so.0 => /lib/libpam.so.0 (0x00110000)

libcap.so.1 => /lib/libcap.so.1 (0x007c6000

   ........

是支持tcp_wrapper的,

vim /etc/hosts.allow  

vsftpd:192.168.2.0/255.255.255.0:allow    (允许192.168.2.0网段的访问)

vim /etc/hosta.deny

vsftpd:all:deny                  (禁止其他网段其用户访问)

[root@mail ~]# ftp 192.168.2.1

Connected to 192.168.2.1.

220 (vsFTPd 2.0.5)

530 Please login with USER and PASS.

530 Please login with USER and PASS.

KERBEROS_V4 rejected as an authentication type

Name (192.168.2.1:root):

[root@mail ~]# ftp 127.0.0.1

Connected to 127.0.0.1.

421 Service not available.

ftp>

3、ftps配置

  ftp-server  192.168.2.1

  ftp-client 192.168.2.100

CA服务器配置

#vim /etc/pki/tls/openssl.cnf

43 [ CA_default ]

44

45 dir             = /etc//pki/CA         #CA自定义路径

87 [ policy_match ]

88 countryName            = optional

89 stateOrProvinceName     = optional

90 organizationName        = optional

根据配置文件创建相关的目录与文件,并且私钥为cakey.pem,根证书为cacer.pem

#cd  /etc/pki/CA

#mkdir  crl  certs  newcerts

#touch index.txt   serial

#echo "01">serial

 #openssl genrsa 1024 >private/cakey.pem

#chmod  600 private/*

openssl req -new -key private/cakey.pem -x509 -out cacer.pem

ftp-server产生私钥,及证书:

mkdir   -pv  /etc/vsftpd/certs    

openssl  genrsa 1024  > vsftpd.key

openssl  req -new -key  vsftpd.key  -out  vsftpd.csr

openssl  ca -in vsftpd.csr -out vsftpd.cert

编辑vsftp的配置文件

#vim  /etc/vsftpd/vsftpd.conf

force_local_data_ssl=YES     #指定vsftpd强制非匿名用户使用加密的数据传输

force_local_logins_ssl=YES    #指定vsftpd强制非匿名用户使用加密登录

ssl_enable=YES             #指定vsftpd支持加密协议

ssl_sslv2=YES              #指定vsftpd支持安全套接字层v2

ssl_sslv3=YES              #指定vsftpd支持安全套接字层v3

ssl_tlsv1=YES              #指定vsftpd支持tls加密方式v1

rsa_cert_file=/etc/vsftpd/certs/vsftpd.cert          #指定ftp-server的证书路径

rsa_private_key_file=/etc/vsftpd/.sslkey/vsftpd.key  #指定ftp-server的私路径

# service vsftpd restart       #重启vsftp服务

是针对本地用户使用ftps,无法使用浏览器或命令行来实现访问了,需要使用标准的客户端软件,如:flashfxp

聊聊vsftpd安全性_第6张图片

聊聊vsftpd安全性_第7张图片

通过抓包,密文传输:

聊聊vsftpd安全性_第8张图片

4、虚拟用户


通过本地数据文件实现虚拟用户访问,首先需要建立一个文件,将所有用户和密码保存到该文件中,这种方法主要适用于用户比较少及变化不频繁的情况下,

1)需要安装生成数据库的软件包db4-utils; yum install db4-utils;

2)生成虚拟用户文件,在该文件中用户及密码各一行。本章中是建立/etc/vsftpd/ftpuser.txt

test1   #虚拟用户1

123    #虚拟用户1密码

test2   #虚拟用户2

456     #虚拟用户2密码

3)生成虚拟用户数据文件,处于安全考虑应修改生成的用户数据文件权限:

#db_load  -T -t hash -f /etc/vsftpd/ftpuser.txt   /etc/vsftpd/ftpuser.db

#chmod  600  /etc/vsftpd/ftpuser.db

4)修改PAM认证文件/etc/pam.d/vsftpd,将原有内容注释并加入以下内容,通过以下两行的配置可以将认证用户及用户其他 检查的工作的数据来源改变为本地数据文件(/etc/vsftpd/ftpuser.db)

需要使用模块/lib/security/pam_userdb.so

查看该模块的手册:

#vim /usr/share/doc/pam-0.99.6.2/txts/README.pam_userdb,用法如下图例子:

聊聊vsftpd安全性_第9张图片

#vim /etc/pam.d/vsftpd

auth    required        /lib/security/pam_userdb.so     db=/etc/vsftpd/ftpuser

account required        /lib/security/pam_userdb.so     db=/etc/vsftpd/ftpuser

聊聊vsftpd安全性_第10张图片


5)使用如下命令创建本地映射用户:

#useradd  -d   -s /sbin/nologin  redhat

6)修改/etc/vsftpd/vstpd.conf文件,内容如下:(查看man手册,man 5 vsftpd.conf)

#vim /etc/vsftpd/vsftpd.conf

guest_enable=YES         #允许虚拟用户

guest_username=redhat     #将虚拟用户映射为本地的reahat用户

pam_service_name=vsftpd  #pam认证文件(默认就是vsftpd)

7)重启vsftpd,登录测试,

聊聊vsftpd安全性_第11张图片

8)修改redhat家目录权限,#vim  /etc/vsftpd/vsftpd.conf

chmod o+r redhat

聊聊vsftpd安全性_第12张图片

#vim  /etc/vsftpd/vsftpd.conf

anon_upload_enable=YES   (开启匿名上传,)

anon_umask=073                 (并设定上传文件的权限值为704,允许其他用户可以下载)

聊聊vsftpd安全性_第13张图片

#vim  /etc/vsftpd/vsftpd.conf

anon_other_write_enable=yes (就可以重命名,删除等操作了)

聊聊vsftpd安全性_第14张图片

9)测试成功,虚拟用户登录的均是ftp服务器上的同一个目录,即建立的本地映射用户vuser的家目录。

实验结束.