FTP基于PAM和MySQL/MariaDB实现虚拟用户访问控制

前言

vsftpd是一款在Linux发行版中最受 推崇的FTP服务器程序,特点是小巧轻快,安全易用,目前在开源操作系统中常用的FTP套件主要有proftpd、pureftp、ServU和wu- ftpd等。本文将讲解vsftpd的基本功能和如何基于PAM和MySQL/MariaDB实现虚拟用户访问控制。

基础配置介绍

工作原理

状态响应码

1xx:信息码

2xx:成功状态码

3xx:进一步提示补全信息的状态码

4xx:客户端错误

5xx:服务器端错误

用户认证

虚拟用户:仅用于访问某特定服务中的资源

nsswitch: network server switch, 名称解析框架
		配置文件:/etc/nsswitch.conf		模块:/lib64/libnss*, /usr/lib64/libnss*pam: pluggable authentication module, 用户认证框架
		模块:/lib64/security/
		配置文件:/etc/pam.conf, /etc/pam.d/*

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

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

配置文件

vsftpd在CentOS6.6的配置文件

用户认证配置文件:/etc/pam.d/vsftpd服务脚本:/etc/rc.d/init.d/vsftpd配置文件目录:/etc/vsftpd主配置文件:/etc/vsftpd/vsftpd.conf匿名用户(映射为ftp用户)共享资源位置:/var/ftp

配置文件详解

匿名用户的设置    anonymous_enable=YES:允许匿名登录    anonymous_upload_enable=YES:允许上传文件    anonymous_other_write_enable=YES:允许删除文件    anonymous_mkdir_write_enable=YES:允许创建目录    注:启用此功能,ftp用户对/var/ftp目录仍无权限,可在/var/ftp/目录下新建目录,    如/var/ftp/upload/,并给ftp用户设置权限 setfacl -m u:ftp:rw /var/ftp/upload系统用户的配置    local_enable=YES:允许登录    write_enable=YES:允许上传文件禁锢所有的ftp本地用户于其家目录中    chroot_local_user={YES|NO}禁锢指定用户于家目录中    chroot_list_enable=YES
    chroot_list_file=/etc/vsftpd/chroot_list 日志配置    xferlog_enable=YES
    xferlog_std_format=YES
    xferlog_file=/var/log/xferlog改变上传文件的属主    chown_uploads=YES
    chown_username=whoever上传文件的umask
    anon_umask:匿名用户上传文件的umask
    local_umask:本地用户上传文件的umask
vsftpd使用pam完成用户认证,其用到的pam配置文件    pam_service_name=vsftpd
    控制用户登录:/etc/vsftpd/ftpusers中的用户都不允许使用ftp服务,基于pam是否启用控制用户登录的列表文件    userlist_enable=YES
    userlist_deny=YES|NO
    默认文件为/etc/vsftpd/user_list连接限制    max_clients: 最大并发连接数    max_per_ip: 每个IP可同时发起的并发请求数传输速率    anon_max_rate:匿名用户的最大传输速率,单位是bytes/s
    local_max_rate:本地用户的最大传输速率,单位是bytes/s自定义信息配置        ftpd_banner=Welcome to FTP Server #自定义        dirmessage_enable=YES   #需创建.message文件

虚拟用户访问控制

虚拟用户

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

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

虚拟用户的存放方式:

hash编码的文件(奇数行为用户名,偶数行为密码)

关系型数据库(通过第三方模块pam-mysql实现认证)

工作原理

配置过程

环境准备

FTP服务器:172.16.10.10(CentOS6.6)

数据库服务器:172.16.10.211(CentOS6.6),MariaDB

安装所需程序

首先FTP服务器需要安装vsftpd和pam_mysql,数据库服务器需要安装MySQL或者MariaDB,我这里已经安装完毕了,就直接开始配置了

创建虚拟用户

[root@MariaDB ~]# mysqlMariaDB [(none)]> CREATE DATABASE vsftpd;MariaDB [(none)]> use vsftpd;MariaDB [vsftpd]> GRANT SELECT ON vsftpd.* TO vsftp@'172.16.10.10' IDENTIFIED BY 'vpass';MariaDB [vsftpd]> FLUSH PRIVILEGES;MariaDB [vsftpd]> CREATE TABLE users (    -> id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,    -> name VARCHAR(50) BINARY NOT NULL, 
    -> password CHAR(48) BINARY NOT NULL );#添加虚拟用户   MariaDB [vsftpd]> INSERT INTO users (name,password) VALUES ('tom',password('scholar'));#password('PASSWORD')加密密码MariaDB [vsftpd]> INSERT INTO users (name,password) VALUES ('alice',password('scholar'));

vsftpd配置

[root@lab ~]# vim /etc/pam.d/vsftpd.mysql  #创建pam认证文件auth required pam_mysql.so user=vsftp passwd=vpass host=172.16.10.211 db=vsftpd 
table=users usercolumn=name passwdcolumn=password crypt=2 #密码经过加密,crypt值为2account required pam_mysql.so user=vsftp passwd=vpass host=172.16.10.211 db=vsftpd 
table=users usercolumn=name passwdcolumn=password crypt=2[root@lab ~]# useradd -s /sbin/nologin -d /var/ftproot vuser#创建虚拟用户映射的系统用户及对应的目录[root@lab ~]# chmod go+rx /var/ftproot  #给予权限[root@lab ~]# vim /etc/vsftpd/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认证文件

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

vsftpd可以在配置文件目录中为每个用户提供单独的配置文件以定义其ftp服务访问权限,每个虚拟用户的配置文件名同虚拟用户的用户名。配置文件目录可以是任意未使用目录,只需要在vsftpd.conf指定其路径及名称即可。

配置vsftpd为虚拟用户使用配置文件目录

[root@lab ~]# vim /etc/vsftpd/vsftpd.conf#添加如下选项user_config_dir=/etc/vsftpd/vusers_config

创建所需要目录,并为虚拟用户提供配置文件

[root@lab ~]# mkdir /etc/vsftpd/vusers_config[root@lab ~]# cd /etc/vsftpd/vusers_config/[root@lab vusers_config]# touch tom alice

配置虚拟用户的访问权限

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

[root@lab vusers_config]# vim tomanon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES[root@lab vusers_config]# vim alice anon_upload_enable=NO
anon_mkdir_write_enable=NO
anon_other_write_enable=NO

启动服务,设置开机自启,查看21端口是否被监听

测试虚拟用户

The end

好了,FTP基于PAM和MySQL/MariaDB的 虚拟用户访问控制,就说到这里啦,配置ftp过程中请确保不要敲多空格,否则是会报错或者登录失败的,我就深受其害,这确实是个坑,部署过程中遇到问题可 留言,多谢关注呦。以上仅为个人学习整理,如有错漏,大神勿喷~~~

原文发布于微信公众号 - 马哥Linux运维(magedu-Linux)

原文发表时间:2015-04-23

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏软件工程师成长笔记

centOS7安装MySQL流程介绍

1、隐藏密码 如:MySQL 连接远程数据库(192.168.5.116),端口“3306”,用户名为“root”,密码“123456”(这是我乱写的地址哈)...

26420
来自专栏阮一峰的网络日志

PostgreSQL新手入门

自从MySQL被Oracle收购以后,PostgreSQL逐渐成为开源关系型数据库的首选。 本文介绍PostgreSQL的安装和基本用法,供初次使用者上手。以下...

46140
来自专栏张秀云的专栏

MySQL 压缩解决方案(一)

本文描述 mysql 压缩的使用场景和解决方案,包括压缩传输协议、压缩列解决方案和压缩表解决方案。

3.4K10
来自专栏乐沙弥的世界

记一次SQL server 2005 到SQL server 2008 数据库迁移

    最近周末完成了一个从SQL server 2005升级到SQL server 2008的升级迁移,其实质是一个服务器迁移的过程。比较复杂的是这个服务器上...

19840
来自专栏高爽的专栏

增量接口的设计及实现

引言 在应用开发过程中,我们总会碰到这样的场景:某系统需要同步我们系统的数据去做一些业务逻辑,当数据量较小的时候,可以全量的提供,但当数据量很大时,全量提供就显...

47100
来自专栏iMySQL的专栏

MySQL FAQ 系列 : 如何安全地关闭 MySQL 实例

本文分析了 mysqld 进程关闭的过程,以及如何安全、缓和地关闭 MySQL 实例,对这个过程不甚清楚的同学可以参考下。

31300
来自专栏行者常至

(三)solr的dataimport的配置以及中文分词

并可以在apache-tomcat-7.0.73\webapps\solr\WEB-INF\classes下新建自己的扩展词典

20210
来自专栏别先生

一脸懵逼学习oracle(图形化界面操作---》PLSQL图形化界面)

1:经过几天的折腾,终于将oracle安装成功,创建用户,授权等等操作,接下来就安安心心学习oracle; 安装好PLSQL图形化界面和汉化以后(过程自己百度吧...

22050
来自专栏数据和云

Oracle 12.2新特性掌上手册 - 第一卷 Availability

注:文章内容来自官方文档翻译。若需要了解更多,请查阅官方文档。 1、Multi-Instance Redo Apply (多实例redo应用) 在Oracle ...

39860
来自专栏大白虾谈架构

CentOS6.5安装mysql5.1.73

13230

扫码关注云+社区

领取腾讯云代金券