网络安全 频道

巧用论坛数据库验证FTP帐号合法性

  【IT168 专稿】在上篇文章中笔者为各位IT168读者介绍了将论坛与FTP两者帐户信息合二为一的原理以及部分准备工作,而从本文开始笔者将介绍从ODBC入手让论坛与FTP帐户息息相关的核心内容,通过在GENE6主程序中设置ODBC连接关系实现帐户验证通过Discuz!论坛自身数据库完成的目的,将论坛与FTP帐户息息相关工作完成到底。

巧妙关联论坛和FTP 权限尽在掌握

  一,从论坛提取必须信息:

  第一步:由于我们的帐户信息都要到论坛中验证,所以需要了解帐户对应的基础数据信息,我们访问论坛的后台管理地址,用管理员帐户进行登录。(如图1)

图1

  第二步:在Discuz!论坛管理后台上方找到“用户管理”,然后在左边找到“编辑用户”,然后在右边编辑用户界面选择“搜索用户”。(如图2)

图2

  第三步:我们点“搜索用户”按钮后将会看到本论坛数据库中存在的论坛帐户信息,从用户组和管理组处我们可以看到他们之间的权限有很大差别。我们的目的就是让admin,pacino,gao三个帐户用自己的用户名和密码访问GENE6建立的FTP时能够看到“admin帐户的目录权限高”这个目录的内容,而用ruanzheng,softer两个帐户用自己的用户名和密码访问GENE6建立的FTP时能够看到“user帐户的目录权限低”里面的内容,这样我们就实现了论坛帐户与FTP资源登录信息的统一与联动,另外还针对不同用户组的权限进行了划分,各自访问各自的资源避免了隐私的泄露。(如图3)

图3

  第四步:接下来我们就要从论坛的数据库mysql中下手找到配置信息了,笔者建议各位安装phpmyadmin来管理mysql数据库,用phpmyadmin登录到管理界面。(如图4)

图4

  第五步:然后点击左边的Discuz字样,这个是论坛对应的数据库,所有表和项目值都在此数据库中。

  第六步:经过查询我们发现论坛数据库中的cdb_members表保存的都是论坛帐户信息,所以我们记录下他的名称——cdb_members。(如图5)

图5

  第七步:浏览cdb_members表内容可以看到里面有五个值,对应的是本论坛里面出现的五个帐号,从后面的groupid我们可以了解到实际上groupid=1是管理员组,而groupid=10属于普通用户组,这个值为日后区分不同帐户权限起到了辅助作用,我们将其记录下来——groupid=1是管理员组,而groupid=10属于普通用户组。(如图6)

图6

  获得了帐户名称以及帐户基本的信息还有用户组字符段名称后我们就可以在GENE6中添加互动与关联关系了。

  二,GENE6中添加互动与关联关系:

  第一步:在GENE6管理程序对应的FTP域名称上点鼠标右键选择“属性”。(如图7)

图7

  第二步:在打开的站点属性窗口里找到“域->验证”,然后点右上角的“加号”按钮。(如图8)

图8

  第三步:为当前FTP站点添加一个验证方式,这里需要注意的是为了区分user和admin的验证类型,我们分别起名为bbs_user以及bbs_admin,当然这个名字是可以任意取的。帐号前缀处保持空白不要添加,方式处我们通过下拉菜单选择“ODBC数据库”。(如图9)

图9

  第四步:接下来我们要输入关键的信息,一个是ODBC数据库下的连接字串,另外一个是查询信息。bbs_user验证方式是这样添加的——连接字串为Driver={MySQL ODBC 5.1 Driver};Server=127.0.0.1;Port=3306;Database=discuz;User=root; Password=198029;Option=3。而查询信息为SELECT 'user' as account FROM cdb_members WHERE (groupid=10 and (uid=$LOGIN OR username=$LOGIN)) AND password=$PASSWORDMD5。

  第五步:而在bbs_admin处设置则有所区别,连接字串是Driver={MySQL ODBC 5.1 Driver};Server=127.0.0.1;Port=3306;Database=discuz;User=root; Password=198029;Option=3。而查询信息为SELECT 'admin' as account FROM cdb_members WHERE (groupid=1 and (uid=$LOGIN OR username=$LOGIN)) AND password=$PASSWORDMD5。(如图10)

图10

  小提示:

  下面我们主要讲解下这两条指令的意思,Driver={MySQL ODBC 5.1 Driver};Server=127.0.0.1;Port=3306;Database=discuz;User=root; Password=198029;Option=3是指使用MYSQL ODBC 5.1程序连接服务器提取数据库信息,服务器的地址为127.0.0.1,使用的端口十306,而数据库名是discuz,登录管理者的用户名为root,密码是198029,而最后的option=3不用理会保持这个值即可。而另外一句SELECT 'user' as account FROM cdb_members WHERE (groupid=10 and (uid=$LOGIN OR username=$LOGIN)) AND password=$PASSWORDMD5则是在刚才建立连接的数据库中查找cdb_members表内容,需要groupid=10并且username或uid与登录时输入的匹配,另外密码也要一致,只有满足这些条件后才能够以user作为帐号来登录FTP服务进入对应访问目录。而管理员组对应的语句SELECT 'admin' as account FROM cdb_members WHERE (groupid=1 and (uid=$LOGIN OR username=$LOGIN)) AND password=$PASSWORDMD5则是从上面建立的数据库中查找cdb_members,保证groupid=1并且username或uid与登录时输入的匹配,另外密码也要一致,只有满足这些条件后才能够以admin作为帐号来登录FTP服务进入对应访问目录。

  第六步:两个验证方式设置完毕我们点确定让修改生效。(如图11)

图11

  第七步:这样当我们在访问FTP站点时只要输入论坛注册时填写的ID信息以及密码就可以顺利登录了,不用理会GENE6中的任何帐户密码配置。(如图12)

图12

  第八步:添加了这种联动关系后我们使用管理员组帐户以及论坛注册的密码访问FTP的话,将看到之前设置的“admin帐户的目录权限高”这个目录的内容。(如图13)

图13

  第九步:我们使用普通用户组帐户以及论坛注册的密码访问FTP的话,将看到之前设置的“user帐户的目录权限低”这个目录的内容。从而真正实现了论坛与FTP站点帐户信息的统一以及根据不同论坛用户组权限分配不同FTP访问目录权限的功能。(如图14)(如图15)

图14

图15

  当然我们不仅可以通过本文介绍的方法实现帐户信息的联动,我们可以选择数据库表中任何一个参数值作为衡量标准完成权限分配的任务,例如我们常用的威望,声望,金钱或者积分等等,只要找到数据库中该项对应的参数值就可以轻松搞定。另外很多读者在设置联动关系时发现无法支持中文帐户来登录,这是因为安装ODBC版本过低,这也是ODBC 3.51最大的问题,换为5.1版本的ODBC后就能够解决问题。

  小提示:

  如果你擅长习惯使用serv-u来建立FTP的话,找个servuplus插件也能够解决这种论坛与FTP的帐户联动问题,具体设置方法类似这里就不详细说明了。

 

  三,一点补充:

  可能有的读者还有点迷茫,那么笔者以一次登陆操作进行讲解。由于之前我们在论坛里有了多个帐户,其中softer是普通用户组成员,pacino是管理员组成员,那么当我们设置了这种联动后并使用softer以及注册论坛ID密码访问FTP时,GENE6会自动连接Discuz!论坛比对帐户名与密码是否一致符合数据库中内容,如果一致那么比对该帐户的groupid信息,由于softer帐户对应的groupid信息为10,所以根据设置的关联关系中'user' as account,所以系统会自动用user这个帐户登录FTP,从而看到的就是“user帐户的目录权限低”信息;而换做pacino管理组成员登录FTP时,GENE6会自动连接Discuz!论坛比对帐户名与密码是否一致符合数据库中内容,如果一致那么比对该帐户的groupid信息,由于pacino帐户对应的groupid信息为1,所以根据设置的关联关系中'admin' as account,所以系统会自动用admin这个帐户登录FTP,从而看到的就是“admin帐户的目录权限高”信息。也就是说不管我们用的哪个帐户登录FTP,只要该帐户信息属于Discuz!论坛管理组帐户,那么就都将以admin帐户访问FTP,而只要该帐户信息属于Discuz!论坛普通用户组帐户,那么就都将以user帐户访问FTP。

 

  四,总结:

  在我们设置关联关系时一般问题都可以通过GENE6的FTP事件查询功能来了解,这里面记录了包括帐户登录,关联提取等多个方面的事件,我们可以通过FTP站点域下的“日志和报告”->“默认”来查询具体信息,通过显示的日志信息来判断到底哪个设置出现了问题。(如图16)

图16

0
相关文章