【就业班作业】【第十八周】实现基于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.105。 220 (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>
(结束)