TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!
  1. 首页
  2. 系统
  3. 正文

基于MySQL实现验证的vsftpd虚拟用户

2024年2月4日 1087点热度 0人点赞 0条评论

vsftp

利用 pam_mysql 模块可以实现基于MySQL的FTP虚拟用户功能

项目网站:https://sourceforge.net/projects/pam-mysql/

环境准备

本实验在两台主机上实现
一台做为FTP服务器,CentOS 7
一台做MySQL 数据库服务器

下载vsftp

[root@expr01 ~]# yum -y install vsftpd

下载数据库mariadb

[root@mysql-server ~]# yum -y install mariadb-server
[root@mysql-server ~]# systemctl enable --now mariadb.service
[root@mysql-server ~]# mysql
​
MariaDB [(none)]> select password("centos");
+-------------------------------------------+
| password("centos")                        |
+-------------------------------------------+
| *128977E278358FF80A246B5046F51043A2B1FCED |
+-------------------------------------------+
1 row in set (0.00 sec)

在数据库服务上配置数据库支持vsftpd服务

## 建立存储虚拟用户数据库和表
MariaDB [(none)]> CREATE DATABASE vsftpd;
MariaDB [(none)]>  USE vsftpd;
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
          );
## 添加虚拟用户,为了安全应该使用PASSWORD函数加密其密码后存储
MariaDB [vsftpd]> INSERT INTO users(name,password) values('ftp_stj',password('1q2w3e'));
MariaDB [vsftpd]> INSERT INTO users(name,password) values('ftp_stangj',password('1q2w3e4r'));
## 查看相应信息
MariaDB [vsftpd]> select * from vsftpd.users;
+----+------------+-------------------------------------------+
| id | name       | password                                  |
+----+------------+-------------------------------------------+
|  1 | ftp_stj    | *712B69033BB2C08B8E1243774687F3DE968DBBF4 |
|  2 | ftp_stangj | *DB469070DB0AD0CA0B93040D166D7FC4713D6961 |
+----+------------+-------------------------------------------+
2 rows in set (0.00 sec)
## 授权用户
MariaDB [(none)]> GRANT SELECT ON vsftpd.* TO vsftpd@'%' IDENTIFIED BY 'qawsed';
MariaDB [vsftpd]> FLUSH PRIVILEGES;

pam-mysql源码进行编译

[root@expr01 ~]# yum -y install vsftpd gcc gcc-c++ make mariadb-devel pam-devel
[root@expr01 ~]# cd /usr/local/src/
[root@expr01 src]# ls
pam_mysql-0.7RC1.tar.gz
[root@expr01 src]# tar xf pam_mysql-0.7RC1.tar.gz 
[root@expr01 src]# cd pam_mysql-0.7RC1/
[root@expr01 pam_mysql-0.7RC1]# ./configure --with-pam-mods-dir=/lib64/security
[root@expr01 pam_mysql-0.7RC1]# make install
[root@expr01 pam_mysql-0.7RC1]# ls -lt /lib64/security/pam_mysql.*
-rwxr-xr-x 1 root root    882 Feb  4 17:04 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141720 Feb  4 17:04 /lib64/security/pam_mysql.so

在FTP服务器上建立pam认证所需文件

[root@expr01 ~]# vi /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=qawsed host=192.168.139.32 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=magedu host=192.168.139.32 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

建立相应用户和修改vsftpd配置文件

[root@expr01 ~]# useradd -s /sbin/nologin -d /data/ftproot -r vuser
[root@expr01 ~]# mkdir -pv /data/ftproot/upload
[root@expr01 ~]# setfacl -m u:vuser:rwx /data/ftproot/upload
##确保/etc/vsftpd/vsftpd.conf中已经启用了以下选项
[root@expr01 ~]# vim /etc/vsftpd/vsftpd.conf
# 修改下面这一行信息,指向新的pam
pam_service_name=vsftpd.mysql
#添加下面两项
guest_enable=YES
guest_username=vuser
​
##启动vsftpd服务
[root@expr01 ~]# systemctl restart vsftpd

验证虚拟用户登录

[root@localhost ~]# ftp 192.168.139.31
Connected to 192.168.139.31 (192.168.139.31).
220 (vsFTPd 3.0.2)
Name (192.168.139.31:root): ftp_stj  # 用户ftp_stj
331 Please specify the password.   
Password:                            # 密码1q2w3e
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls                              # 显示文件信息
227 Entering Passive Mode (192,168,139,31,181,59).
150 Here comes the directory listing.
drwxrwxr-x    2 0        0               6 Feb 04 09:13 upload
226 Directory send OK.
​
[root@localhost ~]# ftp 192.168.139.31
Connected to 192.168.139.31 (192.168.139.31).
220 (vsFTPd 3.0.2)
Name (192.168.139.31:root): ftp_stangj  # 用户ftp_stangj
331 Please specify the password.
Password:                               # 密码1q2w3e4r
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> ls                                 # 显示文件信息
227 Entering Passive Mode (192,168,139,31,159,118).
150 Here comes the directory listing.
drwxrwxr-x    2 0        0               6 Feb 04 09:13 upload

实现不同虚拟用户有不同的权限

[root@expr01 ~]# vim /etc/vsftpd/vsftpd.conf
# 添加如下选项
user_config_dir=/etc/vsftpd/conf.d/
​
`创建自定义加载虚拟用户权限文件`
[root@expr01 ~]# mkdir /etc/vsftpd/conf.d/
[root@expr01 ~]# vim /etc/vsftpd/conf.d/ftp_stj
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#登录目录改变至指定的目录
#local_root=/data/ftproot/ftp_stj
​
[root@expr01 ~]# vim /etc/vsftpd/conf.d/ftp_stangj
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
#登录目录改变至指定的目录
#local_root=/data/ftproot/ftp_stangj

验证权限

  • 我这里验证一个虚拟用户即可

[root@localhost ~]# ftp 192.168.139.31
Connected to 192.168.139.31 (192.168.139.31).
220 (vsFTPd 3.0.2)
Name (192.168.139.31:root): ftp_stj         # 登录ftp_stj 
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 (192,168,139,31,163,133).
150 Here comes the directory listing.
drwxrwxr-x    2 0        0               6 Feb 04 09:13 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> put anaconda-ks.cfg                       # 上传文件
local: anaconda-ks.cfg remote: anaconda-ks.cfg
227 Entering Passive Mode (192,168,139,31,100,80).
150 Ok to send data.
226 Transfer complete.
1717 bytes sent in 0.000232 secs (7400.86 Kbytes/sec)
ftp> mkdir aaa1                                # 创建目录
257 "/upload/aaa1" created
ftp> ls
227 Entering Passive Mode (192,168,139,31,124,122).
150 Here comes the directory listing.
drwx------    2 998      996             6 Feb 04 13:33 aaa1
-rw-------    1 998      996          1717 Feb 04 13:30 anaconda-ks.cfg
标签: 暂无
最后更新:2024年2月4日

tanghao946

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • vsftp
    • 环境准备
    • 下载vsftp
    • 下载数据库mariadb
    • 在数据库服务上配置数据库支持vsftpd服务
    • pam-mysql源码进行编译
    • 在FTP服务器上建立pam认证所需文件
    • 建立相应用户和修改vsftpd配置文件
    • 验证虚拟用户登录
    • 实现不同虚拟用户有不同的权限
    • 验证权限

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号