整合vsftp+pam+mysql—集中管理ftp的虚拟帐号

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

首先简单介绍下基本原理:

vsftp的用户有三种类型,分别是匿名用户、系统用户、虚拟用户

某种意义上来说,匿名用户也是系统用户,只系统用户的一个映射。而公开的ftp(比如虚拟主机),都不会使用系统用户作为ftp的帐号,而更多的采用了虚拟用户,这样能保证系统的安全性

使用虚拟帐号,也就需要一个存放虚拟帐号的容器,可以是一个文本列表,也可以是活动目录,而更多的是使用数据库来存放

在vsftp中,无论系统用户还是虚拟用户,都是使用pam作为用户验证手段的,而在pam中默认是不支持mysql模块的,所以要手动编译安装mysql模块

 

整体思路是这样的:

以pam为用户认证的中间层调用和验证mysql中的虚拟用户数据。在vsftp中开启虚拟用户认证,认证方法调用pam中的mysql认证和授权模块,将虚拟用户存放于mysql中。

 

step1:

首先安装vsftp和mysql

[root@localhost ~]#yum install vsftpd mysql-server mysql-devel pam-devel -y

在PAM中默认是没有mysql认证模块的,所以要下载源码自己手动安装

[root@localhost ~]# tar -xf pam_mysql-0.7RC1.tar.gz -C /usr/src/

[root@localhost ~]# cd /usr/src/pam_mysql-0.7RC1

[root@localhost pam_mysql-0.7RC1]# ./configure --with-mysql=/usr/bin/mysql_config

[root@localhost pam_mysql-0.7RC1]# make && make install

 

step2:

安装好后启动mysql

[root@localhost ~]# service mysqld start

[root@localhost ~]# mysql -uroot -p

首先先创建vsftp的数据库

mysql> CREATE DATABASE vsftpd;

然后创建一个用户表

mysql> use vsftpd

mysql> create table users (

-> id int AUTO_INCREMENT NOT NULL,

-> name char(20) NOT NULL UNIQUE KEY,

-> passwd char(48) NOT NULL,

-> primary key(id)

-> ); 

添加vsftpd的数据库帐号

mysql> insert into users(name,passwd) values('lustlost',password('123456')); \

然后创建vsftpd的数据库账户,为了安全,只授予查询权限

mysql> GRANT select on vsftpd.* to vsftpd@localhost identified by '123456'

mysql> GRANT select on vsftpd.* to vsftpd@127.0.0.1 identified by '123456' ;

step3:

编辑vsftp配置文件,参考我的配置

 

 
  1. [root@localhost ~]# vim /etc/vsftpd/vsftpd.conf 
  2.  
  3. [root@localhost ~]# grep -v "^#" /etc/vsftpd/vsftpd.conf 
  4.  
  5. anonymous_enable=YES 
  6.  
  7. local_enable=YES 
  8.  
  9. write_enable=YES 
  10.  
  11. local_umask=022 
  12.  
  13. anon_upload_enable=YES 
  14.  
  15. anon_mkdir_write_enable=YES 
  16.  
  17. dirmessage_enable=YES 
  18.  
  19. xferlog_enable=YES 
  20.  
  21. connect_from_port_20=YES 
  22.  
  23. xferlog_std_format=YES 
  24.  
  25. chroot_local_user=YES 
  26.  
  27. listen=YES 
  28.  
  29. pam_service_name=vsftpd.mysql #主要修改这一行,指定使用vsftpd.mysql这个pam配置文件调用pam认证 
  30.  
  31. guest_enable=YES #开启来宾账户 
  32.  
  33. guest_usernamemysqlftp #映射来宾账户,这个账户将会被映射为mysql数据库中的账户 
  34.  
  35. user_config_dir=/etc/vsftpd/vsftpd_user_conf #创建mysql每个虚拟用户的配置目录 

 

编辑pam配置文件,参考我的配置

[root@localhost ~]# cp /etc/pam.d/vsftpd /etc/pam.d/vsftpd.mysql #复制原来的vsftp认证方法,在此基础上添加mysql认证

编辑PAM认证配置文件

[root@localhost ~]# vim /etc/pam.d/vsftpd.mysql

 

 
  1. #%PAM-1.0 
  2.  
  3. session         optional        pam_keyinit.so    force revoke 
  4.  
  5. #第一步认证首先使用数据库认证,如果通过不再检查下面其它认证,直接登陆,通不过就使用下面的认证 
  6.  
  7. auth            sufficient      /usr/lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdpasswdcolumn=passwd crypt=2 
  8.  
  9. #数据库认证通不过,就采用vsftp默认的其余认证方法 
  10.  
  11. auth            required        pam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed 
  12.  
  13. auth            required        pam_shells.so 
  14.  
  15. auth            include         password-auth 
  16.  
  17. #授权和认证也是一样的 
  18.  
  19. account         sufficient      /usr/lib/security/pam_mysql.so user=vsftpd passwd=123456 host=localhost db=vsftpd table=users usercolumn=name passwdpasswdcolumn=passwd crypt=2 
  20.  
  21. account         include         password-auth 
  22.  
  23. session         required        pam_loginuid.so 
  24.  
  25. session         include         password-auth 

以上的PAM配置既可以使用mysql数据库中的用户认证,也可以使用系统用户认证,如果只希望使用mysql数据库中的用户认证的话,可以讲系统认证的配置相关行删除

 

step4:

添加mysql用户认证的虚拟用户

[root@localhost ~]# useradd mysqlftp -d /var/ftp/pub/mysqlftp

修改mysql虚拟账户的权限

[root@localhost ~]# chown mysqlftp:mysqlftp -R /var/ftp/pub/mysqlftp

创建mysql虚拟账户配置文件夹

[root@localhost ~]# mkdir /etc/vsftpd/vsftpd_user_conf

在此文件夹下配置每个mysql虚拟账户的配置文件

[root@localhost vsftpd_user_conf]# touch lustlost

local_root=/var/ftp/pub/mysqlftp/lustlost #其余配置可以自己按需求写,这里只限制了mysql虚拟用户的个人文件夹

在lustlost目录中创建一个文件验证结果

[root@localhost vsftpd_user_conf]# touch /var/ftp/pub/mysqlftp/lustlost/l.txt

wps_clip_image-919

也可以使用quota实现用户的磁盘配额,也结合php,apache,可以实现虚拟主机的搭建。



本文转自lustlost 51CTO博客,原文链接:http://blog.51cto.com/lustlost/959553,如需转载请自行联系原作者

相关文章
|
Linux 网络安全 数据安全/隐私保护
CentOS 7安装配置vsftp并搭建FTP(一)
CentOS 7安装配置vsftp并搭建FTP(一)
24427 0
CentOS 7安装配置vsftp并搭建FTP(一)
|
关系型数据库 MySQL 应用服务中间件
centos6.5 开发环境部署(nignx1.7.10+php5.4.38+mysql+ftp)
一些命令和规则以及准备 本次流程再 DigitalOcean上的vps上通过   查看是否已经安装 rpm -qa | grep nginx 删除安装 #普通删除模式 rpm -e nginx #强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除...
1176 0
|
Linux
vsftp 基于虚拟用户的ftp服务器 如何做配额
做配额的方法: 1,是用磁盘配额,但是虚拟用户好像没有好办法。只能应用于本地用户。与Vsftpd设置无关 2,文件夹限制大小,是占用的。这和Vsftpd没有关系 所以可以先把用户禁锢在自己工作目录里面,然后结合第2个方法 Linux下如何限制单个文件夹大小  需要root权限 创建一个指定大小的磁盘镜像文件: dd if=/dev/zero of=/root/augusite/disk.img bs=2M count=10 这样就创建了一个大小为20M的磁盘镜像。
1414 0
|
开发工具
vsftp为不同用户设置不同的ftp的根目录
需求要求ftp登录后的根目录是/var/test/,但是又不能影响其他用户的登录路径,因为有些程序是直接在根目录进行操作的,而没有目录切换的过程。操作过程新建用户useradd test1useradd test2passwd test1passwd test2vsftpd配置# 用户登录路径,lo...
2191 0
|
安全 Linux 开发工具
VSFTP FTP服务器安装与配置(转载)
1. Vsftpd文件共享 1.1简介 Vsftpd是“very secure FTP daemon”的缩写,是一款非常安全的FTP软件。支持IPv6以及SSL加密。
1447 0
|
数据安全/隐私保护 安全 Linux