693579551 发表于 2018-10-3 09:39:55

vsftpd+TLS+MySQL

  操作环境(虚拟机):
  
rhel5.8(光盘源),IP: 192.168.88.131
  
vsftpd-2.0.5-24.el5(yum安装)
  
openssl-0.9.8e-22.el5(yum安装)
  
db4-utils-4.3.29-10.el5_5.2(yum安装,{可选,待笔者操作时解})
  
MySQL5.5.28.tar.gz(源码编译安装)
  
pam_mysql-0.7RC1.tar.gz(源码安装,必须项)
  
setenforce 0(selinux对vsftpd的管制很严格,本文暂不细说selinux.临时关闭之)
  物理机(Win7 IP: 192.168.88.1),
  
测试软件: FlashFXP(windows软件...笔者就不细说了)
  一.安装vsftpd.及配置文件一些注释
  
  
1.1 基本功能实现
  


[*]yum install vsftpd –y
[*]service vsftpd restart
  

  
  
1.2 简单配置解说:
  

  


[*]grep –v ‘^#’ /etc/vsftpd/vsftpd.conf   #过滤vsftpd.conf的有效行
[*]anonymous_enable=YES #允许匿名用户
[*]local_enable=YES #允许系统有效用户登陆
[*]write_enable=YES #允许用户写权限,全局
[*]local_umask=022 #本地用户上传文件时的umask值
[*]anon_upload_enable=YES #允许匿名用户上传
[*]anon_mkdir_write_enable=YES #允许匿名用户创建目录
[*]dirmessage_enable=YES   #登录时显示相关目录中,message_file文件的内容,自行创建
[*]xferlog_enable=YES#开启日志记录,默认日志文件/var/log/vsftpd.log
[*]connect_from_port_20=YES #数据传输端口(vsftpd命令端口为21,此为数据传输端口.)
[*]xferlog_std_format=YES#使用标准日志记录格式
[*]listen=YES #开启服务器后为监听状态(这不废话吗...)
[*]chroot_local_user=YES#开启此行,表示所有用户都限制在家目录
[*]chroot_list_enable=YES#控制用户锁定在家目录(同上行配可实现仅允许,仅限制)
[*]chroot_list_file=/etc/vsftpd/chroot_list #上一行的控制用户写在此文件
[*]pam_service_name=vsftpd #pam模块文件位置.(/etc/pam.d/vsftpd)
[*]userlist_enable=YES#写在/etc/vsftpd/user_list中的用户禁止登陆
[*]tcp_wrappers=YES#支持tcp_wrappers(就是/etc/hosts.{deny,allow} 的访问控制支持)
  

  1.3 不安全的vsftpd测试
  


[*]useradd mos1#创建一个普通测试用户(名: mos1 密码: redhat)
[*]echo “redhat” |passwd –stdin mos1
[*]tcpdump -i eth1 -nn -X tcp port 21 and host 192.168.88.131
  

  #使用抓包工具,抓取知道网卡IP的指定协议的指定端口数据:
  
使用物理机登陆ftp时,抓到如下图:
  


  二.   实现加密的ftp
  (PS:请先执行 ldd `which vsftpd`|grep libssl保证有字符出现!若没有,安装openssl-0.9.8e-22.el5后在检查,这个必须有.)
  2.1 创建私有CA及其私有证书签发:
  

  证书的过程,笔者之前写过,不再罗嗦,超级传送门如下:

openssl个人笔记
  
2.2 在配置文件vsftpd.conf中添加对tls的支持
  

  


[*]ssl_enable=YES #支持加密的ftp
[*]allow_anon_ssl=NO   #匿名用户不使用加密连接
[*]force_local_data_ssl=YES#强制所有本地用户数据加密传输
[*]force_local_logins_ssl=YES#强制本地用户登陆时账号和密码加密传输
[*]ssl_tlsv1=YES#支持tlsv1版本
[*]ssl_sslv2=NO#不支持sslv2版本
[*]ssl_sslv3=NO   #不支持sslv3版本
[*]rsa_cert_file=/etc/vsfpd/ssl/vsftpd.crt#CA签署csr后的证书,用于传递给客户端
[*]rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key   #私钥文件
  

  2.3 重启vsftpd服务,在物理机做测试即可,若出现下图,则OK.


  '

  三.vsftpd, tls和MySQL整合.
  3.1 创建一个普通用户(用于做虚拟用户映射,指定特定目录,给shell为/sbin/nologin即可)
  

  


[*]mkdir –pv /var/testuser

[*]useradd -s /sbin/nologin -d /var/testuser guest

[*]chown -R guest. /var/testuser
  

  
  
3.2 先做一个简单的不通过mysql认证的测试,不做可直接跳过3.2所有操作.
  
    3.2.1 安装文件数据库生成工具,并生成数据库文件
  


[*]yum install db4-utils –y
[*]echo -e 'demo1\n123\ndemo2\n456' > /etc/vsftpd/ulist.txt #数据库模板,奇数行用户名,偶数行密码
[*]db_load -T -t hash -f /etc/vsftpd/ulist.txt /etc/vsftpd/ulist.db #生成数据库文件
  

  
  
    3.2.2 修改配置pam认证文件(里面的文件不用指定扩展名).
  


[*]vim /etc/pam.d/vsftpd
[*]#%PAM-1.0
[*]auth required pam_userdb.so db=/etc/vsftpd/ulist
[*]account required pam_userdb.so db=/etc/vsftpd/ulist
  

  
  
    3.2.3 修改vsftpd.conf支持虚拟用户
  


[*]vim /etc/vsftpd/vsftpd.conf #追加如下两行
[*]guest_enable=YES
[*]guest_username=guest
  

  
   Ps:   重启服务,使用用户demo1,密码123 和用户demo2,密码456 登陆测试即可
  
  
3.3 使用基于MySQL的认证
  

  3.3.1 安装MySQL
  
   这里笔者偷个懒.笔者的里面第一个就是mysql的编译安装,而且笔者测试时也是使用的这个MySQL,因此,笔者便不再罗嗦啦,超级传送门如下:

LAMPX-AMPX编译安装篇:
  3.3.2 在MySQL中创建虚拟用户的数据
  

  


[*]mysql>create database vsftpd;
[*]mysql>GRANT SELECT ON vsftpd.* TO 'ftpuser'@'localhost' IDENTIFIED BY '123';
[*]mysql>use vsftpd;
[*]mysql>CREATE TABLE vusers (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, Name VARCHAR(30) NOT NULL, Password CHAR(48) NOT NULL);
[*]mysql>INSERT INTO vusers (Name,Password) VALUES ('demo1',password('123')),('demo2',password('123'));
[*]mysq>FLUSH PRIVILEGES;
[*]mysql>\q
  

  Ps:对上面几条数据库命令做个注释,按顺序:
  创建名为 vsftpd 的数据库
  创建一个用户ftpuser,允许其通过localhost使用123密码访问
  创建一个名字为vusers的表,id为主键,自增,不得为空,其后是Name和密码,都不得为空
  插入俩数据(测试用户),分别是demo1和demo2,密码123加密存放.
  刷新权限
  退出mysql
  3.3.3编译生成pam_mysql.so模块.
  
    (Ps: 笔者不推荐使用yum安装MySQL,笔者肯定不会说在其它虚拟机测试时使用yum安装的mysql,编译这个模块一直失败的......笑话,这种事儿能说吗.)
  


[*]mkdir –pv /root/work
[*]wget http://down1.chinaunix.net/distfiles/pam_mysql-0.7RC1.tar.gz
[*]tar xf pam_mysql-0.7RC1.tar.gz
[*]cd pam_mysql-0.7RC1
[*]./configure –with-mysql=/usr/local/mysql
[*]make && make install #编译后请确认/lib/security/pam_mysql.so这个文件存在.
  

  
  

  
3.3.4 编辑pam认证文件
  

  


[*]vim /etc/pam.d/vsftpd
[*]auth required pam_mysql.so user=ftpuser passwd=123 host=localhost db=vsftpd table=vusers usercolumn=Name passwdcolumn=Password crypt=2
[*]account required pam_mysql.so user=ftpuser passwd=123 host=localhost db=vsftpd table=vusers usercolumn=Name passwdcolumn=Password crypt=2
  

  Ps: 这两行中前面都好说,末尾的crypt加个注释:
  crypt=0: 明文密码
  
crypt=1: 使用crpyt()函数(对应SQL数据里的encrypt(),encrypt()随机产生salt)
  
crypt=2: 使用MYSQL中的password()函数加密 libmysqlclient_r.so.18.0.0


页: [1]
查看完整版本: vsftpd+TLS+MySQL