实现基于MYSQL验证的vsftpd虚拟用户
环境准备
10.0.0.7 做FTP server
10.0.0.8 做MySQl
10.0.0.150 Client
第一步:安装
在10.0.0.8数据库服务器上安装mysql数据库并配置数据库
[root@MySQL ~]#yum -y install mariadb-server
[root@MySQL ~]#systemctl enable --now mariadb.service
进入数据库 :
CREATE DATABASE vsftpd;
use vsftpd
CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50)BINARY NOT NULL,password CHAR(48) BINARY NOT NULL);
insert users(name,password) values('alang',password('123456'));
insert users(name,password) values('alei',password('123456')); #这里用password是给密码加密
select * from users;
grant select on vsftpd.* TO vsftpd@'10.0.0.%' identified by '123456';
然后在 在10.0.0.7上 FTP服务器上安装vsftpd 和 pam_mysql包
yum -y install vsftpd
systemctl enable --now vsftpd
centos7 和 8:无对应rpm包,需手动编译安装,pam-mysql 源码进行编译或者下载好了以后 直接上传后直接解压 步骤;
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 #下载pam-mysql源码
tar xvf pam_mysql-0.7RC1.tar.gz #解压
tar xvf pam_mysql-0.7RC1.tar.gz -C /usr/local/src #解压后习惯放在src下
cd pam_mysql-0.7RC1/ #切换到pam_mysql-0.7RC1/目录下
./configure --with-pam-mods-dir=/lib64/security #执行变量
make install #执行安装
#ll /lib64/security/pam_mysql* #查看编译完成的文件
在7 FTP服务器上建立pam认证所需文件
vi /etc/pam.d/vsftpd.mysql
添加如下两行
auth required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.8 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 #第一行 文本里必须放在同一行
account required pam_mysql.so user=vsftpd passwd=123456 host=10.0.0.8 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 #第二行,文本里必须放在同一行
建立相应用户和修改vsftpd配置文件
useradd -s /sbin/nologin -d /data/ftproot -r vuser
mkdir -pv /data/ftproot/upload
setfacl -m u:vuser:rwx /data/ftproot/upload
确保 /etc/vsftpd/vsftpd.conf中已经启用了以下选项
pam_service_name=vsftpd.mysql # 手动添加vsftpd后面的 .mysql
guest_enable=YES # 在最后手动添加
guest_username=vuser # 在最后手动添加
systemctl restart vsftpd # 保存退出后重启服务
第二步:测试
在10.0.0.150客户机上分别登录 刚刚设置的alang和alei测试 (这里用户名是可以随便设置的)
测试upload是否可以上传ftp> put hosts
目前没有权限 无法上传
第三步:设置
在10.0.0.7 FTP服务器上配置虚拟用户具有不同的访问权限
#配置vsftpd为虚拟用户使用配置文件目录
vim /etc/vsftpd/vsftpd.conf #打开文本
user_config_dir=/etc/vsftpd/conf.d/ #在文本最后添加这行
要注意的是
配置虚拟用户的访问权限
#虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。如要让用户alnag具有上传文件的权限,可修改/etc/vsftpd/vusers.d/wang文件,在里面添加如下选项并设置为YES即可,只读则设为NO
mkdir /etc/vsftpd/conf.d/ #创建文本
vim /etc/vsftpd/conf.d/alang #编辑文本
在alang文本里设置如下
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftproot1
然后重启服务 systemctl restart vsftpd
为了可以在upload里上传数据,执行
mkdir /data/ftproot1/upload -pv
chown vuser.vuser /data/ftproot1/upload/ #更改权限
touch /data/ftproot1/upload/alang.txt #在7上创建一个文件,在客户端可以看到 示例
在10.0.0.150上查看
然后上传文件测试 put hosts
在FTP服务器端10.0.0.7可以查看到
而目前 alei无法上传,是因为还没有单独指定
mkdir /data/ftproot2/ #设置单独的目录
touch /data/ftproot2/alei.txt #设置alei的文件
然后切换到cd /etc/vsftpd/conf.d/
拷贝alang的文件直接生成
cd /etc/vsftpd/conf.d/
cp alang alei
vim alei
设置不允许上传 注释或者删除前面三行即可
然后重启服务 systemctl restart vsftpd
在客户端登录 可以看到alei的文件了
这样每个用户有自己的设置了,而因为没有设置允许上传 所以
至此设置完成
而如果要增加用户,直接在8主机MySQL上执行
insert users(name,password) values('asan',password('123456'));
然后直接登录
至此设置完成
关于这个实验个人体验:作为0基础开始学习,不管什么实验,最好都做一下,这样才能进步更快