Linux-实现基于mysql验证的vsftpd虚拟用户

实验环境

centos7     10.0.0.17     ftp-server

centos7     10.0.0.37     mysql-server

1、mysql-server配置操作

1.1 安装数据库

MySQL8.0由于取消了PASSWORD()函数不支持,因此选择mariadb

[root@mysql-server ~]#yum -y install mariadb-server
[root@mysql-server ~]#systemctl enable --now mariadb.service

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

MariaDB [(none)]> create database vsftpd;              #创建数据库
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> use vsftpd;
Database changed
MariaDB [vsftpd]> create table users(                   #创建表,字段name存放用户,password存放密码
    -> 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.00 sec)
MariaDB [vsftpd]> insert into users(name,password) values('li',password('123456'));    添加虚拟用户和密码
Query OK, 1 row affected (0.00 sec)

MariaDB [vsftpd]> insert into users(name,password) values('yan',password('654321'));
Query OK, 1 row affected (0.00 sec)

MariaDB [vsftpd]> select * from users;
+----+------+-------------------------------------------+
| id | name | password                                  |
+----+------+-------------------------------------------+
|  1 | li   | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
|  2 | yan  | *2A032F7C5BA932872F0F045E0CF6B53CF702F2C5 |
+----+------+-------------------------------------------+
2 rows in set (0.00 sec)
MariaDB [vsftpd]> grant select on vsftpd.* to vsftpd@'10.0.0.%'  identified by '123456';  创建连接的数据库用户
Query OK, 0 rows affected (0.00 sec)

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

2、ftp-server配置

2.1 centos7上pam_mysql无对应的rpm包,需手动编译安装

安装vsftpd   编译安装相关包
[root@ftp-server ~]#yum -y vsftpd install gcc gcc-c++ make mariadb-devel pam-devel

2.2 下载pam_mysql源码包

建议window下载好,上传到虚拟机

[root@ftp-server ~]#wget https://sourceforge.net/projects/pam-mysql/files/latest/download

2.3 文件解析压缩

[root@ftp-server ~]#ls
anaconda-ks.cfg  pam_mysql-0.7RC1.tar.gz
[root@ftp-server ~]#tar xf pam_mysql-0.7RC1.tar.gz 

2.4 编译模块

[root@ftp-server ~]#cd pam_mysql-0.7RC1
[root@ftp-server ~/pam_mysql-0.7RC1]#ls
acinclude.m4  config.guess  configure     CREDITS     ltmain.sh    missing        pam_mysql.c        pkg.m4
aclocal.m4    config.h.in   configure.in  INSTALL     Makefile.am  mkinstalldirs  pam_mysql.spec     README
ChangeLog     config.sub    COPYING       install-sh  Makefile.in  NEWS           pam_mysql.spec.in  stamp-h.in
[root@ftp-server ~/pam_mysql-0.7RC1]#./configure --with-pam-mods-dir=/lib64/security

2.5 安装

[root@ftp-server ~/pam_mysql-0.7RC1]#echo $?
0
[root@ftp-server ~/pam_mysql-0.7RC1]#make install

[root@ftp-server ~/pam_mysql-0.7RC1]#ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root 882 May 28 10:38 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141712 May 28 10:38 /lib64/security/pam_mysql.so

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

添加以下两行

[root@ftp-server ~]#vim /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.37 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.37 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
crypt加密方式:
0表示不加密
1表示crypt(3)加密
2表示使用mysql password()函数加密
3表示md5加密
4表示sha1加密

配置字段说明
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()函数加密
配置字段说明

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

[root@ftp-server ~]#useradd -s /sbim/nologin -d /data/ftproot -r vuser    #建立虚拟用户映射的系统用户
[root@ftp-server ~]#mkdir -pv /data/ftproot/upload                        #建立对应的目录
mkdir: created directory ‘/data/ftproot’
mkdir: created directory ‘/data/ftproot/upload’
[root@ftp-server ~]#setfacl -m u:vuser:rwx /data/ftproot/upload           #给予vuser用户特殊权限,读写执行     

2.8 编辑配置文件

[root@ftp-server ~]#vim /etc/vsftpd/vsftpd.conf 
pam_service_name=vsftpd.mysql     #修改问价为,vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES

guest_enable=yes                  #启用虚拟用户映射
guest_username=vuser              #映射账号为vuser

[root@ftp-server ~]#systemctl enable --now vsftpd        #启动vsftpd服务
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

2.9客户端测试

登录成功

[root@centos7-liyj ~]#ftp 10.0.0.17
Connected to 10.0.0.17 (10.0.0.17).
220 (vsFTPd 3.0.2)
Name (10.0.0.17:root): yan
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.


[root@centos7-liyj ~]#ftp 10.0.0.17
Connected to 10.0.0.17 (10.0.0.17).
220 (vsFTPd 3.0.2)
Name (10.0.0.17:root): li
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> 

3、在FTP服务器上配置虚拟用户具有不同的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务器访问权限,每个虚拟用户的配置文件名称同虚拟用户的用户名,配置问价你目录可以是任意未使用目录,只需要在vsftpd.conf 指定其路径及名称即可

3.1 创建conf.d目录,编辑配置文件添加   user_config_dir=/etc/vsftpd/conf.d/

[root@centos7 ~]#mkdir /etc/vsftpd/conf.d/
[root@ftp-server ~]#vim /etc/vsftpd/vsftpd.conf 

user_config_dir=/etc/vsftpd/conf.d/

3.2 编辑用户权限 在/etc/vsftpd/conf.d/目录创建登录用户同名的文件

[root@ftp-server ~]#vim /etc/vsftpd/conf.d/li
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftproot1

3.3 创建对应的ftproot1目录

[root@ftp-server /data]#mkdir -p /data/ftproot1/upload   #upload为用户的读写目录

3.4 修改upload属性为vuser,vuser用户可以读写这个目录

[root@ftp-server /data]#chown -R vuser.vuser /data/ftproot1/

3.5 客户端测试

[root@centos7-liyj ~]#ftp 10.0.0.17
Connected to 10.0.0.17 (10.0.0.17).
220 (vsFTPd 3.0.2)
Name (10.0.0.17:root): li
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> ls
227 Entering Passive Mode (10,0,0,17,101,216).
150 Here comes the directory listing.
drwxr-xr-x    2 998      996             6 May 28 03:49 upload
226 Directory send OK.
ftp> cd upload
250 Directory successfully changed.
ftp> lcd /etc
Local directory now /etc
ftp> put passwd
local: passwd remote: passwd
227 Entering Passive Mode (10,0,0,17,244,234).
150 Ok to send data.
226 Transfer complete.
1006 bytes sent in 5.1e-05 secs (19725.49 Kbytes/sec)
ftp> ls
227 Entering Passive Mode (10,0,0,17,201,130).
150 Here comes the directory listing.
-rw-------    1 998      996          1006 May 28 03:57 passwd
226 Directory send OK.

3.6 vsftp-server检查

[root@ftp-server ~]#ll /data/ftproot1/upload/
total 4
-rw------- 1 vuser vuser 1006 May 28 11:57 passwd

 

posted @ 2022-05-28 12:04  goodbay说拜拜  阅读(65)  评论(0编辑  收藏  举报