vsftp文件服务,vsftpd基于mysql

今天来说三个文件共享服务,首先说一下vsftp,即为ftp(文件传输协议),vsftp非常安全的ftp,因为早期ftp是明文的,早期还不会有人来窃取数据,随着时代的发展,信息安全越来越受到重视,故ftp经过发展后出现了vsftp的版本。

ftp是一种应用层的服务,通常只能用于linux和linux之间或者linux即unix间文件共享,不能与windows之间文件共享。在应用层协议中监听于port21。为了使客户端与服务器端能够互动,而不仅仅是请求报文,ftp有两种数据,一种为命令连接,为文件管理类命令,还有一种是数据连接,用于数据传输。数据的请求方式如下:

 主动:有服务器创建连接

                                  命令: Client50000 --> Server: 21

               数据:Server : 20/tcp -->  Client: 50000+

 被动:由客户端创建连接

                                  命令:Client50000 --> Server: 21

                                  数据:Client:   50000+1 --> Server: 随机端口

在连接时会产生响应码,用于反馈信息连接的返回值:

                          1xx:信息

                          2xx:成功类的状态码

           3xx:提示需进一步提供补充类信息的状态码

           4xx:客户端错误

           5xx:服务端错误

在Centos中使用的是vsftpd

 需要首先安装vsftpd

yum install vsftpd


用户认证配置文件:/etc/pam.d/vsftpd       

服务脚本:/etc/rc.d/init.d/vsftpd

配置文件目录:/etc/vsftpd

      主配置文件:/etc/vsftpd/vsftpd.conf

共享资源位置:/var/ftp

匿名用户(映射为ftp用户)共享资源位置:/var/ftp

系统用户通过ftp访问的资源的位置,用户自己的家目录

虚拟用户通过ftp访问的资源的位置:给虚拟用户指定的映射成为系统的用户的家目录

 启动服务 service vsftpd start 

 可以使用ss -tan查看是否监听21端口:

技术分享


    在使用ftp时有两种用户一种为系统用户,还有一种为匿名用户,当匿名用户访问时,会映射为ftp,共享资源为/var/ftp目录下。下面介绍了vsftpd的配置文件以及ftp用户的简介:

    Centos 6.6下:

    用户认证配置文件:/etc/pam.d/vsftpd       

    服务脚本:/etc/rc.d/init.d/vsftpd

    配置文件目录:/etc/vsftpd

        主配置文件:/etc/vsftpd/vsftpd.conf

    共享资源位置:/var/ftp

    匿名用户(映射为ftp用户)共享资源位置:/var/ftp

    系统用户通过ftp访问的资源的位置,用户自己的家目录

    虚拟用户通过ftp访问的资源的位置:给虚拟用户指定的映射成为系统的用户的家目录


  匿名用户登录,显示的是服务器端/var/ftp/目录下的文件,输入的用户名ftp,密码为空:


技术分享

  

通过使用help可以获得帮助命令:

技术分享

可以在windows下执行:

技术分享


使用系统用户登录:

技术分享


若想要上传文件至服务器端,需要将服务器端的配置文件中更改如下的权限,并且由于服务器端的/etc/ftp目录的权限都为root,需要创建一个目录,将文件夹权限中增加ftp

 

/etc/vsftpd/vsftpd.conf

匿名用户的配置:

anonymous_enable=YES

#anon_upload_enable=YES   是否允许匿名用户上传数据

#anon_mkdir_write_enable=YES  是否允许匿名用户创建目录

#anon_other_write_enable=YES  是否能删除文件

注意:在配置文件中,配置行需要顶格不能有空格;更改完配置文件后需重启服务。

 

增加ftpupload的权限:

技术分享


在客户端使用lcd命令切换至客户端的目录如/etc,使用put命令上传文件至服务器端upload,还能够添加删除目录如下:


技术分享



   系统用户的配置:

             local_enable=YES

             write_enable=YES

            local_umask=022

 

   禁锢所有的用户在家目录下,这样可以保障服务器端的安全性:

            #chroot_local_user=YES


系统用户默认是有读写权限的,共享目录为家目录:

技术分享


禁锢指定的ftp本地用户在家目录

#chroot_list_enable=YES

# (default follows)

#chroot_list_file=/etc/vsftpd/chroot_list

 

如下11为用户限制,在chroot_list文件内,不能切换至别的目录,test则可以自由切换:

技术分享


日志

xferlog_enable=YES

xferlog_std_format=YES

#xferlog_file=/var/log/xferlog

 

改变上传文件的属主:

#chown_uploads=YES

#chown_username=whoever

 

链接超时时长

#idle_session_timeout=600

数据链接超时时长

#data_connection_timeout=120

 

vsftpd使用pam完成用户认证,其用到的pam配置文件:

pam_service_name=vsftpd

是否启用控制用户登录的列表文件

userlist_enable=YES     

userlist_deny=YES      默认 /etc/vsftpd/user_list 

 

连接限制:

max_clients :  最大并发连接数;

max_per_ip:每个ip可同时发起的并发请求;

 

传输速率:

anno_max_rate 匿名用户最大传输速率,单位是“字节/秒”

local_max_rate: 本地用户最大传输速率,单位是“字节/秒”

 

虚拟用户:  

         所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录;

 

        各虚拟用户可被赋予不同的访问权限,通过匿名用户的权限控制参数进行指定;

  

         虚拟用户账号的存储方式:

                 文件:编辑文件

                             奇数行为用户名

                              偶数行为密码

 

                              此文件需要被编码为hash格式;

                 关系型数据库中的表中:

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

    

 

通过mysqlvsftp构建虚拟用户:

    一、安装所需要程序    

   mysql库:

                               pam要依赖于pam-mysql                                

                                  yum - install vsftpd pam_mysql mysql-devel mysql-server

               注意pam_mysql由epel源提供。

 

二、创建虚拟用户账号

1.准备数据库及相关表

首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。


2、添加测试的虚拟用户

根据需要添加所需要的用户,需要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储。


创建数据库vsftpd:

[root@localhost yum.repos.d]# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 10

Server version: 5.1.73 Source distribution


Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.


Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.


Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.


mysql> CREATE DATABASE vsftpd;

Query OK, 1 row affected (0.00 sec)


mysql> GRANT SELECT ON vsftpd.* TO  vsftpd@‘172.16.%.%‘ IDENTIFIED BY ‘cd521709‘;

Query OK, 0 rows affected (0.00 sec)


mysql> FLUSH PRIVILEGES;

Query OK, 0 rows affected (0.00 sec)


首先创建数据库vsftpd,可以在客户端登陆查看服务器端的数据库:

[root@localhost pam.d]# mysql -uvsftpd -h172.16.249.108 -p

Enter password: 

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MySQL connection id is 11

Server version: 5.1.73 Source distribution


Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.


Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the current input statement.


MySQL [(none)]> SHOW DATABASES;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| test               |

| vsftpd             |

+--------------------+

3 rows in set (0.00 sec)

在服务器端创建table:

mysql> use vsftpd;

Database changed

mysql>  CREATE TABLE users (

    ->  id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,

    -> name VARCHAR(50) BINARY NOT NULL,

    -> password CHAR(48) BINARY NOT NULL );

Query OK, 0 rows affected (0.02 sec)


查看表内信息:

mysql> DESC users;

+--------+------------------+------+-----+---------+----------------+

| Field  | Type             | Null | Key | Default | Extra          |

+--------+------------------+------+-----+---------+----------------+

| id     | int(10) unsigned | NO   | PRI | NULL    | auto_increment |

| name   | varchar(50)      | NO   |     | NULL    |                |

| password | char(48)         | NO   |     | NULL    |                |

+--------+------------------+------+-----+---------+----------------+

3 rows in set (0.00 sec)

 

mysql> insert into users(name,password) values(‘tom‘,password(‘magedu‘));

Query OK, 1 row affected (0.00 sec)

 

mysql> insert into users(name,password) values(‘jerrt‘,password(‘magedu‘));

Query OK, 1 row affected (0.00 sec)

 

查看所有用户信息

mysql> SELECT * FROM users;

+----+-------+-------------------------------------------+

| id | name  | password                                    |

+----+-------+-------------------------------------------+

|  1 | tom   | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |

|  2 | jerrt | *6B8CCC83799A26CD19D7AD9AEEADBCD30D8A8664 |

+----+-------+-------------------------------------------+

2 rows in set (0.00 sec)


三、配置vsftpd

 

1.建立pam认证所需文件

 ftp服务器端,非mysql服务器端

#vim /etc/pam.d/vsftpd.mysql

添加如下两行

auth required pam_mysql.so user=vsftpd passwd=cd521709 host=172.16.249.108 db=vsftpd table=users usercolum=name passwdcolumn=password crypt=0

account required pam_mysql.so user=vsftpd passwd=cd521709 host=172.16.249.108 db=vsftpd table=users usercolum=name passwdcolumn=password crypt=0


2.修改vsftpd的配置文件,使其适应mysql认证

 

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

# useradd -s /sbin/nologin -d /var/ftproot vuser   将创建的虚拟用户的家目录指定为/var/ftproot

# chmod go+rx /var/ftproot


请确保/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


而后添加以下选项

guest_enable=YES

guest_username=vuser


并确保pam_service_name选项的值如下所示

pam_service_name=vsftpd.mysql


如下为自己的配置:

pam_service_name=vsftpd.mysql

userlist_enable=YES

tcp_wrappers=YES

 

guest_enable=YES

guest_username=vuser


可以使用windows中的cmd来登陆校验:

技术分享




五、配置虚拟用户具有不同的访问权限

 

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 tom jerry

 

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

 

虚拟用户对vsftpd服务的访问权限是通过匿名用户的相关指令进行的。比如,如果需要让tom用户具有上传文件的权限,可以修改/etc/vsftpd/vusers_config/tom文件,在里面添加如下选项即可。

anon_upload_enable={YES|NO}

anon_mkdir_write_enable={YES|NO}

anon_other_write_enable={YES|NO}

 

tom文件中

anon_upload_enable=YES

anon_mkdir_write_enable=YES

anon_other_write_enable=YES


则可上传、创建、删除文件:

技术分享


jerrt文件中

anon_upload_enable=NO

anon_mkdir_write_enable=NO

anon_other_write_enable=NO


则不能上传、创建、删除文件

技术分享













郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。