前言:
ftp服务是传统的文件共享服务,其中 vsftpd 是普及度比较高的 ftp 应用实现
vsftpd
1、vsftpd介绍
全名:very secure ftp daemon
程序:/usr/sbin/vsftpd
配置文件:/etc/vsftpd/vsftpd.conf
2、用户分类
匿名用户(映射至某一固定的系统用户)
本地用户(root及系统用户),
虚拟用户(存储在文件或其他服务器端数据库中的用户);
实验内容
一般情况下, 我们安装好 vsftpd 后默认允许匿名用户下载指定的文件资源。但是有的时候有权限管理的需要,下面我们用 MySQL 存储用户权限信息,实现 vsftpd 用户权限管理功能。
实验目标
搭建 vsftpd 服务并登录服务
实验环境
host | ip | 用途 |
---|---|---|
node1 | 192.168.1.134 | vsftpd端(安装vsftpd、编译mysql模块) |
node2 | 192.168.1.137 | 数据库端(安装mariadb服务) |
实验步骤:
一、MySQL端数据库配置
准备一台新安装的 CentOS7.6 服务器,node2 ,ip 为 192.168.1.137 , 并安装 MariaDB 数据库
1、关闭node2主机沙盒和防火墙
2、安装mariadb服务
#yum install -y mariadb-server //安装包mariadb服务
#systemctl start mariadb //启动mariadb服务
#ss -ntl //检查端口3306
3、配置mysql存储用户权限信息
> create database vsftpd; //创建测试库vsftpd
4、创建测试表vuser 并设置表属性
> use vsftpd;
> create table vuser (id int auto_increment primary key,username char(30),password char(50) binary); //主键随id数增长,用户名长度限制30字节,密码长度限制50字节
5、插入虚拟用户ftp1和ftp2的信息
>insert vuser(username,password)values('ftp1',password('123456')),('ftp2',password('123456'));
6、授权访问用户vsftpd,使其有查权限
> grant select on vsftpd.vuser to vsftpd@'192.168.1.%' identified by '123456';
7、查看vuser表中数据
>select * from vuser;
8、数据库查看授权的访问用户和主机IP
>use mysql;
>select Host, User, Password from user;
二、vsftpd端运行环境和服务配置
pam_mysql.so时vsftp服务的核心文件,放置在/lib64/security目录下,由于CentOS 7yum源中没有pam-mysql,故需自己编译安装;
1、下载vsftpd服务
#yum install -y vsftpd //下载vsftpd服务
2、相关的程序包
#yum install -y gcc gcc-c++ pam-devel mariadb-devel //下载相关的程序包
3、下载pam-mysql压缩包
# wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
4、解压pam-mysql压缩包
# tar xf pam_mysql-0.7RC1.tar.gz
5、查看configure文件
# cd pam_mysql-0.7RC1 //进入解压后的文件内
# ll //查找configure
6、解压configure
# ./configure --with-pam-mods-dir=/lib64/security
# make && make install //编译安装
7、在/lib64/security目录下的pam_mysql.so
三、pam配置
1、编辑vsftp.mysql
# cd /etc/pam.d
# vi /etc/pam.d/vsftpd.mysql
我服务器配置内容如下:
auth required pam_mysql.so user=vsftpd passwd=123456 host=192.168.1.137 db=vsftpd table=vuser usercolumn=username passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=123456 host=192.168.1.137 db=vsftpd table=vuser usercolumn=username passwdcolumn=password crypt=2
其中:
pam_mysql.so //相对路径,如果此模块置于/lib64/security目录下,则可直接写文件名,当然,写全路径也没问题;
2、pam_mysql.so的编辑格式
user=vsftpd
passwd=123456 //授权登陆mysql时的用户
host=localhost //本地主机
db=test //存放虚拟用户的数据库名
table=vstfpd
usercolumn=name
passwdcolumn=passwd
crypt=2 //密码加密方式代号
//0:不加密
//1:使用crypt(3)加密
//2:mysql函数加密password();
//3:md5加密
//4:SHA1加密
四、细节优化
1、编辑配置文件vsftpd.conf
添加项:
guest_enable=YES
guest_username=vuser
修改此项为:pam_service_name=vsftpd.mysql
# vi /etc/vsftpd/vsftpd.conf
# tail -7 /etc/vsftpd/vsftpd.conf
我服务器的配置内容如下:
pam_service_name=vsftpd.mysql
guest_enable=YES
guest_username=vuser
user_config_dir=/etc/vsftpd/vusers.d/
userlist_enable=YES
tcp_wrappers=YES
2、创建系统用户作为映射
# useradd -r -s /sbin/nologin -d /data/ftproot vuser //创建系统用户作为映射
# mkdir -pv /data/ftproot //创建本地用户目录
3、创建虚拟用户目录
# mkdir -pv /etc/vsftpd/vusers.d //创建虚拟用户目录
4、写入虚拟用户ftp的管理权限
确保这些项为YES:
anonymous_enable=YES
local_enable=YES
write_enable=YES
1)ftp1配置内容:
# vi /etc/vsftpd/vusers.d/ftp1
# cat /etc/vsftpd/vusers.d/ftp1
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftp1
2)ftp2配置内容:
# vi /etc/vsftpd/vusers.d/ftp2
# cat /etc/vsftpd/vusers.d/ftp2
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
local_root=/data/ftp2
保存退出
五、服务登录
1、启动vsftp服务 下载登录工具lftp
#systemctl start vsftpd //启动vsftpd服务
# yum install -y lftp //下载lfyp工具
2、登录虚拟用户ftp1
# lftp ftp1@127.0.0.1
效果如下: