SQUID的ncsa_auth认证原理代理服务器教程
|
| 论文作者:佚名 论文来源:不详 论文发布时间:2006-6-19 18:15:15 论文发布人:chjchjchj |
减小字体
增大字体
摘要: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>
|
|
|
|
|
|
|
| ∷相关技术评论 |
(评论内容只代表网友观点,与本站立场无关!) [查看发表评论...] | |
|
|
| |
站内广告 |
| |
|
站内搜索 |
| |
栏目导航 |
| |
|
|
本月热门 |
| |
|
|
本日热门 |
| |
|
|
|