安全的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地址即可),会看到下面的界面:
此时只能说明一个简单的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 ,指定了日志文件的存放位置才能使用日志功能。下图就是使用了日志功能的记录:
#ftpd_banner=Welcome to blah FTP service. 欢迎界面显示,启用此项则在登录FTP的时候显示此欢迎界面。如下图:
大家都知道在使用本地用户登录ftp的时候,默认是可以切换到自己家目录意外的任意根目录的,这样是极其不安全的,为了实现安全性,我们需要对本地用户实行锁定,即不允许访问家目录以外的目录。
在配置文件里添加一条:
chroot_local_user=YES 锁定所用本地用户
以下是添加前后的对比图:
如果想锁定部分用户则把#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成功登录!