vsftpd用户分为:匿名用户、本地用户、虚拟用户

 

虚拟用户和本地用户没有关系,但是所有虚拟用户会被映射为一个指定的系统帐号,访问共享位置就是这系统帐号的家目录。

各虚拟用户可以被赋予不同的访问权限:

      通过匿名用户权限控制参数进行指定;

虚拟用户帐号的存储方式

      文件,编辑文本文件来存储

              奇数行为用户名,奇数行+1为其对应密码。

              此文件需要被编码为hash格式,这个方式非常费劲,添加一

              次就需要重新hash加密一次

      关系型数据库的表中:

              即时查询数据库完成用户认证:

                 mysql库,pam要依赖于pam-mysql模块

1 安装软件

安装mysql,vsftpd,pam_mysql

安装并配置基于虚拟用户的vsftpd_第1张图片 

pam_mysql属于epel的,得安装epel:yum install epel-release

打开它的readme

里面示例:

image 

认证方式   可选的   模块认证    帐号密码

红色字体是远程主机上执行的,黑色字体是在本地执行的:

2 配置数据库

在远程主机上安装mariadb:

远程主机上执行

create database vsftpd;

use vsftpd;

grant select on vsftpd.* TO vsftpd@'192.168.%.%' identified by 'vsftpd';

flush privileges;

安装并配置基于虚拟用户的vsftpd_第2张图片 

 

远程连接mariadb的主机

mysql -uvsftpd -h192.168.1.108 -p

image

但是centos7里面不是iptables了,所以需要关闭的是firewalld

systemctl stop firewalld

或者

service firewalld stop

image 

 

本地查看下数据库。

安装并配置基于虚拟用户的vsftpd_第3张图片

远程主机建立表

create table user( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50) BINARY NOT NULL, password CHAR(48) BINARY NOT NULL);

image 

 

在本地端可以查到

desc user;

安装并配置基于虚拟用户的vsftpd_第4张图片

 

数据库内建函数password(‘xxx’)可以将任意数据变成48位的

select password(‘abc’);

安装并配置基于虚拟用户的vsftpd_第5张图片

 

insert into user (name,password) values('tom',password('magedu')),('gh',password('magedu'));

向远程主机的vsftpd表中插入数据

image

 

在本地查询

安装并配置基于虚拟用户的vsftpd_第6张图片

3 配置pam

随便在/etc/pam.d里建立个文件

image

在里面输入内容如下

image 

auth,认证

account,验证用户有效与否

required ,可选方式

pam_mysql.so ,模块认证,相对路径,/lib64

user=vsftpd,mysql连接用户

passwd=vsftpd ,mysql连接密码

host=192.168.1.108 ,mysql连接地址

db=vsftpd ,数据库名字

table=user ,表名字

usercolumn=name ,用户列名

passwdcolumn=password ,密码列名

crypt=0,加密方式

安装并配置基于虚拟用户的vsftpd_第7张图片

4 建立账号

需要在本地主机上建立一个帐号用来登录

useradd –s /sbin/nologin –d /var/ftproot vuser

image 

chmod go+rx /var/ftproot

image

请确保/etc/vsftpd.conf中已经启用了以下选项
anonymous_enable=YES   //匿名用户
local_enable=YES   //本地用户
write_enable=YES   //本地用户写入
anon_upload_enable=NO   //匿名上传
anon_mkdir_write_enable=NO   //匿名建立文件夹
chroot_local_user=YES    //是否将用户限制在主目录,yes是

然后添加以下项
guest_enable=YES
guest_username=vuser

并确保pam_service_name选项的值如下所示
pam_service_name=vsftpd.mysql

安装并配置基于虚拟用户的vsftpd_第8张图片 

用tail /var/log/secure里显示最近登录系统的日志

安装并配置基于虚拟用户的vsftpd_第9张图片 

 

现在几个用户都是相同权限的,下面要赋予不同的权限。

 

5 配置不同用户的访问权限

在/etc/vsftpd/vsftpd.conf

添加user_config_dir=/etc/vsftpd/vuser_config

安装并配置基于虚拟用户的vsftpd_第10张图片

然后在指定位置建立文件夹vuser,并针对每个用户建立一个文件

image

里面的内容如下

anon_upload_enable=YES
anon_mkdir_write_enable=yes
anon_other_write_enable=yes

安装并配置基于虚拟用户的vsftpd_第11张图片

测试连接一下,成功

安装并配置基于虚拟用户的vsftpd_第12张图片

-------------------------------------------------------------------------

除了ftp,下列也可以使用

axel,lftpget,wget,curl

 

ftp协议是明文

ftps:SSL,认证过程是安全的

sftp:SSH,