基于虚拟用户控制的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

相关推荐

  • bond的常见使用方式和问题

    bond的简单建立于事项

    2017-09-09
  • MogileFS基于Nginx反向代理实现分布式存储与访问

    前言 随着信息社会的发展,越来越多的信息被数据化,尤其是伴随着大数据时代的来临,数据呈爆炸式增长。传统存储在面对海量数据存储表现出的力不从心已经是不争的事实,例如:纵向扩展受阵列空间限制,横向扩展受交换设备限制,节点受文件系统限制等。而分布式存储的出现在一定程度上有效的缓解了这一问题,目前比较流行的分布式文件系统有:GFS、HDFS、GlusterFS、Mo…

    Linux干货 2015-07-08
  • 马哥教育网络班21期+第四周课程练习

    1、复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 ~]# cp -r /etc/skel /home/tuser1; chmod -R gx=— /home/tuser1 [root@mag…

    Linux干货 2016-08-02
  • 第六周博客作业

                   1、复制/etc/rc.d/rc.sysinit文件至/tmp目录,将/tmp/rc.sysinit文件中的以至少一个空白字符开头的行的行首加#; %s@^[[:space:]]\+[^[:…

    Linux干货 2016-12-05
  • NoSQL理论基础及安装、基本操作

    30分钟开始 分布式系统理论: CAP: 一致性 可用性 分区容错性     MongoDB: 安装 crud 索引 副本集 分片   NoSQL:非关系型、分布式、不提供ACID功能 技术特点: 1、简单数据模型 2、元数据和应用数据分离(分不同服务器存储) 3、弱一致性   优势: 1、避免不必要的复杂性 2、高吞…

    2016-11-27
  • RAID( Blob3 )

    RAID各级别特性及使用

    2017-11-27