基于虚拟用户控制的ftp服务

FTP作为最常见的文件共享服务,可提供文件的上传,下载等服务;其用户可分为三类:

匿名用户:即不需要用户账号与密码即可登录FTP服务器,此时登录用户将会被映射为系统上的ftp用户。

系统用户:即用FTP服务器上的用户账号与密码登录FTP服务器。此种方法虽然在一定程度上对登录做出了限制,但由于系统账号的相关权限,则增大了FTP服务器的系统风险;

虚拟用户:用户需要利用专为FTP服务创建的用户账号与密码进行登录;如此,既能限制FTP的登录用户,又尽量保证了FTP服务器的系统安全;

下面我们就以CentOS7为例来实现基于mysqlFTP服务设置虚拟用户登录。

1、环境搭建;

首先,我们需要在系统上安装vsftpdmariadb-server,由于需要实现虚拟用户认证,所以我们还需要安装pam

yum –y install vsftpd mariadb-server pam

由于基于mysql数据库实现虚拟用户认证,所以我们需要将虚拟用户的相关数据存放在mysql中,如此一来,我们还需要安装pam_mysql。由于CentOS7上没有pam_mysqlrpm包,所以我们需要编译安装。具体步骤如下:

yum –y groupinstall “Development Tools” “Server Platform Development”      #安装开发包组    
yum –y install –y pam-devel mairadb-devel                                               #安装所需开发包
./configure –with-pam=/usr –with-mysql=/usr –with-pam-mods-dir=/usr/lib64/security
make
mke install

至此,我们需要的环境搭建完成。

2vsftpd常用选项;

vsftpd的配置文件主要为/etc/vsftpd/vsftpd.conf,我们以用户相关作为分类来了解一下其常见配置;

匿名用户相关配置:

anonymous_enable=YES|NO                #是否允许匿名用户登录;    
anon_upload_enable=YES|NO               #是否允许匿名用户上传;
anon_mkdir_write_enable=YES|NO            #是否允许匿名用户创建文件夹;
anon_other_write_enable=YES|NO            #是否允许匿名用户拥有其他写权限,如删除、新建文件等;

系统用户相关配置:

local_enable=YES|NO             #是否允许系统用户登录;    
write_enable=YES|NO             #是否允许系统用户具有写权限;

3mysql相关配置;

我们需要在mysql中配置vsftpd服务所需的一些数据库及内容;

a、启动mysql服务;

systemctl start mariadb.service

b、初始化mysql

mysql_secure_installation

c、创建所需数据库及表格;

mysql> create database vsftpd;        
mysql> use vsftpd;
mysql> create table user (id int unsigned not null auto_increment primary key,name char(10) not null,password char(48));
mysql> insert into user (name,password) values (‘tom’,password(‘mageedu’)),(‘jerry’,password(‘mageedu’));
mysql> grant all on vsftpd.* to ‘vsftpd’@’localhost’ identified by ‘mageedu’;
mysql> grant all on vsftpd.* to ‘vsftpd’@’127.0.0.1’ identified by ‘mageedu’;
mysql> flush privileges;

可以看到,我们创建了tomjerry两个用户,且密码都为mageedu,如此,我们在mysql中需要创建的相关数据已经完成;

4、创建所需用户与目录;

由于FTP的虚拟用户机制是将虚拟用户映射为本机的一个来宾用户,因此我们先在本机新建一个用户作为虚拟用户的映射用户;

ueradd –d /ftproot vuser        
chown root:root /ftproot
mkdir /ftproot/{upload,pub}
setfacl –m u:vuser:rwx /ftproot/upload

5、配置pamvsftpd

首先我们需要修改vsftpd的几项配置选项如下:

pam_server_name=vsftpd.mysql                 #指定pam的相关配置文件;        
guest_enable=YES                       #启用来宾账户;
guest_username=vuser                     #指定虚拟用户映射的来宾账户名;
user_config_dir=/etc/vsftpd/user_conf             #指定虚拟用户配置文件目录;

然后我们在/etc/pam.d/目录下新建文件vsftpd.myslq,内容如下:

auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=2        
account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=user usercolumn=name passwdcolumn=password crypt=2

下面即为此文件中一些字段的意义:

    user:连接mysql服务器的用户名,此用户要有权限访问认证vsftpd服务的数据库;

    passwd:连接mysql服务器用户的密码;

    hostmysql服务器主机地址;

    db:认证vsftpd服务的数据库名称;

    table:存放了用户和密码的表;

    usercolumn:用户名对应的字段;

    passwdcolumn:密码对应的字段;

    crypt:密码加密方法

6、创建各虚拟用户配置文件

首先我们新建vsftpd.conf配置文件中指定的用户配置文件存放目录。

mkdir /etc/vsftpd/user_conf

然后在此目录下创建tomjerry两个虚拟用户同名的权限配置文件。对于权限配置文件我们可根据需要给予相应的权限,在此,我们为两位用户给予相同的权限,内容如下:

vim –o /etc/vsftpd/user_conf/{tom,jerry}        
anon_upload=YES
anon_mkdir_enable=YES
anon_other_enable=YES

至此,我们所需的服务以配置完毕。

设置好防火墙与SELinux后,启动服务即可。

iptables –F        
setenforce 0
systemctl start vsftpd

 

原创文章,作者:luoliumeng,如若转载,请注明出处:http://www.178linux.com/53777

(0)
luoliumengluoliumeng
上一篇 2016-10-23 19:53
下一篇 2016-10-23 19:58

相关推荐

  • 计算机组成原理

                                 计算机组成原理 Linux 操作系统是UNIX 操作系统的一种克隆系统。它诞生于1991 年的10 月5 日(这是第一次正式向外公布的时间)。以后借助于…

    Linux干货 2016-10-27
  • RAID概述

    1、引言 RAID全称Redundant Arrays of Inexpensive Disks / Redundant Arrays of Independent Disks,即独立冗余磁盘阵列。RAID可以通过相关技术(软件/硬件),将多个较小的磁盘整合成为一个较大的磁盘整体,而且能从某些方面提高数据的读写及数据保护。RAID分为不同…

    Linux干货 2016-12-24
  • RAID配置管理

    RAID:Redundant Arrays Indexpensive Disks     多个磁盘组合成一个阵列,来提供更好的性能、冗余     提高IO功能:         磁盘并行读写 &nbs…

    Linux干货 2016-09-01
  • linux上的文件查找工具:locate和find

    一、非实时超找工具 locate     1、locate是查询系统上预建的文件索引数据库/var/lib/mlocate/mlocate.db文件索引实在系统比较空闲的时候自动进行的,是系统的周期性任务,因为是周期性任务,所以有些短期的数据无法更新到数据库,如果需要马上应用,乣管理员手动更新数据库,用命令updatedb来执行。同时索引…

    Linux干货 2016-08-16
  • N21第五周

    1.显示/boot/grub2/grub.cfg中以至少一个空白字符开头的行; ]# grep '^[[:space:]]\+' /boot/grub2/grub.cfg 2.显示/etc/rc.d/init.d/functions文件中以#开头,后面跟至少一个空白字符,而后又有至少一个非空白字符的行; ]#…

    Linux干货 2016-08-15
  • shell脚本之变量类型、算数运算符、条件测试

    一、bash中的变量类型     本地变量:仅对当前shell有效,对其子shell无效             变量赋值:name=value      &n…

    Linux干货 2016-08-15