实验一、实现基于文件验证的vsftpd虚拟用户1、创建用户数据库文件

vim /etc/vsftpd/vusers.txt

wang

wangpass

mage

magepass

cd /etc/vsftpd/

db_load -T -t hash -f vusers.txt vusers.db

chmod 600 vusers.db

 

·实验操作:

      实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux

db_load -T -t hash -f vusers.txt vusers.db

      实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_02

可以看到变成数据库之后文件变大了很多实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_03

  修改权限

     实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_04

2、创建用户和访问FTP目录

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

chmod +rx /var/ftproot/

 

centos7 还需要执行以下操作:

chmod -w /var/ftproot/

mkdir /var/ftproot/upload

setfacl -m u:vuser:rwx /var/ftproot/upload

 

·实验操作:

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_05

chmod +rx /app/ftpsite/ 给目录添加权限

去掉写权限:

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_06

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_07

创建一个子目录,并改权限

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_08

3、创建pam配置文件

vim /etc/pam.d/vsftpd.db

auth required pam_userdb.so db=/etc/vsftpd/vusers

account required pam_userdb.so db=/etc/vsftpd/vusers

 

·实验操作:

我们需要建一个pam配置文件

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_09

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_10


4、指定pam配置文件

vim /etc/vsftpd/vsftpd.conf

guest_enable=YES

guest_username=vuser

pam_service_name=vsftpd.db

 

·实验操作:

ftp配置文件中添加刚才的pam配置文件路径

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_11

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_12

重启服务

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_13

5SELinux设置:

禁用SELinux 或者 setsebool -P ftpd_full_access 1

6、虚拟用户建立独立的配置文件

mdkir /etc/vsftpd/vusers.d/ 创建配置文件存放的路径

vim /etc/vsftpd/vsftpd.conf

user_config_dir=/etc/vsftpd/vusers.d/

cd /etc/vsftpd/vusers.d/ 进入此目录

允许wang用户可读写,其它用户只读

vim wang  创建各用户自已的配置文件

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES

vim mage  创建各用户自已的配置文件

local_root=/ftproot  登录目录改变至指定的目录

 

·实验操作:

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_14

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_15

我们把这个目录建起来,然后进入目录

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_16

针对这三个人,创建三个配置文件:

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_17

ftp1可以上传,可以建文件夹

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_18

测试ftp1上传成功实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_19

ftp2由于没有写配置文件,默认不允许上传:实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_20

目前设置的三个用户登陆之后看到的目录都是一样的,我们想设置成每个用户的目录不一样

于是我们先建三个目录,分别放不同的文件

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_21

然后去掉写权限

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_22

接下来我们建ftp2的配置文件

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_23

加上这句就可以让看到的目录变成ftpsite2目录了

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_24

同理,ftp3也一样

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_25

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_26

然后重启服务

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_27

我们可以查看一下实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_28

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_29

设置成功

实验二、实现基于MYSQL验证的vsftpd虚拟用户

说明:本实验在两台CentOS主机上实现,一台做为FTP服务器,一台做数据库服务器。我们本次都用centos7来实验。还有一台centos6来当客户端。

一、安装所需要包和包组:

1、在数据库服务器上安装包:

Centos7:在数据库服务器上安装

yum –y install mariadb-server mariadb

systemctl start mariadb.service

systemctl enable mariadb

Centos6:在数据库服务器上安装

yum –y install mysql-server

 

2、在FTP服务器上安装vsftpdpam_mysql

centos6pam_mysqlepel6的源中提供

yum install vsftpd pam_mysql

centos7pam无对应rpm包,需手动编译安装

yum -y groupinstall "Development Tools"

yum -y install mariadb-devel pam-devel vsftpd

下载pam_mysql-0.7RC1.tar.gz

ftp://172.16.0.1/pub/Sources/sources/pam/

tar xvf pam_mysql-0.7RC1.tar.gz

cd pam_mysql-0.7RC1/

./configure --with-mysql=/usr --with-pam=/usr --with-pam-mods-dir=/lib64/security

make

make install

 

·实验操作:

FTP服务器端(192.168.37.107)装vsftpd

      实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_30

在数据库服务器端(192.168.37.101)上装mariadb

      实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_31

启动服务,跑安全脚本

      实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_32

二、在数据库服务器上创建虚拟用户账号

1.建立存储虚拟用户数据库和连接的数据库用户

mysql> CREATE DATABASE vsftpd;

mysql> SHOW DATABASES;

ftp服务和mysql不在同一主机:

mysql> GRANT SELECT ON vsftpd.* TO

vsftpd@'172.16.%.%'IDENTIFIED BY 'magedu';

ftp服务和mysql在同一主机:

mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY 'magedu';

mysql> GRANT SELECT ON vsftpd.* TO vsftpd@'127.0.0.1' IDENTIFIED BY 'magedu';

mysql> FLUSH PRIVILEGES;

 

2.准备相关表

mysql> USE vsftpd;

Mysql> SHOW TABLES;

mysql> CREATE TABLE users (

id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,

name CHAR(50) BINARY NOT NULL,

password CHAR(48) BINARY NOT NULL

);

mysql>DESC users;

 

测试连接

mysql -uvsftpd -h 172.16.200.200  -pmagedu

mysql> SHOW DATABASES;

 

3.添加虚拟用户

根据需要添加所需要的用户,为了安全应该使用PASSWORD函数加密其密码后存储

mysql>DESC users;

mysql> INSERT INTO users(name,password)

values('wang',password('magedu'));

mysql> INSERT INTO users(name,password)

values('mage',password('magedu'));

mysql> SELECT * FROM users;

 

·实验操作:

登录数据库

      实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_33

创建新数据库,并进入使用

      实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_34

创建表用来存放虚拟用户的账号和密码实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_35

创建拥有查询此表权限的用户

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_36      在表中添加两个虚拟账号(password()函数用来加密密码)

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_37

  可以看到,已经被加密了

     实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_38

     ftp想要连接MySQL,需要一个pam_mysql工具。但是7上没有安装包,需要编译安装。

     先去官网找安装包

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_39

下载安装包:

   实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_40

将安装包导入linux实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_41

解压

     实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_42

可以进去查看一下说明文档实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_43

安装相关包组

     实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_44

     实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_45

     实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_46

编译(指定路径)

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_47

编译安装

     实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_48

三、在FTP服务器上配置vsftpd服务

1.FTP服务器上建立pam认证所需文件

vi /etc/pam.d/vsftpd.mysql 添加如下两行

auth required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required pam_mysql.so user=vsftpd passwd=magedu host=mysqlserver db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

注意:参考README文档,选择正确的加密方式

crypt是加密方式,0表示不加密,1表示crypt(3)加密,2表示使用mysql password()函数加密,3表示md5加密,4表示sha1加密

 

配置字段说明:

auth 表示认证

account 验证账号密码正常使用

required 表示认证要通过

pam_mysql.so模块是默认的相对路径,是相对/lib64/security/路径而言,也可以写绝对路径;后面为给此模块传递的参数

user=vsftpd为登录mysql的用户

passwd=magedu 登录mysql的的密码

host=mysqlserver  mysql服务器的主机名或ip地址

db=vsftpd  指定连接msyql的数据库名称

table=users 指定连接数据库中的表名

usercolumn=name 当做用户名的字段

passwdcolumn=password当做用户名字段的密码

crypt=2 密码的加密方式为mysql password()函数加密

 

2.建立相应用户和修改vsftpd配置文件,使其适应mysql认证

建立虚拟用户映射的系统用户及对应的目录

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

chmod 555 /var/ftproot centos7 需除去ftp根目录的写权限

mkdir /var/ftproot/{upload,pub}

setfacl –m u:vuser:rwx /var/ftproot/upload

确保/etc/vsftpd.conf中已经启用了以下选项

anonymous_enable=YES

添加下面两项

guest_enable=YES

guest_username=vuser

修改下面一项,原系统用户无法登录

pam_service_name=vsftpd.mysql

 

·实验操作:

新建一个配置文件:

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_49

添加两行内容:实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_50

创建用户,并去掉写权限(拥有写权限会导致用户登陆的时候失败),改成555

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_51

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_52

创建个文件,然后还要建个文件夹,并将文件夹所有者改成tfpuser,客户端那边才能上传:

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_53

然后还要改一下vsftpd的配置文件

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_54

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_55

四、启动vsftpd服务

service vsftpd start;systemctl start vsftpd

chkconfig vsftpd on;systemctl enable vsftpd

查看端口开启情况

netstat -tnlp |grep :21

 

五、Selinux相关设置:在FTP服务器上执行

restorecon  -R/lib64/security

setsebool -P ftpd_connect_db 1

setsebool -P ftp_home_dir 1

chcon -R -t public_content_rw_t /var/ftproot/

 

六、测试:利用FTP客户端工具,以虚拟用户登录验证结果

tail /var/log/secure

 

七、在FTP服务器上配置虚拟用户具有不同的访问权限

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可

1、配置vsftpd为虚拟用户使用配置文件目录

vim /etc/vsftpd/vsftpd.conf

添加如下选项

user_config_dir=/etc/vsftpd/vusers_config

2、创建所需要目录,并为虚拟用户提供配置文件

mkdir /etc/vsftpd/vusers_config/

cd /etc/vsftpd/vusers_config/

touch wang mage

3、配置虚拟用户的访问权限

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关

指令进行的。如果需要让用户wang具有上传文件的权限,可以

修改/etc/vsftpd/vusers_config/wang文件,在里面添加如下

选项并设置为YES即可,只读则设为NO

注意:需确保对应的映射用户对于文件系统有写权限

anon_upload_enable={YES|NO}

anon_mkdir_write_enable={YES|NO}

anon_other_write_enable={YES|NO}

 

·实验操作:

之前在配置文件最后一行卸了用户使用配置文件目录

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_56

于是我们建个文件夹,在里面分别写上对两个用户的权限设置

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_57

设置ftp1用户允许上传

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_58

再建立ftp2

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_59

设置登录目录

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_60

把目录建起来,再随便建个文件f2用于测试

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_61

重启服务:

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_62

然后在客户端就可以连接了

先登录ftp1

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_63

可以上传

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_64

然后登陆ftp2

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_65

查看一下列表,可以看到f2

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_66

不能上传

实验——基于文件验证和MYSQL验证的vsftpd虚拟用户_Linux_67

成功。