【就业班作业】【第十八周】实现基于MYSQL验证的vsftpd虚拟用户访问

一、概述

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

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

本次实验准备两台主机上实现

一台做为FTP服务器,CentOS 7 (192.168.0.105)
一台做MySQL 数据库服务器 (192.168.0.106)

二、数据库环境以及配置准备

 1 二进制安装
 2 #配置用户
 3 useradd -r -s /sbin/nologin -d /data/mysql mysql
 4 
 5 #配置所需的文件夹
 6 mkdir -pv /data/src
 7 mkdir -pv /data/app/mysql
 8 mkdir -pv /data/app/mysqldata
 9 chown -R mysql.mysql /data/app/mysql
10 chown -R mysql.mysql /data/app/mysqldata
11 
12 #准备安装源文件
13 [root@centos7-mysql-server /]# cd /data/src/
14 wget -c https://mirrors.ustc.edu.cn/mariadb//mariadb-10.5.8/bintar-linux-systemd-x86_64/mariadb-10.5.8-linux-systemd-x86_64.tar.gz
15 [root@centos7-mysql-server src]# ll
16 total 403828
17 -rw-r--r-- 1 root root  71997847 Nov 18 18:29 mariadb-10.2.25.tar.gz
18 -rw-r--r-- 1 root root 341518238 Nov 18 10:24 mariadb-10.5.8-linux-systemd-x86_64.tar.gz
19 
20 #解压文件
21 tar -xf mariadb-10.5.8-linux-systemd-x86_64.tar.gz -C /data/app/mysql
22 ln -sv /data/app/mysql/mariadb-10.5.8-linux-systemd-x86_64/ /usr/local/mysql
23 chown -R mysql.mysql /usr/local/mysql
24 
25 #配置环境变量
26 echo "PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh
27 
28 #安装初始化数据库
29 #FATAL ERROR: Could not find ./bin/my_print_defaults 只需要定位到/data/app/mysql文件夹执行指令
30 cd /usr/local/mysql/
31 ./scripts/mariadb-install-db --datadir=/data/app/mysqldata/ --user=mysql
32 
33 #设置数据配置文件
34 vi /etc/my.cnf
35 [mysqld]
36 datadir=/data/app/mysqldata
37 socket=/data/app/mysqldata/mysql.sock
38 skip_name_resolve = on
39 log-bin=/data/app/mysqldata/mysql-bin
40 symbolic-links=0
41 [mysqld_safe]
42 log-error=/var/log/mariadb/mariadb.log
43 pid-file=/var/run/mariadb/mariadb.pid
44 [client]
45 socket=/data/app/mysqldata/mysql.sock
46 !includedir /etc/my.cnf.d
47 
48 #设置服务启动配置
49 cp /usr/local/mysql/support-files/systemd/mariadb.service /usr/lib/systemd/system/mariadb.service
50 systemctl daemon-reload
51 systemctl enable mariadb
52 systemctl start mariadb
53 
54 #初始安全配置
55 mysql_secure_installation -S /data/app/mysqldata/mysql.sock
56 
57 #新建数据库、表及授权
58 mysql
59 CREATE DATABASE vsftpd;
60 USE vsftpd;
61 CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50) BINARY NOT NULL,password CHAR(48) BINARY NOT NULL);
62 
63 INSERT INTO users(name,password) values('luo',password('ftppass'));
64 INSERT INTO users(name,password) values('lunar',password('ftppass'));
65 
66 GRANT SELECT ON vsftpd.* TO ftpduser@'192.168.0.%' IDENTIFIED BY 'ftpdpass';
67 FLUSH PRIVILEGES;
68 
69 #测试
70 mysql -uftpduser -pftpdpass -h192.168.0.106

三、FTP服务环境及配置准备

#在FTP服务器上安装vsftpd 和 pam_mysql包
yum install vsftpd
yum install pam_mysql   //centos 6
#centos7
yum -y install vsftpd gcc gcc-c++ make mariadb-devel pam-devel
wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
tar xvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/
./configure --with-pam-mods-dir=/lib64/security  && echo $?
make && make install && echo $?

#查看编译后生成的2个关键文件
ll /lib64/security/pam_mysql*
-rwxr-xr-x 1 root root    882 Jan 19 16:18 /lib64/security/pam_mysql.la
-rwxr-xr-x 1 root root 141697 Jan 19 16:18 /lib64/security/pam_mysql.so

#在FTP服务器上建立pam认证所需文件
vi /etc/pam.d/vsftpd.mysql
auth required pam_mysql.so user=ftpduser passwd=ftpdpass host=192.168.0.106 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=ftpduser passwd=ftpdpass host=192.168.0.106 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

#建立登录用户映射到本地系统用户
mkdir -pv /data/ftproot/upload
mkdir -pv /data/ftproot2/upload
useradd -s /sbin/nologin -d /data/ftproot -r vuser
setfacl -m u:vuser:rwx /data/ftproot/upload
setfacl -m u:vuser:rwx /data/ftproot2/upload

#FTP服务的关键配置:(在实验时发现:使用vsftpd-mysql认证时,需要启用本地系统或匿名认证其中一项)
vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。
/etc/vsftpd/vsftpd.conf
listen_port=2121

#default allow local user login Linux系统用户
local_enable=YES
#default allow local user upload
write_enable=YES
#default local user umask
local_umask=022

guest_enable=YES
guest_username=vuser
user_config_dir=/etc/vsftpd/conf.d/

dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
xferlog_std_format=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd.mysql
userlist_enable=YES
tcp_wrappers=YES

#子用户配置文件 vi
/etc/vsftpd/conf.d/luo anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES anon_umask=0222 local_root=/data/ftproot /etc/vsftpd/conf.d/lunar anon_upload_enable=YES anon_mkdir_write_enable=YES anon_other_write_enable=YES anon_umask=0222 local_root=/data/ftproot2

 四、启动服务测试效果

systemctl start vsftpd

ftp> open 192.168.0.105 2121
连接到 192.168.0.105220 (vsFTPd 3.0.2)
用户(192.168.0.105:(none)): luo
331 Please specify the password.
密码:
230 Login successful.
ftp> put tcping.exe
200 PORT command successful. Consider using PASV.
553 Could not create file.
ftp> cd upload
250 Directory successfully changed.
ftp> ls
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
tcping.exe
226 Directory send OK.
ftp: 收到 12 字节,用时 0.00秒 12000.00千字节/秒。
ftp> !dir
 驱动器 C 中的卷没有标签。
 卷的序列号是 E862-B8BC

 C:\Users\luo 的目录

2021/01/20  10:38    <DIR>          .
2021/01/20  10:38    <DIR>          ..
2020/12/12  12:36    <DIR>          Contacts
2021/01/19  15:06    <DIR>          Desktop
2021/01/19  10:12    <DIR>          Documents
2021/01/15  11:34    <DIR>          Downloads
2020/12/12  12:36    <DIR>          Favorites
2010/01/11  21:28            65,024 itracert.exe
2020/12/12  13:33    <DIR>          Links
2020/12/12  12:36    <DIR>          Music
2021/01/19  15:02    <DIR>          OneDrive
2020/12/12  12:36    <DIR>          Pictures
2020/12/10  16:38        10,413,178 qqwry.dat
2020/12/18  14:46    <DIR>          Saved Games
2020/12/12  12:36    <DIR>          Searches
2013/07/09  17:42           184,832 tcping.exe
2017/03/31  08:31           163,840 tracetcp.exe
2020/12/12  12:36    <DIR>          Videos
               4 个文件     10,826,874 字节
              14 个目录 19,744,567,296 可用字节
ftp> put qqwry.dat
200 PORT command successful. Consider using PASV.
150 Ok to send data.
226 Transfer complete.
ftp: 发送 10413178 字节,用时 3.96秒 2627.60千字节/秒。
ftp>

 (结束)

posted @ 2021-01-20 11:14  sankeya  阅读(118)  评论(0编辑  收藏  举报