我要投稿
  • 您当前的位置:365bet官方 -> 技术教程 -> 服务器网络 -> 服务器教程 -> 代理服务器教程 -> 教程内容
  • [ 收藏本页教程 ]
  • SQUID的ncsa_auth认证原理代理服务器教程

    教程作者:佚名    教程来源:不详   教程栏目:代理服务器教程    收藏本页
                  摘要:SQUID的ncsa_auth认证原理
    前天看了一下ncsa_auth认证程序的源码,发现这个认证其实是非常简单的。
    squid启动时运行ncsa_auth passwd密码文件

    如果你的认证用户不是很多的话,写个sh就可以解决问题了
    ncsa_auth.sh

    内容如下
    #认证用户名为abc密码123
    [code:1:e0e520c5be]
    while true ; do
     read a
     user=`echo a| /usr/bin/cut -d ' ' -f1`
     pass=`echo a|/usr/bin/cut -d ' ' -f2`
     if [ "$user" == "abc" ] ; then
             if [ "$pass" == "123" ] ; then
                        echo OK;
            else
                        echo ERR;
            fi
     else
             echo ERR
      fi
    done
    #结束

    呵呵,如果你的认证不是很频繁的话。但是你希望与你的数据库认证集成在一起的话
    你也可以用php连结数据库达到这个目的
    在ncsa_auth.sh里的内容应该如下:
    /usr/local/bin/php /usr/local/etc/ncsa_auth.php

    在ncsa_auth.php内容
    <?php

    $fd = fopen('php://stdin', 'r'); 
    while(true){
            $buffer = fgets($fd, 4096);
            $lsstr=explode(' ',$buffer);
            $sql_str="select user from bbs_user where userid like '$lsstr[0]' and pass like '$lsstr[1]'";
            #如果用户名与密码正确的话
             if(true) echo 'OK';
             else echo 'ERR';
    }
    ?>
    [/code:1:e0e520c5be]
    抛砖引玉,希望大家在用squid认证能够有所启发,当然如果你觉得效率低下的话就使用C,直接修改squid自带的ncsa_auth.c加了数据库查询语句就行了。

     ljily000 回复于:2005-03-06 21:11:31:em27: 

    顶!
    Good!

     段誉 回复于:2005-03-12 04:00:37顶上来,大家都了解一下。

    BTW:请大家多多关注我们这个板子,多推荐好帖子,增加我们这个板子的精华数量。谢谢!!

     shitian8848 回复于:2005-03-12 09:32:49正在弄squid的认证呢,呵呵,谢谢楼主了。
    UP!

     platinum 回复于:2005-03-12 10:45:27请教一下楼主
    [code:1:4e08dde378]
    while true ; do 
    read a 
    user=`echo a| /usr/bin/cut -d ' ' -f1` 
    pass=`echo a|/usr/bin/cut -d ' ' -f2` 
    if [ "$user" == "abc" ] ; then 
            if [ "$pass" == "123" ] ; then 
                       echo OK; 
           else 
                       echo ERR; 
           fi 
    else 
            echo ERR 
     fi 
    done 
    #结束 
    [/code:1:4e08dde378]
    这个shell用于哪里?
    好像和squid认证无关啊~
    另外,ncsa的密码是MD5后的,而楼主这个shell是明码

    我只是想知道,这个shell是做什么的呢?

     60133056 回复于:2005-03-12 13:45:32观望 学习

     wingger 回复于:2005-03-12 14:28:08[quote:7f7046b6b5="platinum"]这个shell用于哪里?
    好像和squid认证无关啊~
    另外,ncsa的密码是MD5后的,而楼主这个shell是明码

    我只是想知道,这个shell是做什么的呢?[/quote:7f7046b6b5]

    我也想知道,是用这个来代替ncsa吗?
    还是解剖他的原理?

     wxxszzz 回复于:2005-03-12 17:43:24看了上面大家的回贴,我就再解释一下吧。

    我们使用htpasswd产生的那个密码文件里的密码是用MD5加密的。

    但是squid传递给ncsa_auth认证程序的密码使用的是明码,
    然后由ncsa_auth认证程序再用md5加密传给他的密码后
    再与用htpasswd产生的那个密码文件里的密码相比较。
    如果符合就认为密码正确。

    另外以上的sh与使用php密码认证的程序。
    就是接到squid的密码后,不使用md5加密接收到的密码,直接比较,

    以上的两个程序
    他们都是可以直接替代ncsa_auth这个认证程序的。

    OK,如果还有疑问,可以再提问,不过我觉得SQUID他这样的认证是比较合理的。现时也比较直接明了,

    设想一下,如果你的认证用户非常多,如有1000人以上同时认证,我们可以简单的使用上面的高级语言如C、php、perl、java等语言,只要他的代码里支持套接字sockets接口你就可以设计一个集中式的认证系统。

    以PHP举例:

    代码如顶搂的语言里只是稍微修改一下。
    [code:1:d8bd213a3b]
    在ncsa_auth.php内容 
    <?php 

    $fd = fopen('php://stdin', 'r'); 
    while(true){ 
           $buffer = fgets($fd, 4096); 
           $lsstr=explode(' ',$buffer); 
    #这里使用套接字把用户名与密码发送到后台认证中心去
         $sfd=fscoket("x.x.x.x",)
           write      
           read
           fclose($sfd);

    fclose($fd);
    ?> 
    [/code:1:d8bd213a3b]
    这里之后,一个比较好的认证中心这可以产生了。之所以选用PHP认证,是因为这段时间用PHP比较多。
    这样之后,你就可以使用多台SQUID,多台认证中心,一个中央数据库。

    呵呵,不知道各位看过我的解释与说明之后,是不是有所启发呢?
    没有做不到,只有想不到的事情。

     platinum 回复于:2005-03-16 07:21:21这个是ncsa_auth.c的源代码
    [code:1:2a9999c6f7]
    /*
     * ncsa_auth.c
     *
     * AUTHOR: Arjan de Vet <Arjan.deVet@adv.iae.nl>
     *
     * Example authentication program for Squid, based on the original
     * proxy_auth code from client_side.c, written by
     * Jon Thackray <jrmt@uk.gdscorp.com>.
     *
     * Uses a NCSA httpd style password file for authentication with the
     * following improvements suggested by various people:
     *
     * - comment lines are possible and should start with a '#';
     * - empty or blank lines are possible;
     * - extra fields in the password file are ignored; this makes it
     *   possible to use a Unix password file but I do not recommend that.
     *
     */

    #include "config.h"
    #if HAVE_STDIO_H
    #include <stdio.h>
  • 上一篇:用squid+iptable做透明代理出现DNS问题代理服务器教程
  • 下一篇:企业解决方案实践squid+squidGuard+sarg+clamav+mrtg代理服务器教程
  • 加入收藏】【告诉好友】【 】【打印此文】【回到顶部】【关闭窗口
    我要投稿   -   广告合作   -   关于本站   -   友情连接   -   网站地图   -   联系我们   -   版权声明   -   设为首页   -   加入收藏   -   网站留言
    Copyright © 2009 - 20012 www.www.ct131.com All Rights Reserved.365bet官方 版权所有