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

前言

ftp相信各位都是不陌生的,在我们使用ftp的过程中常常会因为各种原因需要给不同的用户配置不同的设置和不同的访问权限,那么我们就用到了虚拟用户。既然有专门针对ftp的服务的用户,那么就得有地方来存储这些账号,所以我们可以使用文件存储或者mysql数据库来存储账号信息,这篇博客我就实验利用mysql来验证ftp的用户。


操作

准备

两台CentOS,一台6.9作为ftp服务器一台7.3作为mariadb服务器。

第一步,安装各自机器的服务

[root@mariadb ~]# yum install mariadb-server -y

mariadb服务器安装

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

ftp服务器安装

服务装好了别忘了启动服务和设置开机启动

注意:整个过程必须注意防火墙和selinux的状态


第二步,在ftp服务器上安装pam_mysql模块

为什么是在ftp服务器上装pam_mysql模块而不是在mariadb上呢?原因是ftp要利用mariadb来存储账号信息的话那么ftp就是mariadb的客户端。

下面我演示编译安装pam_mysql,这个模块在6的epel源里有但是在7中是没有的,虽然我用6来做ftp服务器,但是也是演示编译安装。

[root@ftp ~]# yum -y groupinstall development tools #安装开发包组
[root@ftp ~]# yum -y install mysql #安装mysql客户端
[root@ftp ~]# tar -xf pam_mysql-0.7RC1.tar.gz #解压包
[root@ftp ~]# cd pam_mysql-0.7RC1/ #进入目录
[root@ftp pam_mysql-0.7RC1]# yum -y install pam-devel  mariadb-devel#执行下一步前需要装开发工具,如果装了就忽略
[root@ftp pam_mysql-0.7RC1]# ./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security #执行脚本
[root@ftp ~]# make && make install #编译安装

如上操作便将pam_mysql装好。


第三步,配置数据库

ftp服务器那边的软件已经装好了,现在去配置数据库。

[root@mariadb ~]# mysql_secure_installation #执行Mysql自带安全脚本设置基本信息
[root@mariadb ~]# mysql -uroot -p #用root登陆数据库
MariaDB [(none)]> create database ftpusers; #创建名为ftpusers的数据库
MariaDB [(none)]> grant all on ftpusers.* to 'ftp'@'%' identified by 'ftp'; #授权并创建一个名为ftp的远程账号并设置密码为ftp
MariaDB [(none)]> use ftpusers; #进入数据库
MariaDB [ftpusers]> create table users(id int unsigned auto_increment not null primary key,name char(50) binary not null,password char(48) binary not null); #创建表
MariaDB [ftpusers]> insert into users(name,password) values('user1',password('user1')); #添加用户信息user1
MariaDB [ftpusers]> insert into users(name,password) values('user2',password('user2')); #添加用户信息user2

到这里数据库这边也基本配置完毕,那么现在要回到ftp服务器配置连接了。


第四步,配置ftp服务器

[root@ftp ~]# vim /etc/pam.d/vsftpd.mysql #创建pam配置文件
写入下面两行
auth required pam_mysql.so user=ftp passwd=ftp host=192.168.179.142 db=ftpusers table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=ftp passwd=ftp host=192.168.179.142 db=ftpusers table=users usercolumn=name passwdcolumn=password crypt=2
[root@ftp ftp]# cd /var/ftp #进入ftp的家目录
[root@ftp ftp]# tree
.
├── pub
├── user1
│   └── user1.txt
└── user2
    └── user2.txt

3 directories, 2 files
[root@ftp ftp]#       #创建如上所示的路径和文件方便之后测试
[root@ftp ftp]# vim /etc/vsftpd/vsftpd.conf #打开ftp配置文件
添加如下四行
anonymous_enable=YES
guest_enable=YES
guest_username=ftp
pam_service_name=vsftpd.mysql
[root@ftp ftp]# service vsftpd restart #重启ftp服务

ftp服务器通讯设置基本设置完毕,下面设置访问控制

[root@ftp ftp]# mkdir /etc/vsftpd/user_conf #创建一个存放用户控制配置文件的目录
[root@ftp ftp]# cd /etc/vsftpd/user_conf #移动到该目录
[root@ftp user_conf]# vim user1 #创建user1的配置文件
写入
local_root=/var/ftp/user1   #设置登陆后的根目录
[root@ftp user_conf]# vim user2
写入
local_root=/var/ftp/user2
[root@ftp user_conf]# vim /etc/vsftpd/vsftpd.conf #打开ftp主配置文件
最后加上一句
user_config_dir=/etc/vsftpd/user_conf
[root@ftp user_conf]# service vsftpd restart #重启ftp服务

到这里就基本设置完成了。


第五步,测试

既然所有的配置都配好了,那么开始测试一下吧,随便找一台其他的机器也可以直接用mariadb那台机器来做测试,我这里是用另外一台机器测试的。

[root@mini7 ~]# yum -y install ftp #在第三台机器上安装ftp客户端
[root@mini7 ~]# ftp 192.168.179.136 #登陆ftp服务器
Connected to 192.168.179.136 (192.168.179.136).
220 (vsFTPd 2.2.2)
Name (192.168.179.136:root): user1
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,179,136,110,140).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Aug 11 07:45 user1.txt
226 Directory send OK.
ftp> 
#注意这里的文件,还记得之前创建的文件吗?显示的是user1.txt说明登陆路径设置成功了,那么再试试user2吧。
[root@mini7 ~]# ftp 192.168.179.136
Connected to 192.168.179.136 (192.168.179.136).
220 (vsFTPd 2.2.2)
Name (192.168.179.136:root): user2
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,179,136,127,51).
150 Here comes the directory listing.
-rw-r--r--    1 0        0               0 Aug 11 07:45 user2.txt
226 Directory send OK.
ftp> 

如上所示,这样的话就配置成功了。


最后说一句

这篇博客也没什么可说的,都是一个练习实验,为了熟悉不生疏就得多练。逆水行舟不进则退。