首页 > 数据库 >实现基于MYSQL验证的vsftpd虚拟用户访问

实现基于MYSQL验证的vsftpd虚拟用户访问

时间:2023-10-07 15:26:05浏览次数:42  
标签:ftp data MYSQL vsftpd 虚拟 mysql root pam

 

#利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能
#项目网站:http://pam-mysql.sourceforge.net/
#说明:因为此项目年代久远不再更新,当前只支持CentOS 6,7,不支持CentOS 8
环境准备:
本实验在两台主机上实现
一台作为FTP服务器centos7
一台作为mariadb数据库服务器centos8

#在数据库服务器安装mariadb数据库
[root@mariadb ~]#yum install -y mariadb-server;systemctl enable --now mariadb

#在数据库服务器上配置数据库支持vsftpd服务
[root@mariadb ~]#mysql
MariaDB [(none)]> create database vsftpd;
Query OK, 1 row affected (0.000 sec)

MariaDB [(none)]> use vsftpd;
Database changed

MariaDB [vsftpd]> create table users(id int auto_increment not null primary key,name char(50) binary not null,password char(48) binary not null);
Query OK, 0 rows affected (0.003 sec)

MariaDB [vsftpd]> insert into users(name,password) values('ftp_tan',password('123456'));
Query OK, 1 row affected (0.001 sec)

MariaDB [vsftpd]> insert into users(name,password) values('ftp_liang',password('123456'));
Query OK, 1 row affected (0.001 sec)

MariaDB [vsftpd]> select * from users;
+----+-----------+-------------------------------------------+
| id | name | password |
+----+-----------+-------------------------------------------+
| 1 | ftp_tan | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 2 | ftp_liang | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+----+-----------+-------------------------------------------+
2 rows in set (0.000 sec)

#创建连接数据库的用户
MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'10.0.0.%' identified by '123456';
Query OK, 0 rows affected (0.000 sec)

MariaDB [vsftpd]> flush privileges;
Query OK, 0 rows affected (0.000 sec)

#在ftp服务器上安装vsftpd和pam_mysql的包
[root@ftp ~]# yum install -y vsftpd
#对于centos6,pam_mysql的包由epel源提供,对于centos7无对应的rpm包,需要手动编译安装
#当前版本的源码不支持centos8,使用中会提示如下错误
[root@centos8 ~]#tail -f /var/log/secure
Jan  2 10:20:31 centos8 vsftpd[15519]: PAM unable to
dlopen(/usr/lib64/security/pam_mysql.so): /usr/lib64/security/pam_mysql.so:
undefined symbol: make_scrambled_password

#centos7编译安装pam_mysql
[root@ftp ~]# yum install -y gcc gcc-c++ make mariadb-devel pam-devel
[root@ftp ~]#wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
[root@ftp ~]# tar xf pam_mysql-0.7RC1.tar.gz
[root@ftp ~]# cd pam_mysql-0.7RC1
[root@ftp pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security
[root@ftp pam_mysql-0.7RC1]# make install
[root@ftp pam_mysql-0.7RC1]# ll /lib64/security/pam_mysql.*
-rwxr-xr-x 1 root root 882 Nov 18 17:02 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141712 Nov 18 17:02 /lib64/security/pam_mysql.so

#在ftp服务器上建立pam认证所需要的文件
[root@ftp ~]# vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.150 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.150 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

#说明:配置参数参考pam_mysql-0.7RC1目录下的README文档
配置字段说明
auth 表示认证
account 验证账号密码正常使用
required 表示认证要通过
pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后
面为给此模块传递的参数
user=vsftpd为登录mysql的用户
passwd=magedu 登录mysql的的密码
host=mysqlserver mysql服务器的主机名或ip地址
db=vsftpd 指定连接msyql的数据库名称
table=users 指定连接数据库中的表名
usercolumn=name 当做用户名的字段
passwdcolumn=password 当做用户名字段的密码
crypt=2 密码的加密方式为mysql password()函数加密
crypt 加密方式:
0表示不加密
1表示crypt(3)加密
2表示使用mysql password()函数加密
3表示md5加密
4表示sha1加密

#建立相应用户和修改vsftpd配置文件
[root@ftp ~]# useradd -s /sbin/nologin -d /data/ftproot -r vuser
[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf
#添加下面两项
guest_enable=YES
guest_username=vuser
#修改下面一项,原系统用户无法登录
pam_service_name=vsftpd.mysql

#启动vsftpd服务
[root@ftp ~]# systemctl enable --now vsftpd

#在ftp服务器上配置虚拟用户具有不同的访问权限
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户
的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其
路径及名称即可
[root@ftp ~]#vim /etc/vsftpd/vsftpd.conf
#添加如下选项
user_config_dir=/etc/vsftpd/conf.d/

#创建所需要目录,并为虚拟用户提供配置文件
[root@ftp ~]#mkdir /etc/vsftpd/conf.d/
#配置虚拟用户的访问权限
#虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户tan具有上传文件的权限,可修改/etc/vsftpd/conf.d/ftp_tan文件,在里面添加如下选项并设置为YES即可,只读则设为NO
#注意:需确保对应的映射用户对于文件系统有写权限
anon_upload_enable={YES|NO}
anon_mkdir_write_enable={YES|NO}
anon_other_write_enable={YES|NO}
#登录目录改变至指定的目录
local_root=/data/ftproot2

[root@ftp ~]# cat /etc/vsftpd/conf.d/ftp_tan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
[root@ftp ~]# cat /etc/vsftpd/conf.d/ftp_liang
anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
local_root=/data/ftproot2

#ftp_tan用户还是访问根目录/data/ftproot,ftp服务放开了上传权限,再在文件系统放开vuser写权限
[root@ftp ~]#chmod 555 /data/ftproot
[root@ftp ~]# mkdir -pv /data/ftproot/upload
mkdir: created directory ‘/data’
mkdir: created directory ‘/data/ftproot’
mkdir: created directory ‘/data/ftproot/upload’
[root@ftp ~]#setfacl -m u:vuser:rwx /data/ftproot/upload
[root@ftp ~]#touch /data/ftproot/f1

#ftp_liang用户访问的ftp根目录该为了/data/ftproot2,需要去掉写权限,否则此用户登录失败
[root@ftp ~]# chmod 555 /data/ftproot2
[root@ftp ~]#touch /data/ftproot2/f2

#测试:使用ftp_tan用户上传文件成功,ftp_liang用户登录看到/data/ftproot2目录下的文件成功
[root@mariadb ~]#ftp 10.0.0.152
Connected to 10.0.0.152 (10.0.0.152).
220 (vsFTPd 3.0.2)
Name (10.0.0.152:root): ftp_tan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,0,0,152,184,151).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Nov 18 09:45 f1
drwxrwxr-x 2 0 0 6 Nov 18 09:12 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> send anaconda-ks.cfg
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (10,0,0,152,41,212).
150 Ok to send data.
226 Transfer complete.
1314 bytes sent in 0.000241 secs (5452.28 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (10,0,0,152,239,137).
150 Here comes the directory listing.
-rw------- 1 998 996 1314 Nov 18 09:54 anaconda-ks.cfg
226 Directory send OK.

[root@mariadb ~]#ftp 10.0.0.152
Connected to 10.0.0.152 (10.0.0.152).
220 (vsFTPd 3.0.2)
Name (10.0.0.152:root): ftp_liang
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls
227 Entering Passive Mode (10,0,0,152,142,203).
150 Here comes the directory listing.
-rw-r--r-- 1 0 0 0 Nov 18 10:16 f2
226 Directory send OK.
ftp>

标签:ftp,data,MYSQL,vsftpd,虚拟,mysql,root,pam
From: https://www.cnblogs.com/tanll/p/17746363.html

相关文章

  • ansible-playbook实现MySQL的二进制部署
     #安装mysql5.6[root@ansible~]#ls-l/data/ansible/files/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz-rw-r--r--1rootroot403177622Dec 413:05/data/ansible/files/mysql-5.6.46-linux-glibc2.12-x86_64.tar.gz[root@ansible~]#cat/data/ansible......
  • 【python笔记】虚拟环境
    1.虚拟环境的建立python-mvenv<虚拟环境名>#例如:python-mvenvmy_venv2.虚拟环境的激活与去激活激活cd到虚拟环境文件夹下的Scripts,在终端执行activate去激活cd到虚拟环境文件夹下的Scripts,在终端执行deactivate.bat3.在虚拟环境中下载依赖python-mpipin......
  • 搭建项目 虚拟环境的使用
       ......
  • MySQL innoDB 间隙锁产生的死锁问题
    背景线上经常偶发死锁问题,当时处理一张表,也没有联表处理,但是有两个mq入口,并且消息体存在一样的情况,频率还不是很低,这么一个背景,我非常容易怀疑到,两个消息同时近到这一个事务里面导致的,但是是偶发的,又模拟不出来什么场景会导致死锁,只能进行代码分析,问题还原的方式去排查问题。业......
  • 三台Centos7虚拟机部署kubernetes集群服务
     简介kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。部署centos7虚拟机安装Vmwareworkstation......
  • 服务器没有开放3306端口 远程访问MySQL数据库方法
    一、前言​当装有MySQL的服务器为了防止数据库被黑,提高安全性,把3306端口禁止掉,禁止对外访问,我之前写过一篇是借助跳板机的SSH隧道来访问实现安全,这种情况依然需要开放3306端口和使用一个额外的跳板机,比较麻烦,后来,突发奇想,直接使用MySQL所在服务器来做SSH隧道,并且使用localho......
  • 人事管理系统 SpringBoot2+MyBatis+MySQL5.7
    人事管理系统一、系统介绍本系统为人事管理系统,系统分为七大模块:绩效考核,招聘管理,档案管理,工资管理,考勤管理,培训管理,系统管理。可满足小企业日常办公。本系统最大特色是有强大和灵活的权限控制功能,所有菜单,按钮功能均可由管理通过配置来控制。系统默认有四个角色:管理员,财务专......
  • 就业管理系统 SpringBoot2+MyBatis+MySQL5.7
    就业管理系统一、系统介绍本系统为就业管理系统,主要围绕高校毕业生的毕业情况进行跟踪和分析,为学校领导对专业设置优化,为高校毕业生就业方向提供参考。系统分为六大模块:就业管理,招聘咨询,通告管理,学院管理,师生管理,系统管理。系统默认有三个角色:管理员,老师,学生用户管理员(admin......
  • Multisim 12.0-虚拟MOS管简单设置
    在软件中NMOS-FET使用需要设置参数,否则没作用简单的方法:其他用默认值,只要修改参数:M多重性导通关系M:10000Vgs:1VIds:100mAVgs:2VIds:400mAM:1000Vgs:1VIds:10mAVgs:2VIds:40mA关系大致如下:I=vvM*k......
  • windows下vscode连接linux(虚拟机)进行(伪)远程开发
    免责声明本文乃至本系列是对网络上传播的内容进行整理以梳理流程,且因为篇幅限制会精简内容,适合面向具有计算机类基础知识的人群,本文内容较为笼统,只有大体上的逻辑,具体的细节肯定是官网上写的准而全,望读者能从官网上获取最新的信息,而不是这一篇参考性流程开源声明本文章遵......