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

相关文章

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

如何去写一手好SQL

MySQL性能 最大数据量 抛开数据量和并发数,谈性能都是耍流氓。MySQL没有限制单表最大记录数,它取决于操作系统对文件大小的限制。 《阿里巴巴Java开发手册》提出单表行数超过500万行或者单表容量超过2GB,才推荐分库分表。性能由综合因素决定,抛开业务复杂度,影响程度依次是硬件配置、MySQL配置、数据表设计、索引优化。500万这个值仅供参考,并非铁律。 博主曾经操作过超过4亿行数据

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传