FTP服务器支持基于Mysql的用户认证方式

原创 2018年04月16日 22:49:04
  • 默认情况下vsftpd是通过pam的认证机制来验证用户的,但是对于用户很多的情况下,这个是完善的,接下来的配置希望实现vsftpd基于mysql的用户认证
  • 首先来安装需要的两个软件包
[root@server23 ssl]# yum install mysql-server mysql-devel -y 
[root@server23 ssl]# yum groupinstall "Development tools" -y 
  • 然后需要下载pam_mysql,并且进行解压安装
[root@server23 mnt]# tar -zxf pam_mysql-0.7RC1.tar.gz 
  • 然后进行编译安装
[root@server23 pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/ --with-openssl  
[root@server23 pam_mysql-0.7RC1]# make 
[root@server23 pam_mysql-0.7RC1]# make install 
  • 可能出现的错误
configure: error: Cannot find pam headers. Please check if your system is ready for pam module development.
  • 这个错误需要安装
[root@server23 pam_mysql-0.7RC1]# yum install pam-devel -y 
  • 如果出现这个错误
configure: error: Cannot locate mysql client library. Please check your mysql installation.
  • 需要启动mysql服务,并且指定mysql路径为/usr;
  • 对于安装成功之后的库文件在/lib/security/
[root@server23 pam_mysql-0.7RC1]# ll /lib/security/
total 140
-rwxr-xr-x. 1 root root    871 416 17:38 pam_mysql.la
-rwxr-xr-x. 1 root root 135862 416 17:38 pam_mysql.so
  • 接下来需要配置mysql,创建相应的表文件
mysql> create database vsftpd;
Query OK, 1 row affected (0.00 sec)

mysql> use vsftpd;
Database changed
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))
    -> ;
Query OK, 0 rows affected (0.10 sec)

mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'vsftpd';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT SELECT ON vsftpd.* TO vsftpd@127.0.0.1 IDENTIFIED BY 'vsftpd';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
  • 插入两个用户
mysql> INSERT INTO users (name,password) VALUE('tom',password('redhat')),('jerry',password('redhat'));
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0
  • 接下来需要建立的是pam认证需要的配置文件
auth required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd \
host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib/security/pam_mysql.so user=vsftpd passwd=vsftpd \
host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=0 //表示使用明文进行存储
  • 建立虚拟用户映射的系统用户及对应的目录
[root@server23 ~]# useradd -s /sbin/nologin -d /var/ftproot vuser
[root@server23 ~]# chmod go+rx /var/ftproot/
  • 接下来修改vsftpd的配置文件
pam_service_name=vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES


# ssl or tls 
ssl_enable=NO
ssl_sslv3=YES
ssl_tlsv1=YES
allow_anon_ssl=NO
force_local_data_ssl=NO
force_local_logins_ssl=NO
rsa_cert_file=/etc/vsftpd/ssl/vsftpd.crt
rsa_private_key_file=/etc/vsftpd/ssl/vsftpd.key

guest_enable=YES
guest_username=vuser
  • 接下来重新启动服务
[root@server23 ~]# /etc/init.d/vsftpd restart
Shutting down vsftpd:                                      [  OK  ]
Starting vsftpd for vsftpd:                                [  OK  ]
  • 然后需要测试连接用户tom
[root@my Desktop]# lftp 172.25.23.23 -utom
Password:    //输入错误的密码
lftp tom@172.25.23.23:~> ls          
ls: Login failed: 530 Login incorrect.   
[root@my Desktop]# lftp 172.25.23.23 -utom
Password:   //输入正确的密码
lftp tom@172.25.23.23:~> ls          
lftp tom@172.25.23.23:~> 
  • 首先查看mysql里面存储的用户情况
    这里写图片描述
  • 测试使用mysql里面的用户是可以直接进行登陆
    这里写图片描述
  • 对于用户来说都会被映射成为vuser这个系统用户,并且家目录是/var/ftproot,对于这个目录里面的文件是可以进行下载的
[root@my Desktop]# lftp 172.25.23.23 -utom
Password: 
lftp tom@172.25.23.23:~> ls          
-rw-r--r--    1 0        0             779 Apr 16 14:30 fstab
lftp tom@172.25.23.23:/> get fstab 
779 bytes transferred     
  • 同样也是可以上传文件的
lftp tom@172.25.23.23:/> lcd /etc
lcd ok, local cwd=/etc
lftp tom@172.25.23.23:/> put issue
23 bytes transferred
lftp tom@172.25.23.23:/> ls
-rw-r--r--    1 0        0             779 Apr 16 14:30 fstab
-rw-------    1 502      502            23 Apr 16 14:32 issue
  • 对于上面定义的虚拟用户的指令都是和匿名用户的指令进行匹配,上面的这些指令同时对于所有的虚拟用户生效,因为所有的虚拟用户都被映射成为一个匿名用户vuser;
  • 实现虚拟用户权限的精准定义
  • 首先创建需要的几个文件
[root@server23 ~]# mkdir /etc/vsftpd/vusers_dir
[root@server23 ~]# cd /etc/vsftpd/vusers_dir
[root@server23 vusers_dir]# ls
[root@server23 vusers_dir]# touch tom 
[root@server23 vusers_dir]# touch jerry
[root@server23 vusers_dir]# vim tom 
[root@server23 vusers_dir]# cat tom > jerry 
[root@server23 vusers_dir]# vim jerry 
[root@server23 vusers_dir]# cat tom 
anon_upload_enable=YES
anon_mkdir_write_enable=YES
[root@server23 vusers_dir]# cat jerry 
anon_upload_enable=YES
anon_mkdir_write_enable=NO
  • 其次更改配置文件,添加指令
[root@server23 vusers_dir]# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_dir
  • 对于两个用户进行了不同的权限定义,接下来进程验证

这里写图片描述
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_36294875/article/details/79967671

基于动态VLAN方式下的802.1x域用户认证

  • 2011年10月09日 09:50
  • 3.77MB
  • 下载

Debian 5.0 下的 proftpd + mysql虚拟用户认证配置

  • 2011年03月18日 15:38
  • 151KB
  • 下载

用户认证总结

客户实施过程中,遇到通过LDAP认证登陆计算节点,密码登陆一直失败,通过一顿的查资料才解决问题。解决后才发现有更简单的方法,记录如下。三个配置文件登陆计算节点,查看一下三个配置文件,该配置文件涉及用户...
  • ztq157677114
  • ztq157677114
  • 2016-04-06 13:48:45
  • 415

Vsftpd使用虚拟用户登录调用mysql验证

Vsftpd使用虚拟用户登录调用mysql验证安装包:vsftpd,mariadb-server,mariadb-devel,pam-devel(此包如有安装有问题,可使用rpm命令安装) 1、 制...
  • wangye1989_0226
  • wangye1989_0226
  • 2017-06-07 09:24:26
  • 1370

Centos搭建mysql、php、nginx、ftp,shell脚本

Centos搭建mysql、php、nginx、ftp
  • xiuliyan6124
  • xiuliyan6124
  • 2017-09-27 15:47:21
  • 205

ftp服务器支持ipv4ipv6

  • 2017年01月03日 14:17
  • 1.35MB
  • 下载

FTP服务器和客户端纯C编写

  • 2011年11月11日 22:48
  • 761KB
  • 下载

基于SSL/TLS协议的FTP客户端和服务器端

  • 2009年06月15日 13:09
  • 178KB
  • 下载

mod_auth_mysql身份对apache认证

一、序言       现在很多网站对用户的访问权限进行了严格的限制,用户在访问某些资源时需要给出“用户名/口令"来确认自己的身份。目 前,使用最多的身份认证方法是将用户名、口令存放在一个数据库中,...
  • ncafei
  • ncafei
  • 2016-11-11 19:29:42
  • 968
收藏助手
不良信息举报
您举报文章:FTP服务器支持基于Mysql的用户认证方式
举报原因:
原因补充:

(最多只允许输入30个字)