Vsftpd基于MySQL实现用户认证

ftp简介:

  ftpFile Transfer Protocol,文件传输协议;FTP是应用层协议,使用C/S架构,工作于20/tcp21/tcp


  FTP使用交互式访问模式,两个并行TCP连接,一个控制连接,一个数据连接,控制连接用于在客户机和服务器之间发送控制信息,比如用户和密码,改变远程目录和命令,上传下载文件等,数据连接用于真正发送数据。ftp有两种工作模式,主动模式(Active),被动模式(Passive)。


数据:

  命令连接:文件管理类命令,始终在线的连接

  数据连接:数据传输,按需创建及关闭的连接


数据传输格式:

  文本传输

  二进制传输


常用ftp工具:

  Serverwu-ftpdproftpdpureftodvsftpd(Very Secure)ServU

  Clientftplftp(lftpget)wgetcurlfilezillagftpLinux GUI),flashfxpcuteftp


相应码:

  1xx:信息

  2xx:成功类的状态吗

  3xx:提示需进一步提供补充类信息的状态码

  4xx:客户端错误

  5xx:服务端错误

 

两种模式:

主动模式:

wKiom1XWlo2i-YQ8AAHVtZSmH3A059.jpg

1、客户端随机端口N/tcpftp服务器21/tcp端口发送连接请求,tcp三次握手建立控制连接;

2、客户端告知ftp服务器N+1/tcp端口用于数据传输;

3ftp服务器20/tcp端口向N+1/tcp端口发送请求建立数据连接;


被动模式:

wKiom1XWlqzzTgLhAAHNvSzizQ8967.jpg

1、客户端随机端口N/tcpftp服务器21/tcp端口发送连接请求,tcp三次握手建立控制连接;

2ftp服务器告知客户端随机X/tcp用于数据传输;

3、客户端通过N+1/tcp端口向ftp服务器X/tcp端口发送请求建立数据连接;



Vsftpd服务安装配置:

# yum install vsftpd

# rpm -ql vsftpd    :安装vsftpd生成文件:
# /etc/pam.d/vsftpd    :用户认证配置文件;
# /etc/rc.d/init.d/vsftpd    :服务脚本;
# /etc/vsftpd    :配置文件目录;
# vsftpd.conf    :主配置文件;
# /usr/sbin/vsftpd    :主应用程序;


ftp服务的用户有三类:

  系统用户:即服务器系统中存在的用户,其默认访问的资源位置为该用户的家目录;

  匿名用户:不需要账号和密码即可登陆的用户,此类用户会被映射为一个系统用户ftp,默认访问资源为ftp用户的家目录:/vat/ftp      

  虚拟用户:此类用户在ftp服务器中创建,会映射为一个系统用户;


配置文件详解:

# vim /etc/vsftpd/vsftpd.conf


匿名用户配置:

> anonymous_enable=YES|NO    :是否允许登陆;
> anon_mkdir_write_enable=YES|NO    :是否允许上传;
> anon_ohter_write_enable=YES|NO    :是否允许删除文件

  注意:开启以上选项后,客户端使用匿名用户登陆,对/var/ftp目录仍无法上传文件,需要在系统中为ftp用户添加对目录的权限;处于安全考虑可在/var/ftp创建专门用于上传的目录,并添加权限;

# cd /var/ftp/
# mkdir upload
# setfacl -R -m u:ftp:rwx upload/


系统用户配置:

> local_enable=YES|NO    :是否允许登陆;
> write_enable=YES|NO    :是否允许上传;
> local_umask=022    :上传文件默认权限,与系统umask无关;
> chroot_local_user=YES|NO    :是否禁锢所有的ftp本地用户于其家目录中;
> chroot_list_enable=YES|NO    :是否禁锢文件中指定的ftp本地用户于其家目录中;
> chroot_list_file=/etc/vsftpd/chroot_list    :禁锢用户文件路径;
> dirmessage_enable=YES|BO    :用户登录服务器看到信息;

  注意:由于是系统用户登录,此类用户可访问其他的目录,可以通过禁锢选项将系统用户禁锢在其家目录中。


日志选项:

> xferlog_enable=YES|NO    :是否开启;
> xferlog_std_format=YES|NO    :标准格式;
> xferlog_file=/var/log/xferlog    :日志位置;


改变上传文件的属主:

> chown_uploads=YES|NO    :是否改变上传文件的属主;
> chown_username=whoever    :上传文件的属主;


控制用户登录:

> userlist_enable=YES|NO    :是否启用控制用户登录的列表文件;
> userlist_deny=YES|NO    :YES黑名单,NO白名单;默认名单文件为:/etc/vsftpd/user_list;


连接限制:

> max_clients=    :最大并发连接数;
> max_per_ip=    :每个IP可同时发起的并发请求数;


传输速率:

> anon_max_rate=    :匿名用户的最大传输速率, 单位是“字节/秒”;
> local_max_rate=    :本地用户的最大传输速率


vsftpd使用pam完成用户认证,其用到pam

> pam_service_name=vsftpd


虚拟用户:

  所有的虚拟用户会被统一映射为一个指定的系统账号,访问的共享位置即为此系统账号的家目录;各虚拟用户可被赋予不同的访问权限;通过匿名用户的权限控制参数进行指定;


用户认证:

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

    nsswitchnetworkserver switch,名称解析框架;

      配置文件:/etc/nsswitch.conf

      模块:/lib64/libnss*/usr/lib64/libnss*

    pampluggableauthentication module,用户认证框架;

      模块:/lib64/security/

      配置文件:/etc/pam.conf/etc/pam.d/*

 

虚拟用户账号的存储方式:

  文件:编辑文件

     奇数行为用户名

     偶数行为密码

     此文件需要被编码为hash格式;

 

  关系型数据库中的表中:即时查询数据库完成用户认证;

    mysql库:pam要依赖于pam_mysql

# yum install pam_mysql

  注意:pam_mysql来自于epel源;

 


实例:Vsftpd基于MySQL实现用户认证;

工作原理:

wKioL1XWmyiSCH-2AAGAxM8VqbQ042.jpg

实验环境:

  ftp服务器,IP192.168.1.10,操作系统:CentOS6.7 x86_64

  MySQL服务器,IP192.168.1.11,操作系统:CentOS6.7 x86_64

  客户端,IP192.168.1.12,操作系统:CentOS6.7x86_64


实验过程:

MySQL服务器安装配置:

# yum install mysql mysql-server mysql-devel


新建逻辑卷;

# pvcreate /dev/sdb
# vgcreate -s 8M data /dev/sdb
# lvcreate -L 49G -n mydata data
# mke2fs -text4 �b 4096 /dev/data/mydata
# mkdir /data
# vim /etc/fstab
> /dev/data/mydata    /data    ext4    defaults    0 0
# mount �a
# mkdir -p /data/mydata
# chown -R mysql:mysql /data/mydata/
# chmod -R o-rx /data/mydata/


编辑配置文件:

# vim /etc/my.cnf
> [mysqld]
> datadir=/data/mydata


启动服务:

# chkconfig mysqld on
# service mysqld start

 

创建虚拟用户:

# mysql
mysql> CREATE DATABASE ftpdb;

mysql> GRANT SELECT ON ftpdb.* TO ftpuser@'192.168.1.10' IDENTIFIED BY 'ftppass';
 
mysql> FLUSHPRIVILEGES;
 
mysql> USE ftpdb;
 
mysql> CREATE TABLE users (
        -> id INT AUTO_INCREMENT NOT NULL,
        -> name CHAR(50) BINARY NOT NULL,
        -> password VARCHAR(48) BINARY NOT NULL,
        -> PRIMARY KEY(id) );
 
mysql> INSERT INTO users(name,password) VALUES('tom',password('tomtom'));
 
mysql> INSERT INTO users(name,password) VALUES('jim',password('jimjim'));


vsftpd服务器配置:

# yum install vsftpd pam_mysql


创建虚拟用户映射的本地用户:

# mkdir /data
# useradd -s /sbin/nologin -d /data/ftpdir ftpuser
# chmod -R go+rx /data/ftpdir


编辑配置文件:

# vim /etc/vsftpd/vsftpd.conf
> anonymous_enable=YES
> local_enable=YES
> write_enable=YES
> chroot_local_user=YES
>
> pam_service_name=vsftpd.mysql    :指定pam认证文件;

添加以下选项:
> guest_enable=YES    :允许来宾账户;
> guest_username=ftpuser    :映射为系统用户;


创建pam认证文件:

# vim /etc/pam.d/vsftpd.mysql
> auth required /lib64/security/pam_mysql.so user=ftpuser passwd=ftppass host=192.168.1.11 db=ftpdb table=users usercolumn=name passwdcolumn=password crypt=2
> account required /lib64/security/pam_mysql.so user=ftpuser passwd=ftppass host=192.168.1.11 db=ftpdb table=users usercolumn=name passwdcolumn=password crypt=2


为虚拟用户创建单独的配置文件;

# vim /etc/vsftpd/vsftpd.conf
> user_config_dir=/etc/vsftpd/users_config


为虚拟用户提供配置文件:

# mkdir /etc/vsftpd/vusers_config
# touch /etc/vsftpd/vusers_config/{tom,jim}
 
# vim /etc/vsftpd/vusers_config/tom
> anon_upload_enable=YES
> anon_mkdir_write_enable=YES
> anon_other_write_enable=YES
 
# vim /etc/vsftpd/vusers_config/jim
> anon_upload_enable=YES
> anon_mkdir_write_enable=YES
> anon_other_write_enable=YES


启动服务:

# chkconfig vsftpd on
# service vsftpd start


客户端测试:

安装客户端:

# yum install lftp


登陆测试:

wKioL1XWnQzDPm0VAAFs8nLppz8784.jpg

 


结语:

Vsftpd的服务就介绍到这里,试验中如有遗漏和失误,欢迎各路大神来喷。


本文出自 “小马的学习记录” 博客,请务必保留此出处http://masachencer.blog.51cto.com/8683770/1686780

转载于:https://my.oschina.net/masachencer/blog/540869

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值