ftp基于mysql_搭建FTP-----实现基于mysql验证的虚拟用户

前言:

在上一篇博客中,我们已经实现了基于文件认证的ftp服务,不过此方法也存在不少问题,比如过用户数据不好管理呀,以明文存储不安全呀。不能把用户数据单独存放在其他服务器呀等等。所以此次我们把用户数据放在mysql中,然后通过pam模块去mysql中找用户数据来实现认证。主体的过程和上篇区别不大~那我们就开始把~

正文:

此次,我们的环境是centos6,因为centos7中的pam_mysql模块得自己手动编译,所以就先使用centos6,不过两者区别也不大,而且编译pam_mysql模块也不难。老规矩,第一步先安装要使用到的程序:yum install vsftpd mysql-server pam_mysql

此次我们依然使用系统的ftp用户来作为虚拟用户登录后的guest。当然,也可以自行创建新的用户,此处就不再演示啦~在centos7中记住一点,用户的家目录,用户不可以有写权限哟。好吧,我们先在mysql中创建认证需要的数据库和表~先启动mysql服务#service mysqld start

#mysql                    #用mysql命令以匿名的方式连接到数据库

#mysql>CREATE DATABASE vsftpd; #创建名为vsftpd的数据库

mysql> GRANT SELECT ON vsftpd.* TO vsftpd@localhost IDENTIFIED BY '1234';  #给mysql用户 vsftpd权限,让其有查询权限,且密码为1234,因为我们的mysqld和vsftpd在同一服务器,所以host填写的是localhost,如果你们的mysql在单独的服务器就添服务器的地址啦~

mysql>FLUSH PRIVILEGES;

mysql>USE vsftpd;  #进入我们的数据库,开始创建表啦~~

mysql>CREATE TABLE users (id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,name CHAR(50)

BINARY NOT NULL,password CHAR(48) BINARY NOT NULL);  #创建一个名为users的表,有三个字段分别是id为整型,主键,并且可以自增,name字段 是有50位的字符串,不能为空,password字段,因为我们还要对密码进行加密处理,处理后的长度是48位,所以长度是48 且不能为空

mysql> INSERT INTO users(name,password) values(‘xiaofengfeng',password('1234'));

mysql> INSERT INTO users(name,password) values(‘xiaofengfeng2',password('1234'));

#添加两个用户,密码都为1234

好啦~我们用于验证的数据库这边已经创建完毕,接下就开始配置ftp服务器啦,和上篇博客没太大区别,主要就是用了不同的pam模块,此处用到的是pam_mysql.so模块,首先我们先修改ftp的配置文件,只列出修改过的配置哈~#/etc/vsftpd/vsftpd.conf

anonymous_enable=NO               #进制匿名登录

guest_enable=YES

guest_username=ftp                 #所有登录的用户在服务端都当作ftp用户

pam_service_name=vsftpd.mysql      #pam的配置文件在/etc/pam.d目录下需要 自己创建

然后我们来创建pam模块需要的配置,在/etc/pam.d目录下新建文件vsftpd.mysql#/etc/pam.d/vsftpd.mysql

auth required  pam_mysql.so user=vsftpd passwd=1234 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required  pam_mysql.so user=vsftpd passwd=1234 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

#此处用到pam_mysql.so模块,数据库的用户名为vsftpd 密码为1234 因为mysql数据库在本地所以host为localhost,如果在远端就写ip地址,数据库名为 vsftpd 表名为users 且要是用的用户名在name字段,用到的密码在password字段,因为密码字段是用musql的password()函数加密的,标号为2的加密算法可以就是与mysql的password()函数对应,所以此处crypt为2

还是老规矩,检查selinux是否关闭,iptables是否放行ftp服务。如果没有问题我们就可以用数据库的两个帐号登录了。如果需要哪个用户有上传数据的功能可以参考上篇博客,建立单独的用户配置文件,开启匿名上传功能。特别要注意的一点是,能让ftp用户对/var/ftp/pub有写权限,可以用acl也可以直接开放所有权限,或者建一个属主为ftp的目录upload专门用来让用户ftp上传文件。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值