vsftp匿名用户,本地用户,虚拟用户+mysql认证详情配置

一,简介

    vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开发源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。注意这个是linux系统上必须掌握的基础服务之一。工作中各种上传下载都要用到它。--松鼠&青蛙



                                      vsftp匿名用户,本地用户,虚拟用户mysql认证详情配置_ftp虚拟用户

下面数据传输端口计算227*256+73

                            vsftp匿名用户,本地用户,虚拟用户mysql认证详情配置_虚拟用户mysql验证_02


用户认证分为匿名用户,本地用户,虚拟用户:

nsswitch:network server switch,名称解析框架

配置文件:/etc/nsswitch.conf

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

pam:pluggable authentication module,用户认证框架

模块:/lib64/security

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

  匿名用户:Anonymous

  本地用户:

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



配置文件

centos 6.5 vsftpd


/etc/logrotate.d/vsftpd   完成日志滚动

/etc/pam.d/vsftpd  用户认证配置文件

/etc/rc.d/init.d/vsftpd 服务脚本

/etc/vsftpd  配置文件

/var/ftp匿名用户共享资源位置 ftp用户家目录就是/var/ftp/  

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

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


二,匿名用户配置

anonymous_enable=YES   启用匿名用户

anon_upload_enable=YES  匿名用户上传权限

anon_mkdir_write_enable=YES 匿名创建目录权限

anon_other_write_enable=YES 匿名删除文件权限 

    

        

        注意还必须给匿名用户主目录授权

setfacl -m u:ftp:rwx /var/ftp/pub/  给匿名用户目录权限读写权限


三,本地用户配置

local_enable=YES 本地用户上传文件

write_enable=YES

local_umask=022 本地用上传文件默认的文件权限


禁锢所有的ftp本地用户于其家目录中

chroot_local_user=YES


或只锁定指定用户与其家目录中

chroot_list_enable=YES

chroot_list_file=/etc/vsftpd/chroot_list  在此文件中锁定用户



信息验证查看

cat /var/log/secure用户登录验证信息



其他设置

给关键目录添加警告说明提示信息

dirmessage_enable=YES目录消息用户访问目录是反馈的信息

在ftp对应的目录下echo "hello world" > .message


日志:

传输日志put,get的user信息

xferlog_enable=YES

xferlog_file=/var/log/xferlog

xferlog_std_format=YES指定日志格式



用户上传文件属主

chown_uploads=YES 是否改变上传文件的属主

chown_username=whoever  改成哪个系统用户



空闲会话超时时长

idle_session_timeout=600


数据链接超时时长

data_connection_timeout=120



不建议启用:文本格式上传下载;强制如果本来是二进制程序,上传下载会出现问题。

#ascii_upload_enable=YES

#ascii_download_enable=YES




欢迎信息

#ftpd_banner=Welcome to blah FTP service.




黑白名单控制

    vsftpd使用pam完成用户认证,其用到的pam配置文件 /etc/vsftpd/ftpusers黑名单

        

    pam_service_name=vsftpd

    

    [root@localhost pam.d]# cat vsftpd 

    #%PAM-1.0

    会话session    optional     pam_keyinit.so    force revoke

    认证auth       requiredpam_listfile.so item=user sense=deny file=/etc/vsftpd/ftpusers onerr=succeed(终止)黑名单

        auth       requiredpam_shells.so

        auth       includepassword-auth

    账号account    includepassword-auth

        session    required     pam_loginuid.so

        session    includepassword-auth




    vsftpd不使用pam自己控制用户登录的列表文件/etc/vsftpd/user_list

    userlist_enable=YES是否启用这个文件控制用户登录

    userlist_deny=YES|NO   出现在这个文件中的用户就拒绝或允许





速率限制

链接限制:

max_clients:最大并发连接数

max_per_ip:每个ip可同时发起的并发请求数;


传输速率:

anon_max_rate:所有匿名用户的一共最大传输速率,单位是"字节/秒"

local_max_rate:本地用户



四,虚拟用户

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


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

    文件:编辑文件

奇数行为用户

偶数行为密码

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


    关系型数据库中的表中:

计数查询数据库完成用户认证;

mysql库,此时pam要依赖pam_mysql模块

pam_mysql的使用说明



配置文档


一、安装所需要程序


1、安装mysql和pam_mysql


# yum -y install  mysql-server mysql-devel pam_mysql


注意:pam_mysql由epel源提供。


二、创建虚拟用户账号


1.准备数据库及相关表


首先请确保mysql服务已经正常启动。而后,按需要建立存储虚拟用户的数据库即可,这里将其创建为vsftpd数据库。


mysql> create database vsftpd;


mysql> grant select on vsftpd.* to vsftpd@localhost identified by 'www.magedu.com';

mysql> grant select on vsftpd.* to vsftpd@127.0.0.1 identified by 'www.magedu.com';

mysql> flush privileges;


mysql> use vsftpd;

mysql> create table users (

 id int AUTO_INCREMENT NOT NULL,

 name char(20) binary NOT NULL,

password char(48) binary NOT NULL,

 primary key(id)

 );


2、添加测试的虚拟用户


根据需要添加所需要的用户,需要说明的是,这里将其密码为了安全起见应该使用PASSWORD函数加密后存储。


mysql> insert into users(name,password) values('magedu1',password('magedu'));

mysql> insert into users(name,password) values('magedu2',password('magedu'));



三、配置vsftpd


1.建立pam认证所需文件


#vi /etc/pam.d/vsftpd.mysql

添加如下两行

auth required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required /lib64/security/pam_mysql.so user=vsftpd passwd=www.magedu.com host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2



crypt (plain)


    The method to encrypt the user's password:


       0 (or "plain") = No encryption.  Passwords stored in plaintext.

                        HIGHLY DISCOURAGED.  没加密


       1 (or "Y")     = Use crypt(3) function. 加密的


       2 (or "mysql") = Use MySQL PASSWORD() function. It is possible

                        that the encryption function used by PAM-MySQL

                        is different from that of the MySQL server, as

                        PAM-MySQL uses the function defined in MySQL's

                        C-client API instead of using PASSWORD() SQL function

                        in the query.   MySQL PASSWORD()加密的

                        

       3 (or "md5")   = Use plain hex MD5.


       4 (or "sha1")  = Use plain hex SHA



注意:由于mysql的安装方式不同,pam_mysql.so基于unix sock连接mysql服务器时可能会出问题,此时,建议授权一个可远程连接的mysql并访问vsftpd数据库的用户。


2.修改vsftpd的配置文件,使其适应mysql认证


建立虚拟用户映射的系统用户及对应的目录

# useradd -s /sbin/nologin -d /var/ftproot vuser     -s为了不让用户登录

# chmod go+rx /var/ftproot   其他用户能读能进入


请确保/etc/vsftpd.conf中已经启用了以下选项

anonymous_enable=NO

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



四、启动vsftpd服务


# service vsftpd start

# chkconfig vsftpd on


查看端口开启情况


# netstat -tnlp |grep :21

tcp        0      0 0.0.0.0:21              0.0.0.0:*               LISTEN      23286/vsftpd 


使用虚拟用户登录,验正配置结果,以下为本机的命令方式测试,你也可以在其它Win Box上用IE或者FTP客户端工具登录验正

# ftp localhost




五、配置虚拟用户具有不同的访问权限。本地用户映射到虚拟用户其实是匿名用户权限


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


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


# vim vsftpd.conf

添加如下选项

user_config_dir=/etc/vsftpd/vusers_config 


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


# mkdir /etc/vsftpd/vusers_config/

# cd /etc/vsftpd/vusers_config/

# touch tom jerry


3、配置虚拟用户的访问权限


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

anon_upload_enable={YES|NO}

anon_mkdir_write_enable={YES|NO}

anon_other_write_enable={YES|NO}










pam验证

1.生成虚拟用户口令库文件。为了建立此口令库文件,先要生成一个文本文件。该文件的格式如下,单数行为用户名,偶数行为口令:


#vi account.txt

magedu1

magedu

magedu2

magedu



2.生成口令库文件,并修改其权限:


#db_load -T -t hash -f ./account.txt /etc/vsftpd/account.db

#chmod 600 /etc/vsftpd/account.db

 



3.新建一个虚拟用户的PAM文件。加上如下两行内容:


#vi /etc/pam.d/vsftp.pam

auth required /lib/security/pam_userdb.so db=/etc/vsftpd/account

account required /lib/security/pam_userdb.so db=/etc/vsftpd/account


4,建立虚拟用户映射的系统用户及对应的目录

# useradd -s /sbin/nologin -d /var/ftproot vuser     -s为了不让用户登录

# chmod go+rx /var/ftproot   其他用户能读能进入



pam_service_name=vsftp.pam