mysql数据库结合pam_mysql模块实现vsftpd虚拟用户

mysql数据库结合pam_mysql模块实现vsftpd虚拟用户登录

最近开始学mysql,自己做一个小实验,来个总结,比较容易理解,没什么太多理论性的东西。

一、实验环境的准备

1. 先下载需要用到的软件和依赖包

[[email protected] ~]# yum -y install mariadb-server mariadb-devel pam-devel gcc-c++ vsftpd

2. 安装pam_mysql模块(Plugable Authentication Module 插件式认证模块)

[[email protected] ~]# tar zxf pam_mysql-0.7RC1.tar.gz
[[email protected] ~]# cd pam_mysql-0.7RC1
[[email protected] pam_mysql-0.7RC1]# ./configure --with-mysql=/usr --with-openssl --with-pam-mods-dir=/lib/pam_mysql/

[[email protected] pam_mysql-0.7RC1]# make

[[email protected] pam_mysql-0.7RC1]# make install

3. 启动相关服务

[[email protected] ~]# systemctl start mariadb
[[email protected] ~]# systemctl start vsftpd
[[email protected] ~]# systemctl enable mariadb
[[email protected] ~]# systemctl enable vsftpd

4.数据库安全设置

[[email protected] ~]# mysql_secure_installation

Set root password? [Y/n] Y

Remove anonymous users? [Y/n] Y

Disallow root login remotely? [Y/n] Y

Remove test database and access to it? [Y/n] Y

Reload privilege tables now? [Y/n] Y

二、创建虚拟用户

1.创建数据库和表(用于存储虚拟用户的信息)

[[email protected] ~]# mysql -u root -p
Enter password:

MariaDB [(none)]> create database testdb;       #创建测试数据库

MariaDB [(none)]> grant select on testdb.* to [email protected] identified by ‘linux‘;   #创建用户

MariaDB [(none)]> flush privileges;

MariaDB [(none)]> use testdb;
Database changed
MariaDB [testdb]> create table users(id int AUTO_INCREMENT NOT NULL,name char(20) binary NOT NULL,password char(20) binary NOT NULL,primary key(id));    #创建存储用户的表

2.添加虚拟用户

MariaDB [testdb]> insert into users(name,password) values(‘tom‘,‘linux‘);    #创建用户

MariaDB [testdb]> insert into users(name,password) values(‘sam‘,‘linux‘);    #创建用户

MariaDB [testdb]> flush privileges;

三、配置vsftp服务

1.创建pam认证文件

[r[email protected] ~]# cat /etc/pam.d/vsftpd.mysql
auth required /lib/pam_mysql/pam_mysql.so user=linos passwd=linux host=localhost db=testdb table=users usercolumn=name passwdcolumn=password crypt=0
account required /lib/pam_mysql/pam_mysql.so user=linos passwd=linux host=localhost db=testdb table=users usercolumn=name passwdcolumn=password crypt=0

2.修改vsftp配置文件,主要需要修改下面的配置

anonymous_enable=NO     #不允许匿名用户登录
local_enable=YES       #允许系统用户登录
write_enable=YES      #允许系统用户有写权限
anon_upload_enable=NO     #不允许匿名用户上传文件
anon_mkdir_write_enable=NO    #不允许匿名用户创建目录
chroot_local_user=YES     #默认情况下用系统用户登录ftp之后,用户可以cd到任何目录,这样会有一定的安全隐患,启用这个选项可以把用户禁锢在自己的家目录

guest_enable=YES    #启用这个选项可以开启非匿名用户重映射为系统用户的功能
guest_username=virtuser    #映射的系统用户
allow_writeable_chroot=YES    #从2.3.5版本之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。 要修复这个错误,可以用命令chmod a-w /home/username去除用户主目录的写权限,或者你可以在vsftpd的配置文件中增加下列一项:allow_writeable_chroot=YES
pam_service_name=vsftpd.mysql    #指定插件pam模块的配置文件

四、验证

1.重启服务

[[email protected] ~]# systemctl restart mariadb
[[email protected] ~]# systemctl restart vsftpd

2.添加虚拟用户映射到的系统用户

[[email protected] ~]# useradd -s /sbin/nologin virtuser    #指定shell为/sbin/nologin,禁止用户登录系统

3.登录虚拟用户验证

4.验证用户映射

[[email protected] virtuser]# pwd
/home/virtuser
[[email protected] virtuser]# mkdir pub
[[email protected] virtuser]# touch pub/test  #virtuser家目录下创建test文件,然后用sam用户登录ftp,可以看到映射到了virtuser用户的家目录

5.配置授权权限

有时候我们需要针对不同的虚拟用户设置不同的权限

[[email protected] ~]# tail -1 /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/users_permission/
[[email protected] ~]# mkdir /etc/vsftpd/users_permission/
[[email protected] ~]# cd /etc/vsftpd/users_permission/
[[email protected] users_permission]# echo #anon_upload_enable=YES >> sam

[[email protected] home]# chmod -R 777 virtuser/

在启用匿名用户上传权限之前可以看到是禁止上传的,使用sam用户

开启匿名用户上传功能,使用sam用户上传一个文件

其他的权限可以使用同样的方式赋予给用户。

如有纰漏,欢迎指正。

时间: 2024-10-11 01:50:27

mysql数据库结合pam_mysql模块实现vsftpd虚拟用户的相关文章

实现基于mysql验证的vsftpd虚拟用户 (centos6)

实现基于mysql验证的vsftpd虚拟用户 (centos6) 说明:本实验在两台Cento主机上实现,一台作为FTP服务器,一台作为数据库服务器 FTP服务器ip:172.16.250.90 Mysql服务器ip:172.16.252.16 一.安装ftp服务器安装包 yum install vsftpd pam_mysql 二.数据库服务器创建虚拟用户帐号   1.建立虚拟用户数据库      mysql> create database vsftpd;     mysql> show 

FTP服务学习笔记之基于MySQL+PAM的vsftpd虚拟用户

基于mysql+PAM的vsftpd虚拟用户配置 一.实验说明 操作系统:Redhat5.8_X64bit 实验平台:VMware Workstation 所需要的软件包:pam_mysql-0.7RC1.tar.gz 二.安装所需要程序 1.事先安装好开发环境和mysql数据库 # yum -y groupinstall "Development Tools" "Development Libraries" #yum -y install mysql-server

Python连接MySQL数据库之pymysql模块使用

Python连接MySQL数据库之pymysql模块使用 Python3连接MySQL PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb. Django中也可以使用PyMySQL连接MySQL数据库. PyMySQL安装 pip install pymysql 连接数据库 注意事项 在进行本文以下内容之前需要注意: 你有一个MySQL数据库,并且已经启动. 你有可以连接该数据库的用户名和密码 你有一个有权限操作的datab

实现验证的vsftpd虚拟用户

实现基于文件验证的vsftpd虚拟用户--(一台) 一.创建用户数据库文件 vim /etc/vsftpd/vuser cd /etc/vsftpd/ db_load -T -t hash -f vusers.txt vusers.db //利用文本生成虚拟用户的数据库文件 chmod 600 vusers.db //实现基于文件验证的vsftpd虚拟用户 二.创建用户和访问FTP目录 useradd -d /var/ftproot -s /sbin/nologin vuser chmod +r

FTP服务-实现vsftpd虚拟用户

前几篇介绍了基础,这篇将具体实现几个案例 实现基于文件验证的vsftpd虚拟用户,每个用户独立一个文件夹 1.创建用户数据库文件 vim /etc/vsftpd/vusers.txt qq centos momo centos 备注:文件内容格式为奇数行为用户名,偶数行为密码 2.设置权限与编译此文件 cd /etc/vsftpd/ db_load -T -t hash -f vusers.txt vusers.db ##编译文件 chmod 600 vusers.db 备注:修改权限是为了安全

VSFTPD虚拟用户实现

VSFTPD虚拟用户 所有的虚拟用户会统一映射为一个指定的系统帐号:访问共享位置即为此系统帐号的家目录各虚拟用户可赋予不同的访问权限,通过匿名用户的权限控制参数进行指定. 1.创建虚拟用户的帐号密码数据库文件     a.创建帐号密码文件 格式:奇数行为帐号,偶数行为密码 [[email protected]~]# vim /etc/vsftpd/vusers.list test1     #用户 123456   #密码 test2 123456 test3 123456 b.将该文件转换为二

VSFTPD虚拟用户实战配置

FTP是文件传输协议,正是由于这种协议使得主机间可以共享文件. FTP 使用TCP生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输. vsftpd是一款在LINUX发行版中最主流的FTP服务器程序:特点是小巧轻快,安全易用:能让其自身特点得发发挥和掌握.如果使用系统用户登录FTP,是比较危险的,所以我们主要采用vsftpd虚拟用户登录FTP服务器进行常见的操作,当然配置就相对复杂一点.(centos7安装) 1.首先安装FTP以及虚拟用户需要用到的软件及认证模块 yu

Vsftpd虚拟用户配制安装

安装vsftpd yum  install    vsftpd*   -y 查看vsftpd安装后的配置文件路径.启动Vsftpd服务及查看进程是否启动 rpm  -ql     vsftpd|more systemctl  restart   vsftpd.service ps   -ef |grep  vsftpd 1.安装Vsftpd虚拟用户需用到的软件及认证模块: yum  install   pam  libdb-utils  libdb   --skip-broken  -y 2.创

vsftpd虚拟用户整理

Vsftpd虚拟用户的配置 第一步.安装 # wget http://docs.linuxtone.org/soft/lemp/CentOS-Base.repo # yum clean all # yum -y install vsftpd # yum -y install db4-utils 第二步.建立虚拟用户 #vim /home/ftpusr.txt 1.  user1 2.  password1 3.  user2 4.  password2 5.  user3 6.  passwor