安全的FTP文件服务器:VSFTPD+SSL

FTP(File Transfer Protocol)可以说是最古老的协议之一了。主要是用来传输数据的。因为传输数据的方便性,一直以来很受大家的喜赖。但使用FTP传输数据时是用明文的传输方式,所以非常的不安全,用一般的抓包工具就能轻易捕捉到账号及密码。所以为了数据传输的安全性,我们要把FTP服务和SSL结合起来,就能实现密文传输了。

FTP有三种用户账号,分别是:匿名用户,系统用户,虚拟用户。

匿名用户


系统用户


虚拟用户


不需要账号密码即可登录,访问的目录是映射为ftp用户的家目录


需要账号密码才能登录,访问的是用户自己的家目录


有账号和密码才能登录,但账号密码不能用于登录系统,只能用于访问ftp


 

  • 服务器的搭建

实现FTP文件服务器的软件有很多,在linux下就有:proftpd,pure ftp, vsftpd;在windows下有:Serv-U,IIS,Filezilla等。

这里我们以vsftpd软件(very sevure ftpd)为例来构建FTP文件服务器。

1.使用yum命令安装vsftpd软件(前提必须是已经配置好yum源,方可使用yum命令,具体yum命令配置请看http://lihuan.blog.51cto.com/4391550/800845的文章“如何创建yum源,如何使用yum命令”)

# yum install vsftpd –y (加上-y选项不用再提
# service vsftpd start

在浏览器里输入ftp://172.16.22.1(这是我的IP地址,请使用的时候改成自己的IP地址即可),会看到下面的界面:

使用ssl证书连接ftpjava代码菜鸟教程 ftp ssl_SSL

 

 

此时只能说明一个简单的ftp文件服务器搭建好了。

2.介绍vsftpd配置文件

配置文件的路径在:/etc/vsftpd/vsftpd.conf

# vim /etc/ vsftpd/vsftpd.conf(绿色字体为配置文件的内容)

anonymous_enable=YES 说明启用了匿名账户登录,如果把“YES”改为“NO”,则禁用匿名账户登录。

local_enable=YES  允许本地用户登录(本地用户一般是ID号大于等于500的用户), 如果把“YES”改为“NO”,则禁用本地账户登录。

write_enable=YES  定义本地账户有上传权限的,但此时匿名用户没有上传权限。

#anon_upload_enable=YES  去掉“#”则说明匿名用户有上传权限。

#anon_mkdir_write_enable=YES  去掉“#”则说明匿名用户有创建目录及文件的权限。

如果想要匿名用户有删除或重命名的权限则需要手动添加一条语句:

anon_other_write_enable=YES

xferlog_enable=YES  打开传输日志功能,如果真正使用传输日志功能,还必须把

#xferlog_file=/var/log/xferlog  改为 xferlog_file=/var/log/vsftpd.xferlog ,指定了日志文件的存放位置才能使用日志功能。下图就是使用了日志功能的记录:

使用ssl证书连接ftpjava代码菜鸟教程 ftp ssl_SSL_02

 

#ftpd_banner=Welcome to blah FTP service.  欢迎界面显示,启用此项则在登录FTP的时候显示此欢迎界面。如下图:

使用ssl证书连接ftpjava代码菜鸟教程 ftp ssl_SSL_03

大家都知道在使用本地用户登录ftp的时候,默认是可以切换到自己家目录意外的任意根目录的,这样是极其不安全的,为了实现安全性,我们需要对本地用户实行锁定,即不允许访问家目录以外的目录。

在配置文件里添加一条:

chroot_local_user=YES    锁定所用本地用户

以下是添加前后的对比图:

使用ssl证书连接ftpjava代码菜鸟教程 ftp ssl_SSL_04

 

使用ssl证书连接ftpjava代码菜鸟教程 ftp ssl_开发工具_05

如果想锁定部分用户则把#chroot_list_enable=YES #chroot_list_file=/etc/vsftpd/chroot_list同时启用,并把要锁定的用户名写到/etc/vsftpd/chroot_list文件中即可。

userlist_enable=YES  启用文件用户列表

如果和userlist_deny一起使用,则可实现拒绝或仅允许用户列表登录。

例:userlist_enable=YES
userlist_deny=YES

并在/etc/vsftpd/user_list中把用户写到文件中,则此文件中的用户都不能登录ftp

例:userlist_enable=YES
userlist_deny=NO

并在/etc/vsftpd/user_list中把用户写到文件,则只有此文件中的用户才能登录ftp

3.介绍/etc/vsftpd/ftpusers文件

摒弃前面的规则不讲,单单说这个文件,只要定义在这个文件里面的用户,则都不允许登录。

 

二、SSL

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

 

  • 实现安全的FTP文件服务器:VSFTPD+SSL
  • 给自己颁发证书
# cd /etc/pki/tls # vim openssl.cnf
 
  
把dir= ../CA改为 dir = /etc/pki/CA
 
  
# cd /etc/pki/CA # mkdir certs crl newcerts # touch index.txt serial crlnumber # echo 01 > serial # echo 01 > crlnumber
 
  
# (umask 077;openssl genrsa 2048 > private/cakey.pem)  生成CA自己的私钥
# openssl req –new –x509 –key private/cakey.pem –out cacert.pem –days 3650 给自己签发证书

依次输入 CN  Henan  ZZ  Magedu  Tech  ca.lihuan.com ,后面的直接回车即可

2.CA给VSFTPD颁发证书



# mkdir /etc/vsftpd/ssl # cd /etc/vsftpd/ssl # (umask 077;openssl genrsa 1024 > vsftpd.key)  # openssl req –new –keyvsftpd.key –outvsftpd.csr



依次输入 CN  Henan  ZZ  Magedu  Tech  lihuan ,后面的直接回车即可



# openssl ca –in vsftpd.csr –out vsftpd.crt # vim /etc/vsftpd/vsftpd.conf



3.把证书文件路径以及私钥文件路径还有启用ssl配置一下

在/etc/vsftpd/vsftpd.conf文件的最后加上下面几句:





ssl_enable=YES  
ssl_tlsv1=YES 
ssl_sslv2=YES  ssl_sslv3=YES  
allow_anon_ssl=NO
force_local_data_ssl=YES   
force_local_logins_ssl=YES 
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.key  
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.crt  #vsftpd  
说明:allow_anon_ssl=NO  #不允许匿名用户使用ssl
force_local_data_ssl=YES  #强制本地用户数据传输使用ssl
force_local_logins_ssl=YES  #强制本地用户登录时使用ssl
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.key  #vsftpd证书文件路径
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.crt  #vsftpd 私钥文件路径

保存并推出,重启一下服务:



# service vsftpd restart



4.进行安全登录测试

使用ssl证书连接ftpjava代码菜鸟教程 ftp ssl_运维_06

确定一下


 

使用ssl证书连接ftpjava代码菜鸟教程 ftp ssl_配置文件_07

基于ssl成功登录!