vsftpd是linux系统下的一套开源FTP服务器软件,在企业中对一些资源的快速共享等功能为我们提供了很好的帮助,企业内部资源是很需要安全性防护的,下面我们就通过ssl/tls来实现vsftpd的安全通信;并且进一步通过PAM实现vsftpd虚拟用户认证,下面就让我们一起来看一看吧 
  vsftpd的安全通信实现
安装vsftpd与mod_ssl模块
 
  
  1. # yum install vsftpd –y 
  2. # yum install mod_ssl -y 
修改openssl.conf配置文件中相对路径
 
  
  1. dir  = /etc/pki/CA 
准备CA必需的目录及文件
 
  
  1. # mkdir certs newcerts crl 
  2. # touch index.txt 
  3. # echo 01 > serial 
为CA准备私钥
 
  
  1. # (umask 077;openssl genrsa -out private/cakey.pem 2048) 
CA自签署证书
 
  
  1. # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 

vsftpd服务器准备
创建个特定目录
 
  
  1. # mkdir /etc/vsftpd/ssl 
生成vsftpd服务器自身私钥
 
  
  1. # cd  /etc/vsftpd/ssl 
  2. # (umask 077;openssl genrsa -out vsftpd.key 2048) 
生成自签署证书
 
  
  1. # openssl req -new -key vsftpd.key -out vsftpd.csr 
CA签署vsftpd服务器的证书请求
 
  
  1. # openssl ca -in vsftpd.csr -out vsftpd.crt 
编辑vsftpd.conf配置文件,在文件末行添加一下指令
 
  
  1. ssl_enable=YES                           ----启用ssl功能 
  2. ssl_sslv3=YES                              ----支持sslv3协议 
  3. ssl_tlsv1=YES                                    ----支持tlsv1协议 
  4. allow_anon_ssl=NO                      ----匿名用户不启用ssl加密访问 
  5. force_local_data_ssl=YES             ----强制本地用户文件传输使用ssl 
  6. force_local_logins_ssl=YES          ----强制本地用户登陆需ssl认证 
  7. rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt    -----vsftpd服务器证书文件路径 
  8. rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key    ----vsftpd服务器自身密钥文件路径 
配置完成启动vsftpd服务
匿名用户登陆测试
本地用户登陆测试(笔者已经创建了用户hadoop)
验证使用ssl加密功能来测试本地用户是否能够登陆ftp服务器,使用windows端工具flashfxp进行验证
flashfxp客户端工具设置
点击“连接”选项
接受传送过来的证书
基于PAM完成vsftpd支持的虚拟用户
PAM认证的的完成是在上面安全通信完成之后实验的,在vsftpd的主配置文件中定义的ssl会话指令对PAM认证虚拟用户会有影响,所以需要注释
使用pam验证mysql中的用户账号与密码,需要插件的支持
 
  
  1. # yum install mysql-server mysql-devel -y 
编译安装pam_mysql-0.7RC1
 
  
  1. # tar xf pam_mysql-0.7RC1.tar.gz 
  2. # cd pam_mysql-0.7RC1 
  3. # ./configure --with-mysql=/usr --with-openssl 
  4. # make 
  5. # make install 
启动mysql服务
连接mysql创建vsftpd库
 
  
  1. mysql> create database vsftpd; 
  2. mysql> use vsftpd; 
创建表
 
  
  1. mysql> CREATE TABLE users ( 
  2.     -> id SMALLINT AUTO_INCREMENT NOT NULL
  3.     -> name CHAR(20) BINARY NOT NULL
  4.     -> password CHAR(48) BINARY NOT NULL
  5.     -> PRIMARY key(id)); 
授权用户访问
 
  
  1. mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'vsftpd'
  2. mysql> GRANT SELECT ON vsftpd.* TO vsftpd@127.0.0.1 IDENTIFIED BY 'vsftpd'
创建虚拟用户
 
  
  1. mysql> INSERT INTO users (name,password) VALUE ('test','test'),('test1','test1'); 
重新读取授权表
 
  
  1. mysql> FLUSH PRIVILEGES
建立pam认证需要的文件
 
  
  1. # vim /etc/pam.d/vsftpd.mysql 
添加一下内容
 
  
  1. auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd tables=users usercolumn=name passwdcolumn=passwd crypt=0 
  2. account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd tables=users usercolumn=name passwdcolumn=passwd crypt=0 
创建虚拟用户映射的系统用户及对应的目录
 
  
  1. # usradd –s /sbin/nologin –d /var/ftproot vuser 
  2. # chmod go+rx /var/ftproot/ 
定义vsftp.conf配置文件内容,确定启用了以下指令
 
  
  1. anonymous_enable=YES 
  2. local_enable=YES 
  3. write_enable=YES 
  4. anon_upload_enable=YES 
  5. anon_mkdir_write_enable=YES 
在配置文件末尾添加下面指令
 
  
  1. guest_enable=YES     -----启用来宾账户访问 
  2. guest_username=vuser   ------指定虚拟用户访问时映射的本地用户 
配置文件要修改的内容
 
  
  1. pam_service_name=vsftpd.mysql 
重新启动vsftpd服务
 
  
  1. # service vsftpd restart 
启动vsftpd服务使用虚拟用户登陆验证
配置虚拟用户具有不同的访问权限
修改vsftpd.conf配置文件在末行添加一下内容
 
  
  1. user_config_dir=/etc/vsftpd/vuser                ----指定虚拟用户配置文件目录 
创建虚拟用户配置文件目录
 
  
  1. # mkdir /etc/vsftpd/vuser 
  2. # cd /etc/vsftpd/vuser 
  3. # touch test test1                   ---创建与虚拟用户同名的配置文件 
为test配置文件添加权限指令
 
  
  1. anon_upload_enable=NO 
为test1配置文件添加权限指令
 
  
  1. anon_upload_enable=YES 
test用户
现在整个流程就结束了,希望会对你有所帮助哦