vsftpd使用mysql完成用户验证(解决/var/lib/mysql/mysql.sock)

2024-08-24 06:38

本文主要是介绍vsftpd使用mysql完成用户验证(解决/var/lib/mysql/mysql.sock),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

下面是我对vsftpd如何使用mysql完成用户验证的学习总结,不周之处,希望各位不吝赐教。

vsftpd的用户验证机制分为虚拟用户、系统用户(本地用户)、匿名用户。因为涉及到读写磁盘,所以用户管理机制至关重要。

系统用户也叫本地用户,无非就是操作系统自己的用户,vsftp可以使用服务器上现有的用户来登录。有关的配置项大都带有local字样,意为“本地用户”。

匿名用户就是一个众人皆知账密的用户,它映射为系统上一个名字叫ftp的用户,而后有一些关于anonymous的专用配置为之服务。

虚拟用户是说,vsftp自己的用户机制,但是它也映射为系统上的某个用户,而这个系统用户不是用于真正登录系统的,所以所谓“虚拟”大概就是相对于操作系统而言。

而vsftpd的虚拟用户又可以有用户文件和mysql两种方式,其中用户文件方式需要hash格式存储,不是记录的重点,以下主要记录vsftpd+mysql方式实现vsftp登录。

1、准备工作

操作系统是centos6.10,mysql我使用的是之前通用二进制包安装的mariadb10.5.13,算是比较新的版本。

安装vsftpd过程省略。

安装依赖:pam_mysql,有关pam概念在此先不深究,重点放在ftp上。

2、mysql数据库建立

就是在mysql里面建立一个存储用户信息的表,以后登录vsftp时,从这个表里查询实现验证。因为我做开发多年,所以数据库部分按照习惯随便做就可以了。我只说结果。

我建立的:库vsftpdb,表users(fID,fName,fPwd),其中fID是主键,我使用了自动生成uuid(guid)。fPwd我使用了password函数加密。这些都是用于登录vsftp用户的信息。跟mysql无关,只是利用mysql存储和查询。

授权方面:授权一个vsftpd账号用于登录mysql。我只授权给它查询权限。这是用于登录数据库的mysql用户。实际上mysql里有个库名为:mysql,库里面有个表名为:user,表里面存的就是用于登录mysql的用户信息。

代码贴出来给初学数据库的朋友参考。

create database vsftpdb;use vsftpdb;create table users (fID varchar(36) NOT NULL DEFAULT uuid() PRIMARY KEY,fName varchar(20),fPwd varchar(50)
);insert into users (fName,fPwd) values 
('tom',password('123')),
('jerry',password('456')),
('mike',password('789'));grant select on vsftpdb.* to 'vsftpd'@'localhost' identified by 'db_password';
grant select on vsftpdb.* to 'vsftpd'@'127.0.0.1' identified by 'db_password';flush privileges;

3、pam_mysql

新建一个文件/etc/pam.d/vsftpd.mysql,也可以直接改/etc/pam.d/vsftpd。里面添加:

auth    required        pam_mysql.so    user=vsftpd passwd=db_password host=/usr/local/mysql/mariadb.sock db=vsftpdb table=users usercolumn=fName passwdcolumn=fPwd crypt=2
account required        pam_mysql.so    user=vsftpd passwd=db_password host=/usr/local/mysql/mariadb.sock db=vsftpdb table=users usercolumn=fName passwdcolumn=fPwd crypt=2

其中host我使用了我安装mariadb的sock路径,也可以使用127.0.0.1,但是使用localhost的话,无法登录。查看日志/var/log/secure能看到错误信息:

vsftpd[3891]: pam_mysql - MySQL error (Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2))

我现在一看到有关mysql.sock的错误信息,立刻就知道如何解决。所以才有了上面的方式。

我查了一下有关pam的文件,并不能找到'/var/lib/mysql/mysql.sock'这个路径的来历。在编译安装lamp的时候,我知道mariadb通用二进制包安装以后,默认的/tmp/mysql.sock其实最终是安装目录下的bin/mariadb_config --socket这个命令生成的。所以系统自带的/usr/bin/mysql_config --socket默认路径也一定是/var/lib/mysql/mysql.sock。我尝试用mariadb_config替代系统自带的mysql_config并不能影响pam_mysql的这个提示路径,所以我认为,这是pam_mysql写死的东西,因此就不深究了。

有关上面pam配置文件内容的格式,可以参考man pam.conf,也可以:

[root@192 ~]# rpm -ql pam_mysql
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7
/usr/share/doc/pam_mysql-0.7/COPYING
/usr/share/doc/pam_mysql-0.7/CREDITS
/usr/share/doc/pam_mysql-0.7/ChangeLog
/usr/share/doc/pam_mysql-0.7/NEWS
/usr/share/doc/pam_mysql-0.7/README
[root@192 ~]# less /usr/share/doc/pam_mysql-0.7/README

里面内容挺多的,不一一列举,总之看了就会用。

4、建立一个虚拟系统用户

useradd -s /sbin/nologin -d /var/ftproot virtual_user
chmod go+rx /var/ftproot

5、修改vsftpd配置文件,/etc/vsftpd/vsftpd.conf

anonymous_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES

实际上我就没怎么改,默认就差不多。

添加:

guest_enable=YES
guest_username=virtual_user(跟上一步创建那个用户一致)

修改:

pam_service_name=vsftpd.mysql(因为我之前创建了这个文件,一致就行了。)

然后重载一下配置文件就可以了。

service vsftpd reload

在windows下登录vsftp成功,就表示完成了。

d76ca33d45d74a5a934d7f0bfdb38834.png

 建议失败的时候,看日志文件:

/var/log/message

/var/log/secure

本文完。

 

 

这篇关于vsftpd使用mysql完成用户验证(解决/var/lib/mysql/mysql.sock)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101729

相关文章

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

Mysql如何解决死锁问题

《Mysql如何解决死锁问题》:本文主要介绍Mysql如何解决死锁问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录【一】mysql中锁分类和加锁情况【1】按锁的粒度分类全局锁表级锁行级锁【2】按锁的模式分类【二】加锁方式的影响因素【三】Mysql的死锁情况【1

使用Python实现图像LBP特征提取的操作方法

《使用Python实现图像LBP特征提取的操作方法》LBP特征叫做局部二值模式,常用于纹理特征提取,并在纹理分类中具有较强的区分能力,本文给大家介绍了如何使用Python实现图像LBP特征提取的操作方... 目录一、LBP特征介绍二、LBP特征描述三、一些改进版本的LBP1.圆形LBP算子2.旋转不变的LB

Maven的使用和配置国内源的保姆级教程

《Maven的使用和配置国内源的保姆级教程》Maven是⼀个项目管理工具,基于POM(ProjectObjectModel,项目对象模型)的概念,Maven可以通过一小段描述信息来管理项目的构建,报告... 目录1. 什么是Maven?2.创建⼀个Maven项目3.Maven 核心功能4.使用Maven H

Python中__init__方法使用的深度解析

《Python中__init__方法使用的深度解析》在Python的面向对象编程(OOP)体系中,__init__方法如同建造房屋时的奠基仪式——它定义了对象诞生时的初始状态,下面我们就来深入了解下_... 目录一、__init__的基因图谱二、初始化过程的魔法时刻继承链中的初始化顺序self参数的奥秘默认

SpringBoot内嵌Tomcat临时目录问题及解决

《SpringBoot内嵌Tomcat临时目录问题及解决》:本文主要介绍SpringBoot内嵌Tomcat临时目录问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录SprinjavascriptgBoot内嵌Tomcat临时目录问题1.背景2.方案3.代码中配置t

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr

SQL BETWEEN 的常见用法小结

《SQLBETWEEN的常见用法小结》BETWEEN操作符是SQL中非常有用的工具,它允许你快速选取某个范围内的值,本文给大家介绍SQLBETWEEN的常见用法,感兴趣的朋友一起看看吧... 在SQL中,BETWEEN是一个操作符,用于选取介于两个值之间的数据。它包含这两个边界值。BETWEEN操作符常用

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin