vsftpd基于mysql进行虚拟用户管理

概述:

    FTP是我们日常工作中经常用到的一个服务,但是FTP对用户的管理却比较薄弱,默认状态下,FTP利用pam机制进行账号管理,默认情况下使用的是系统账号,如何提升FTP对用户管理的有效性,针对不同的用户设定不同的上传权限,这就要基于虚拟账号来管理了,本篇就介绍下在vsftpd利用pam机制,结合mysql实现FTP虚拟账号的管理

    具体包含:

    1、vsftpd的日常配置使用

    2、利用mysql实现虚拟账号管理

环境:

    CentOS7.2 系统,IP为10.1.32.72

第一章    vsftpd的日常配置使用

    

    1、vsftpd服务器端的安装

        yum install vsftpd

    blob.png    

    2、vsftpd的配置文件介绍

[root@localhost ~]# grep -E "^(#[^[:space:]]+|[[:alpha:]]+)" /etc/vsftpd/vsftpd.conf 
anonymous_enable=YES     #####  是否启用匿名账户  #####
local_enable=YES    #####  是否启用本地系统账户  #####
write_enable=YES    #####  本地系统用户是否具有写权限  #####
local_umask=022     #####  本地系统账户上传文件时,文件默认的umask  #####
#anon_upload_enable=YES    #####  匿名账户是否允许上传  #####
#anon_mkdir_write_enable=YES    #####  匿名账户是否可以创建目录  #####
#anon_other_write_enable=NO     #####  匿名账户是否具有其他写操作的权限,如删除操作  #####
dirmessage_enable=YES     #####  目录的欢迎信息,要在目录下创建.message的文件  #####
xferlog_enable=YES    #####  是否启用传输日志  #####
connect_from_port_20=YES    #####  是否允许从20端口进行连接  #####
#chown_uploads=YES    #####  当上传文件时,是否更改文件的属主  #####
#chown_username=whoever    #####  更改文件属主为哪个用户  #####
#xferlog_file=/var/log/xferlog   #####  传输日志存储位置  #####
xferlog_std_format=YES     #####  传输日志格式是否为std标准格式  #####
#idle_session_timeout=600   #####  空闲命令连接的超时时长  #####
#data_connection_timeout=120   #####   数据连接的超时时长 #####
#ftpd_banner=Welcome to blah FTP service.     #####  登录ftp的欢迎信息  #####
#chroot_local_user=YES     #####  是否禁锢系统用户在其家目录  #####
#chroot_list_enable=YES    #####  是否对在/etc/vsftpd/chroot_list中的用户执行禁锢其在家目录  #####
#chroot_list_file=/etc/vsftpd/chroot_list   #####  chroot_list文件路径  #####
pam_service_name=vsftpd    #####  基于pam认证使用到的pam认证的文件名称  #####
userlist_enable=YES    #####  是否启用user_list文件中的用户列表功能  #####
[root@localhost ~]#

    禁锢用户于其家目录的说明:

        如果不禁锢用户于其家目录,那么在用户登录到FTP服务器时,可以切换到任意其具有权限的文件系统路径,可以操作文件系统路径上其具有权限的任意文件,但单纯的禁锢用户于其家目录也会存在风险,因此,如果要禁锢用户到其家目录,一般情况下会要求用户对自己的家目录不能有写权限,这样一来,该系统用户就只能作为FTP的账号登录了,而如果该用户也希望能登录系统,则就不能让其对其家目录只有写权限,故形成了对立的方面

        配置选项中禁锢用户于其家目录的几种方式:     

        <1>禁锢所有用户

            chroot_local_user=YES

            该选项就是让文件系统的用户,以自身用户名密码登录时,禁锢其职能在其家目录中,而不能切换到别的目录中

            注意,设定了chroot后,要将对应用户的家目录的写权限去掉

        <2>禁锢部分用户

            白名单:

                chroot_local_user=YES

                chroot_list_enable=YES

                chroot_list_file=/etc/vsftpd/chroot_list

                表示启用chroot_list列表,定义在文件中的用户将不被禁锢在其家目录

            黑名单:

                chroot_local_user=NO

                chroot_list_enable=YES

                chroot_list_file=/etc/vsftpd/chroot_list

                表示启用chroot_list列表,定义在文件中的用户将被禁锢在其家目录

    

    3、FTP的用户权限应用模型

        FTP的用户的权限,取决于FTP配置文件中其用该具有的权限,和该用户对FTP的文件共享目录的权限的交集

        即是:

            FTP服务有上传权限,但是其文件系统没有写权限,无法正常上传文件

            FTP服务没上传权限,文件系统有写权限,也无法通过FTP登录的方式上传文件

    4、配置nwc用户具有写权限示例

        默认配置的情况下,匿名用户可查看可下载,但不可上传,删除等写操作,系统用户可进行写相关操作

        blob.png        

        blob.png

        blob.png

        blob.png

        blob.png

        blob.png

第二章    vsftpd基于mysql实现虚拟账号的管理

    1、说明:

        通过上述对vsftpd的介绍,我们发现,vsftpd基于系统用户和匿名用户的权限管理是比较粗糙的

            由于vsftpd是基于pam认证,pam针对vsftpd的配置文件(/etc/pam.d/vsftpd中,编译安装此文件默认不存在)定义了在/etc/vsftpd/ftpusers文件中定义的文件系统用户都不允许登录FTP服务器,此机制有centos系统提供的

            用户是否能登录FTP的机制,还有FTP自身提供的配置:

                在/etc/vsftpd/有个文件,是user_list,此文件中定义了受控的用户账号

                该文件有两种用法:

                    一种是黑名单(处理文件中定义的用户,其他用户都能登录),要配合指令:

                        userlist_deny=YES 

                    一种是白名单(只有文件中的用户能登录),要配合指令

                        userlist_deny=NO

        基于虚拟用户,可对每个虚拟用户设定不同的权限,因此权限管理的颗粒度比较小

        所有的虚拟用户都会被映射为一个文件系统用户,因此访问时的文件目录是此系统用户的家目录

        虚拟用户存储位置:文件、MySQL、ldap、redis、…

            hash编码的文件中:

                奇数行为用户名,偶数行为密码

            关系型数据库:

                vsftpd认证机制是基于pam机制的,故vsftpd是否支持利用关系型数据库进行账户认证,取决于pam,而默认情况下,pam是不支持msql数据库的,要想支持,需要借助第三方pam-mysql模块

    2、pam-mysql模块说明

        在centos6系统上,epel仓库中有pam-mysql程序,如果在centos6上,直接yum安装即可

        在centos7系统上,并没有pam-mysql的程序,只能编译安装pam_mysql

        在本实验环境中,采用的是CentOS7的系统,故需要编译安装pam_mysql

    3、准备编译环境,确保"Development Tools"和"Server Platform Development"开发工具包组已经安装

        blob.png

    

    4、安装编译安装pam-mysql时,依赖的程序包mariadb-devel和pam-devel

        blob.png

    5、下载pam-mysql源码包,编译安装

        blob.png

        blob.png

        blob.png

        blob.png

   

    6、在数据库服务器上,创建vsftpd用到的数据库、创建表、插入具体的用户信息

        (本例中数据库服务器就在本机)

        blob.png

        blob.png

    7、修改pam的配置文件,让其利用mysql进行虚拟用户认证

        blob.png

        

    8、为虚拟用户添加本地文件系统用户,因为虚拟用户最终是要映射为某个文件系统用户的

        blob.png

    9、修改vsftpd的配置文件,让其使用虚拟用户认证

        blob.png

    10、修改完配置文件,重启vsftpd服务,验证使用虚拟账户是否能够正常登陆

        blob.png

    11、配置每个虚拟账户具有不同的权限

        blob.png

        修改vsftpd配置文件,让每个虚拟用户拥有不同的权限的定义

        blob.png

        111.png

        定义完后,重启vsftpd服务,然后进行验证

        blob.png

        blob.png

原创文章,作者:M20-1倪文超,如若转载,请注明出处:http://www.178linux.com/52492

(0)
上一篇 2016-10-18 08:23
下一篇 2016-10-18 11:54

相关推荐

  • N26-第十一周

    1、详细描述一次加密通讯的过程,结合图示最佳。     发送方:1、使用单项加密算法计算数据文件的特征码2、使用发送方私钥加密特征码3、使用对称加密算法生成一对临时密钥4、使用临时密钥加密数据文件和加密后的特征码5、使用接收方的公钥加密使用临时密钥加密后的数据和特征码和临时密钥的解密密码,并将之发送给接收方 接收方1、使用接收方的私钥解密…

    2017-04-09
  • RAID各级别特性介绍

        RAID全称为独立磁盘冗余阵列(Redundant Array of Independent Disks):基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、 容量巨大的硬盘。     RAID通常被用在服务器电脑上,使用完全相…

    Linux干货 2016-06-22
  • FHS文件系统各目录功能

    FHS文件系统各目录功能 摘要: 本文主要介绍Linux的文件组织目录结构。 一、Linux 目录结构 在讲 Linux 目录结构之前,你首先要清楚一点东西,那就是 Linux 的目录与 Windows 的目录的区别,或许对于一般操作上的感受来说没有多大不同,但从它们的实现机制来说是完全不同的。 一种不同是体现在目录与存储介质(磁盘,内存,DVD 等)的关系…

    Linux干货 2016-10-18
  • vim编辑器

    vim编辑器三种模式转换 G跳到尾行 gg:跳到首行 H:跳到当前页的首行 L: 跳到当前页的尾行 M: 跳到当前而的中间行 dd: 删除光标所在的行 #dd:多行删除 yy:复制行 #yy: 复制多行  Y: 复制整行 cc:删除当前行并输入新内容 #cc:删除多行 C:删除当前光标到行尾,并切换成插入模式 修改配置文件 全局: /etc/vimrc 用…

    2017-08-05
  • 创建及管理KVM工具之virsh

    一、什么是虚拟化 虚拟化是一个广义的术语,在计算机方面通常是指计算元件在虚拟的基础上而不是真实的基础上运行。虚拟化技术可以扩大硬件的容量,简化软件的重新配置过程。 二、虚拟化能做什么 CPU的虚拟化技术可以单CPU模拟多CPU并行,允许一个平台同时运行多个操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。 三、虚拟化…

    Linux干货 2017-01-19
  • N25期—第一周作业

    计算机的组成及其功能 计算机主要由硬件和软件两部分组成, 硬件目前由5大部件组成 控制器:类似人类的大脑!控制整个计算机的运作 运算器:对数据进行逻辑运算处理 存储器:存放数据部件 输出设备:比如显示器,打印机 输入设备:比如键盘,鼠标 Linux发行版本 主要三大分之:Debian系,Reb Hat系,Slackware系。 1.Debian GNU / …

    Linux干货 2016-12-01