ftp服务是传统的文件共享服务,其中 vsftpd 是普及度比较高的 ftp 应用实现
全名:very secure ftp daemon
程序:/usr/sbin/vsftpd
配置文件:/etc/vsftpd/vsftpd.conf
匿名用户(映射至某一固定的系统用户)
本地用户(root及系统用户),
虚拟用户(存储在文件或其他服务器端数据库中的用户);
一般情况下, 我们安装好 vsftpd 后默认允许匿名用户下载指定的文件资源。但是有的时候有权限管理的需要,下面我们用 MySQL 存储用户权限信息,实现 vsftpd 用户权限管理功能。
搭建 vsftpd 服务并登录服务
host | ip | 用途 |
---|---|---|
node1 | 192.168.1.134 | vsftpd端(安装vsftpd、编译mysql模块) |
node2 | 192.168.1.137 | 数据库端(安装mariadb服务) |
准备一台新安装的 CentOS7.6 服务器,node2 ,ip 为 192.168.1.137 , 并安装 MariaDB 数据库
#yum install -y mariadb-server //安装包mariadb服务
#systemctl start mariadb //启动mariadb服务
#ss -ntl //检查端口3306
> create database vsftpd; //创建测试库vsftpd
> use vsftpd;
> create table vuser (id int auto_increment primary key,username char(30),password char(50) binary); //主键随id数增长,用户名长度限制30字节,密码长度限制50字节
>insert vuser(username,password)values('ftp1',password('123456')),('ftp2',password('123456'));
> grant select on vsftpd.vuser to vsftpd@'192.168.1.%' identified by '123456';
>select * from vuser;
>use mysql;
>select Host, User, Password from user;
pam_mysql.so时vsftp服务的核心文件,放置在/lib64/security目录下,由于CentOS 7yum源中没有pam-mysql,故需自己编译安装;
#yum install -y vsftpd //下载vsftpd服务
#yum install -y gcc gcc-c++ pam-devel mariadb-devel //下载相关的程序包
# wget http://prdownloads.sourceforge.net/pam-mysql/pam_mysql-0.7RC1.tar.gz
# tar xf pam_mysql-0.7RC1.tar.gz
# cd pam_mysql-0.7RC1 //进入解压后的文件内
# ll //查找configure
# ./configure --with-pam-mods-dir=/lib64/security
# make && make install //编译安装
# 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目录下,则可直接写文件名,当然,写全路径也没问题;
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加密
添加项:
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
# useradd -r -s /sbin/nologin -d /data/ftproot vuser //创建系统用户作为映射
# mkdir -pv /data/ftproot //创建本地用户目录
# mkdir -pv /etc/vsftpd/vusers.d //创建虚拟用户目录
确保这些项为YES:
anonymous_enable=YES
local_enable=YES
write_enable=YES
# 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
# 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
保存退出
#systemctl start vsftpd //启动vsftpd服务
# yum install -y lftp //下载lfyp工具
# lftp [email protected]