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

相关文章

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

IntelliJ IDEA 中配置 Spring MVC 环境的详细步骤及问题解决

《IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决》:本文主要介绍IntelliJIDEA中配置SpringMVC环境的详细步骤及问题解决,本文分步骤结合实例给大... 目录步骤 1:创建 Maven Web 项目步骤 2:添加 Spring MVC 依赖1、保存后执行2、将新的依赖

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

Pandas透视表(Pivot Table)的具体使用

《Pandas透视表(PivotTable)的具体使用》透视表用于在数据分析和处理过程中进行数据重塑和汇总,本文就来介绍一下Pandas透视表(PivotTable)的具体使用,感兴趣的可以了解一下... 目录前言什么是透视表?使用步骤1. 引入必要的库2. 读取数据3. 创建透视表4. 查看透视表总结前言

Python 交互式可视化的利器Bokeh的使用

《Python交互式可视化的利器Bokeh的使用》Bokeh是一个专注于Web端交互式数据可视化的Python库,本文主要介绍了Python交互式可视化的利器Bokeh的使用,具有一定的参考价值,感... 目录1. Bokeh 简介1.1 为什么选择 Bokeh1.2 安装与环境配置2. Bokeh 基础2

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊