vsftpd是linux系统下的一套开源FTP服务器软件,在企业中对一些资源的快速共享等功能为我们提供了很好的帮助,企业内部资源是很需要安全性防护的,下面我们就通过ssl/tls来实现vsftpd的安全通信;并且进一步通过PAM实现vsftpd虚拟用户认证,下面就让我们一起来看一看吧
vsftpd的安全通信实现
安装vsftpd与mod_ssl模块
- # yum install vsftpd –y
- # yum install mod_ssl -y
修改openssl.conf配置文件中相对路径
- dir = /etc/pki/CA
准备CA必需的目录及文件
- # mkdir certs newcerts crl
- # touch index.txt
- # echo 01 > serial
为CA准备私钥
- # (umask 077;openssl genrsa -out private/cakey.pem 2048)
CA自签署证书
- # openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650
vsftpd服务器准备
创建个特定目录
- # mkdir /etc/vsftpd/ssl
生成vsftpd服务器自身私钥
- # cd /etc/vsftpd/ssl
- # (umask 077;openssl genrsa -out vsftpd.key 2048)
生成自签署证书
- # openssl req -new -key vsftpd.key -out vsftpd.csr
CA签署vsftpd服务器的证书请求
- # openssl ca -in vsftpd.csr -out vsftpd.crt
编辑vsftpd.conf配置文件,在文件末行添加一下指令
- ssl_enable=YES ----启用ssl功能
- ssl_sslv3=YES ----支持sslv3协议
- ssl_tlsv1=YES ----支持tlsv1协议
- allow_anon_ssl=NO ----匿名用户不启用ssl加密访问
- force_local_data_ssl=YES ----强制本地用户文件传输使用ssl
- force_local_logins_ssl=YES ----强制本地用户登陆需ssl认证
- rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt -----vsftpd服务器证书文件路径
- rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key ----vsftpd服务器自身密钥文件路径
配置完成启动vsftpd服务
匿名用户登陆测试
验证使用ssl加密功能来测试本地用户是否能够登陆ftp服务器,使用windows端工具flashfxp进行验证
基于PAM完成vsftpd支持的虚拟用户
PAM认证的的完成是在上面安全通信完成之后实验的,在vsftpd的主配置文件中定义的ssl会话指令对PAM认证虚拟用户会有影响,所以需要注释
使用pam验证mysql中的用户账号与密码,需要插件的支持
- # yum install mysql-server mysql-devel -y
编译安装pam_mysql-0.7RC1
- # tar xf pam_mysql-0.7RC1.tar.gz
- # cd pam_mysql-0.7RC1
- # ./configure --with-mysql=/usr --with-openssl
- # make
- # make install
启动mysql服务
连接mysql创建vsftpd库
- mysql> create database vsftpd;
- mysql> use vsftpd;
创建表
- mysql> CREATE TABLE users (
- -> id SMALLINT AUTO_INCREMENT NOT NULL,
- -> name CHAR(20) BINARY NOT NULL,
- -> password CHAR(48) BINARY NOT NULL,
- -> PRIMARY key(id));
授权用户访问
- mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'vsftpd';
- mysql> GRANT SELECT ON vsftpd.* TO vsftpd@127.0.0.1 IDENTIFIED BY 'vsftpd';
创建虚拟用户
- mysql> INSERT INTO users (name,password) VALUE ('test','test'),('test1','test1');
重新读取授权表
- mysql> FLUSH PRIVILEGES;
建立pam认证需要的文件
- # vim /etc/pam.d/vsftpd.mysql
添加一下内容
- auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd tables=users usercolumn=name passwdcolumn=passwd crypt=0
- account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd host=localhost db=vsftpd tables=users usercolumn=name passwdcolumn=passwd crypt=0
创建虚拟用户映射的系统用户及对应的目录
- # usradd –s /sbin/nologin –d /var/ftproot vuser
- # chmod go+rx /var/ftproot/
定义vsftp.conf配置文件内容,确定启用了以下指令
- anonymous_enable=YES
- local_enable=YES
- write_enable=YES
- anon_upload_enable=YES
- anon_mkdir_write_enable=YES
在配置文件末尾添加下面指令
- guest_enable=YES -----启用来宾账户访问
- guest_username=vuser ------指定虚拟用户访问时映射的本地用户
配置文件要修改的内容
- pam_service_name=vsftpd.mysql
重新启动vsftpd服务
- # service vsftpd restart
配置虚拟用户具有不同的访问权限
修改vsftpd.conf配置文件在末行添加一下内容
- user_config_dir=/etc/vsftpd/vuser ----指定虚拟用户配置文件目录
创建虚拟用户配置文件目录
- # mkdir /etc/vsftpd/vuser
- # cd /etc/vsftpd/vuser
- # touch test test1 ---创建与虚拟用户同名的配置文件
为test配置文件添加权限指令
- anon_upload_enable=NO
为test1配置文件添加权限指令
- anon_upload_enable=YES
test用户
现在整个流程就结束了,希望会对你有所帮助哦
转载于:https://blog.51cto.com/djy0000/1186797