mysql映射机制_vsftpd基于pam_mysql的虚拟用户机制

一、虚拟用户概述

vsftpd使用虚拟用户时,需要为所有的虚拟用户创建一个系统用户,因为无论vsftpd使用的是哪一种用户类型(匿名用户、系统用户、虚拟用户),最终都是要映射为操作系统上的一个用户,而每一个文件资源都有各自的权限,只有操作系统上的用户才能根据权限模型判断是否能够访问该文件资源。这里仅介绍vsftpd基于pam_mysql的虚拟用户机制的使用。

二、vsftpd基于pam_mysql的虚拟用户机制

1、编译安装pam_mysql

(1) 编译pam_mysql前要提供开发环境,并安装其依赖的程序包的开发包[root@ftp ~]# yum -y groupinstall "Development Tools" "Server Platform Development"

[root@ftp ~]# yum -y install pam-devel openssl-devel mariadb-devel

(2) 下载pam_mysql的源码压缩包

#在pam_mysql官网上下载其压缩包

3f13b391df06b9d96767579779b091de.png

(3) 解压缩后进行编译安装[root@ftp ~]# tar xf pam_mysql-0.7RC1.tar.gz

[root@ftp ~]# cd pam_mysql-0.7RC1/

[root@ftp pam_mysql-0.7RC1]#

[root@ftp pam_mysql-0.7RC1]# ./configure --with-mysql=/usr --with-openssl=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security

[root@ftp pam_mysql-0.7RC1]# make && make install

2、使用mysql创建用于存放用户账号密码的表

(1)启动mysql服务,并设置为开机自动启动[root@ftp ~]# systemctl start mariadb.service

[root@ftp ~]# systemctl enable mariadb.service

(2)创建数据库vsftpd和表users[root@ftp ~]# mysql

mysql> CREATE DATABASE vsftpd;

mysql> use vsftpd;

mysql> CREATE TABLE users (

id INT AUTO_INCREMENT NOT NULL PIRMARY KEY,

name CHAR(30) NOT NULL,

password CHAR(48) BINARY NOT NULL );

# mysql使用password()函数加密后的结果有48个字符

mysql> DESC users;

+----------+------------+------+-----+---------+----------------+

| Field    | Type       | Null | Key | Default | Extra          |

+----------+------------+------+-----+---------+----------------+

| id       | int(11)    | NO   | PRI | NULL    | auto_increment |

| name     | char(30)   | NO   |     | NULL    |                |

| password | binary(48) | NO   |     | NULL    |                |

+----------+------------+------+-----+---------+----------------+

(3)为表插入数据mysql> INSERT INTO usrs(name,password) VALUES ('tom',password('mageedu')),('jerry',password('mageedu.com'));

(4)授权mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'mageedu';

mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'mageedu';

mysql> FLUSH PRIVILEGES;

3、创建一个pam配置文件[root@ftp ~]# vim /etc/pam.d/vsftpd.mysql

auth required pam_mysql.so user=vsftpd passwd=mageedu host=localhost db=vsftpd table=users

usercolumn=name passwdcolumn=password crypt=2

account required pam_mysql.so user=vsftpd passwd=mageedu host=localhost db=vsftpd table=users

usercolumn=name passwdcolumn=password crypt=2

4、创建系统用户,作为所有虚拟用户的映射用户

[root@ftp ~]#  useradd -s /sbin/nologin -d /ftproot vuser

[root@ftp ~]# ll -d /ftproot/

drwx------. 4 vuser vuser 87 Jun  9 21:48 /ftproot/    # 组用户和其它用户是没有任何权限的

[root@ftp ~]# chmod go+rx /ftproot/    # 为组用户和其他用户添加读和执行权限

[root@ftp ~]# chmod -w /ftproot        # 映射用户vuser的家目录不能有写权限

[root@ftp ~]# mkdir /ftproot/{pub,upload}    # 如果要想有写权限,可在家目录下创建具有写权限的子目录

5、编辑vsftpd配置文件,修改相关配置

[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf

guest_enable=YES         # 是否允许来宾账号访问

guest_username=vuser         # 把所有来宾账号都映射为系统用户vuser

pam_service_name=vsftpd.mysql    # 修改对应的pam配置文件

6、启动服务

[root@ftp ~]# systemctl start vsftpd.service

[root@ftp ~]# ss -tnl | grep :21

LISTEN     0      32          :::21                      :::*

7、测试

(1)测试虚拟用户tom[root@ftp ~]# ftp 192.168.10.99

Connected to 192.168.10.99 (192.168.10.99).

220 (vsFTPd 3.0.2)

Name (192.168.10.99:root): tom    # 输入虚拟用户tom

331 Please specify the password.

Password:                           # 输入虚拟用户tom的密码

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp>

ftp> ls

227 Entering Passive Mode (192,168,10,99,223,134).

150 Here comes the directory listing.

drwxr-xr-x    2 0        0               6 Jun 09 13:35 pub

drwxr-xr-x    2 1000     0              64 Jun 09 14:25 upload

226 Directory send OK.

(2)测试虚拟用户jerry[root@ftp ~]# ftp 192.168.10.99

Connected to 192.168.10.99 (192.168.10.99).

220 (vsFTPd 3.0.2)

Name (192.168.10.99:root): jerry    # 输入虚拟用户jerry

331 Please specify the password.

Password:                             # 输入虚拟用户jerry的密码

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> ls

227 Entering Passive Mode (192,168,10,99,251,69).

150 Here comes the directory listing.

drwxr-xr-x    2 0        0               6 Jun 09 13:35 pub

drwxr-xr-x    2 1000     0              64 Jun 09 14:25 upload

226 Directory send OK.

测试成功。

三、其它需求

1、如何让虚拟用户具有上传文件的权限?

(1)确保vsftpd配置中匿名用户具有写权限[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf

anon_upload_enable=YES        # 这一项需要启用,因为虚拟用户也是匿名用户

(2)确保虚拟用户的系统映射用户vuer对文件系统具有写权限[root@ftp ~]# chown vuser /ftproot/upload

(3)测试

#测试虚拟用户tom[root@ftp ~]# ftp 192.168.10.99

Connected to 192.168.10.99 (192.168.10.99).

220 (vsFTPd 3.0.2)

Name (192.168.10.99:root): tom     # 输入虚拟用户tom

331 Please specify the password.

Password:                            # 输入虚拟用户tom的密码

ftp>

ftp> cd upload    # 切换至有用户具有写权限的目录

ftp> lcd /etc     # 外部shell切换至/etc目录

ftp> put fstab    # 上传文件fstab

local: fstab remote: fstab

227 Entering Passive Mode (192,168,10,99,213,217).

150 Ok to send data.

226 Transfer complete.    # 传输完成

541 bytes sent in 0.000189 secs (2862.43 Kbytes/sec)

ftp> ls

-rw-------    1 1000     1000          541 Jun 09 15:08 fstab

226 Directory send OK.

#测试虚拟用户jerry[root@ftp ~]# ftp 192.168.10.99

Connected to 192.168.10.99 (192.168.10.99).

220 (vsFTPd 3.0.2)

Name (192.168.10.99:root): jerry     # 输入虚拟用户jerry

331 Please specify the password.

Password:                            # 输入虚拟用户jerry的密码

ftp>

ftp> cd upload    # 切换至有用户具有写权限的目录

ftp> lcd /etc     # 外部shell切换至/etc目录

ftp> put issue    # 上传文件issue

local: issue remote: issue

227 Entering Passive Mode (192,168,10,99,169,197).

150 Ok to send data.

226 Transfer complete.    # 传输完成

23 bytes sent in 5.8e-05 secs (396.55 Kbytes/sec)

ftp> ls

227 Entering Passive Mode (192,168,10,99,144,240).

150 Here comes the directory listing.

-rw-------    1 1000     1000          541 Jun 09 15:08 fstab

-rw-------    1 1000     1000           23 Jun 09 15:14 issue

226 Directory send OK.

测试成功。

2、虚拟用户tom和jerry都映射为系统上的一个用户vuser,能够设置tom和jerry的权限不一致,例如设置为tom能够上传文件,而jerry不能上传文件?

1、分别为每个虚拟用户添加单独一个配置文件

#vsftpd支持每个虚拟用户单独使用一个配置文件,并且配置文件必须和用户名相同[root@ftp ~]# mkdir /etc/vsftpd/vuser.conf.d

[root@ftp ~]# cd /etc/vsftpd/vuser.conf.d/

[root@ftp vuser.conf.d]# vim tom

anon_upload_enable=YES    # 允许tom上传文件

[root@ftp vuser.conf.d]# vim jerry

anon_upload_enable=NO    # 不允许jerry上传文件

2、编辑主配置文件/etc/vsftpd/vsftpd.conf

(1)设置不允许匿名用户上传[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf

#anon_upload_enable=YES    # 注释掉主配置文件中的该行配置

(2)明确设置加载vusers.conf.d目录中的配置文件[root@ftp ~]# vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers.conf.d

3、重启vsftpd服务[root@ftp ~]# systemctl restart vsftpd.service

4、测试

#预期虚拟用户tom能够上传文件,而jerry则不能上传文件

#测试虚拟用户tom[root@ftp ~]# ftp 192.168.10.99

Connected to 192.168.10.99 (192.168.10.99).

220 (vsFTPd 3.0.2)

Name (192.168.10.99:root): tom    # 输入虚拟用户tom

331 Please specify the password.

Password:                         # 输入虚拟用户tom的密码

ftp>

ftp> cd upload

ftp> lcd /etc/

ftp> put grub2.cfg    # 上传文件grub2.cfg

local: grub2.cfg remote: grub2.cfg

227 Entering Passive Mode (192,168,10,99,220,164).

150 Ok to send data.

226 Transfer complete.    # 传输成功

4209 bytes sent in 0.000162 secs (25981.48 Kbytes/sec)

#测试虚拟用户jerry[root@ftp ~]# ftp 192.168.10.99

Connected to 192.168.10.99 (192.168.10.99).

220 (vsFTPd 3.0.2)

Name (192.168.10.99:root): jerry    # 输入虚拟用户jerry

331 Please specify the password.

Password:                           # 输入虚拟用户jerry的密码

ftp>

ftp> cd upload

ftp> lcd /etc/

ftp> put motd    # 上传文件motd

local: motd remote: motd

227 Entering Passive Mode (192,168,10,99,188,33).

550 Permission denied.    # 权限被拒绝!

测试成功。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值