0

0

Squid Proxy基于MySQL用户和密码的验证

php中文网

php中文网

发布时间:2016-06-07 15:34:48

|

2127人浏览过

|

来源于php中文网

原创

概述: 本文档为Squid Proxy实现基于MySQL用户和密码认证而编写. 参考: 作者Email: jimcheng@gmail.com 本文档在GPL v2下发布。 I. 本文档在Federa core 3下测试通过,其他Unix/Linux平台可类同参照。 需要的主要软件包有: Squid 2.5以上 确定squid已经安

 概述:

本文档为Squid Proxy实现基于MySQL用户和密码认证而编写.

参考:
作者Email: jimcheng@gmail.com
本文档在GPL v2下发布。


I.
本文档在Federa core 3下测试通过,其他Unix/Linux平台可类同参照。
需要的主要软件包有:
Squid 2.5以上 

确定squid已经安装
代码:
# rpm -q squid
squid-2.5.STABLExxxx-xxxxIII. 
(我的系统上是squid-2.5.STABLE6-3)//by jerry

MySQL 3.0 or 4.x
(我的系统上是mysql-3.23.58-13)//by jerry
确定mysql已经安装
代码:
# rpm -q mysql

MySQL_auth
其中MySQL_Auth用来完成用户名及密码的验证.

II.
获取MySQL_Auth
MySQL_auth Homepage: http://people.arxnet.hu/airween/mysql.auth/
http://www.sourcefiles.org/Databases/Utilities/
进入该页面后下载mysql_auth-0.8.tar.gz

III.
编译,调试MySQL_Auth, 及MySQL
a. 编译MySQL_Auth

代码:
   $ tar -xzvf mysql_auth-0.8.tar.gz
   $ cd mysql_auth-0.8
   $ make
通常这步会有错误,出错信息如下:
代码:
   /usr/bin/ld: cannot find -lmysqlclient
   collect2: ld returned 1 exit status
   make: *** [mysql_auth] Error 1

出现该错误的原因是Makefile里没有考虑到libmysqlclient真正所处的路径通常会是/usr/lib/mysql, 而不是/usr/local/lib, 所以打开Makefile, 修改里面的CFLAGS参数,加上/usr/lib/mysql路径即可:
修改后的CFLAGS为:
代码:
CFLAGS = -I/usr/local/include -L/usr/local/lib -L /usr/lib/mysql

保存修改好的Makefile, 退出vi (or emacs or nano or joe or whatever)
再次运行 make 进行编译

代码:
   $ make
   编译成功.
   $ su -                  # make install      

在这步通常会出现两个错误,第一个错误为make报告nogroup这个group不存在, 可通过groupadd nogroup来解决

代码:
$ su -c "groupadd nogroup"

然后如果再次运行make install, 会遭遇到第二个错误:
代码:
/usr/bin/install: cannot create regular file '/usr/local/squid/libexec/mysql_auth': No such file or directory
 
出错的原因是原作者没有考虑到/usr/local/squid/这个目录及以下的子目录可能并不事先存在, 需要再次修改Makefile来fix这个问题.
修改Makefile内结尾附近的Install: 这部分, 给所有的$(INSTALL) -o nobody -o nogroup ...行加上-D的参数,来强制install在cp文件前先建立目录.

修改后的Make内的install内容格式类似如下:
代码:
   $(INSTALL) -D -o nobody -o nogroup -m 600 .....确认以上步骤都完成后,再次运行make install

代码:
   # make install

如没有报错信息出现,则mysql_auth安装完成。

这步骤用,我没有执行su -c "groupadd nogroup",而是将Makefile中的(INSTALL)部分中的nobody和nogroup都改成了squid。也就是所有者和使用者都是squid。//by jerry

注1:如果squid在系统中不是以nobody的身份来运行,需将/usr/local/squid/etc/mysql_auth.conf文件的ownership改为对应的user/group, 在Red Hat Enterprise 4中,squid是以其自己的身份squid.squid来运行的,则需将该conf文件改为:
代码:
 chown squid.squid /usr/local/squid/etc/mysql_auth.conf

这步骤中的身份涉及到文件的使用和拥有权限。如果在开始的时候在mysql_auth的Makefile中的(INSTALL)部分中的nobody和nogroup都改成了squid,则上面的注1即不用注意了。//by jerry。


b. 配置MySQL和MySQL_Auth之间的连接是否正常

NetPb网上党支部系统 1.01
NetPb网上党支部系统 1.01

NetPb(Net Party branch)中文名称:网上党支部系统,是一款专门用于党员在线交流、信息管的内容系统,系统采用PHP+Mysql环境架构,基于国内著名开源系统Dedecms二次开发,整套系统在界面、程序部分修改,目的是为了更适合党员在线管理和交流. 进去/admin/login.php,默认用户名和密码为admin登录后进行相关设置,实用方法类似Dedecms

下载

首先确认MySQL 3.0或以上的版本已经正确安装.
代码:
   # rpm -q mysql

检查mysql_auth中关于MySQL部分的配置是否正确, 这部分的配置信息在/usr/local/squid/etc/mysql_auth.conf中描述. 配置文件的具体内容可参照文档,。
通常在这个配置文件中有几点需要注意:
1. hostname是否正确,如果是缺省情况下连接位于本地的MySQL server, 则原先的参数localhost可不作改动。
2. 默认mysql_auth会用username: squid, password: squid来连接MySQL, 并会在mysql_auth这个database内的data表中建立squid验证所需的proxy username和password.
 (mysql_auth提供了一个初始化script来完成mysql建数据库和表等一系列操作, 稍后会提到)。
3. mysql_auth.conf中最需要注意的是mysqld_socket这个参数, 这个参数缺省情况下指向的位置为
/tmp/mysqld.sock
现在一般主流的Linux一般已将mysql unix socket移至/var/lib/mysql/mysql.sock, 所以修改该行为:
mysqld_socket /var/lib/mysql/mysql.sock
如遇其他情况,可参照mysql的配置文件my.cnf来确定sock的具体存放位置.

4. 完成上列步骤后,可运行mysql_auth提供的script来完成步骤2中所提及的初始化工作, 该脚本所在位置为mysql_auth-0.8.tar.gz解开后的目录下的scripts目录

/*****************by jerry
首先,这个时候需要打开mysql
否则会出现can't connect to local MYSQL server through socket '/var/lib/mysql/mysql.sock' (2)的错误提示。
启动mysql的命令是:/etc/rc.d/init.d/mysqld start (省略前面的目录不好使)

如果是安装后第一次启动
会出现:初始化 MySQL 数据库:[确定]
        启动 MySQL:         [确定]
的信息。
如果不是第一次运行了则只有:
启动 MySQL:                 [确定]

启动以后
进入mysql默认的情况是,用户是root,密码为空(即没有密码),所以
#mysql 直接回车就进入了
也可用#mysql -uroot -p 回车
提示:Enter password:直接回车
当然若修改过密码,或者当前用户不是root。则用户名和密码都不能省略了。
并且mysql在任何目录下都可以直接用。
*****************///by jerry

代码:
      # cd scripts
      # mysql -u root -p       Enter password:                      系统提示输入mysql root的password

如无出错信息,则表示该步骤完成, mysql中现在已有一名为mysql_auth的新增数据库, 该数据库中仅包含一张表data, 访问该表可通过mysql用户squid,密码squid来访问

5. MySQL_auth中还附带有一个用户管理工具mypasswd, 存放的路径通常为/usr/local/bin/mypasswd

/*****************by jerry
(使用mypasswd需要先启动mysql)
1.添加一个测试用户 (squid停止的情况下也好使)
      # mypasswd jerry 54321          Password record ADDED successfully.
      (如果改用户名存在则显示是:Password record UPDATED succesfully)
2.验证刚才建立的用户, 测试MYSQL_AUTH(需要先启动mysql)
# /usr/local/squid/libexec/mysql_auth
Jerry 654321
0K (若无改用户或密码错误,则显示ERR)
3.我们也可以从mysql数据库中找到:
#mysql -usquid -psquid
#use mysql_auth
#select * from data
我们将看到用上面mypasswd建立的用户和密码。
#quit(或者exit是推出)
4.删除这测试用户
# /usr/local/bin/mypasswd -d Jerry 654321
Password record DELETED succesfully. *****************///by jerry

V. 配置squid
1. squid的配置文件通常所处的位置为: /etc/squid/squid.conf
2. squid的一些通常设定请参见squid的配置文挡,本文档不再做详细描述.
3. 找到squid.conf中auth_param这个段落, 添加以下内容:
代码:
 auth_param basic children 5
 auth_param basic realm Squid proxy-caching web server
 auth_param basic credentialsttl 2 hours
 auth_param basic casesensitive off
 auth_param basic program /usr/local/squid/libexec/mysql_auth

(已经有了的,不用再添加//by jerry)
以上内容指定了squid可以通过一个外部程序来进行用户验证.

4. 找到acl配置的段落,添加以下内容:

代码:
 acl YMCT proxy_auth REQUIRED
        http_access allow YMCT ipuseracl

以上内容规定了squid只允许通过YMCT(mysql用户/密码)验证通过的用户才可以使用squid的服务

VI: SELinux的问题.
Federo core 3的SeLinux缺省情况为打开状态,selinux会干扰mysql_auth的启动,需将selinuxdisable后,再启动squid, disable selinux的办法为
代码:
    # cd /etc/selinux/
    # vi config
    将selinux=enforcing改为disabled

注:selinux理论上应该可以通过policy设定allow mysql_auth的运行, 具体需参照selinux的文档。
这步骤完事一定要重启(注销不好使),因为现在selinux是开启状态。
VII: 测试
启动mysql:
/etc/rc.d/init.d/mysqld start
启动squid:
/etc/init.d/squid start  (不能省略目录)//by jerry 
正常运行的squid应该可以从内存中看到如下的情况:
代码:
       # pstree

       squid---squid---5*[ip_user_check]
                     |-5*[mysql_auth]
                     |-unlinkd
设定相应客户端上的浏览器的proxy设置, 进行测试.
*********************************************************************************************************************************************************************************

一些偶遇:
1.auth_param basic realm Squid proxy-caching web server //就是设置当客户端连接的时候如果需要密码验证弹出一个对话框上面显示的一部分。
2.

acl YMCT proxy_auth REQUIRED
http_access allow YMCT ipuseracl
换成
acl our_networks src 202.118.26.186
http_access allow our_networks
则202.118.26.186可以通过改代理上网。
3.
cache.log中看到
2006/04/15 16:52:51| WARNING: basicauthenticator #1 (FD 6) exited
2006/04/15 16:52:51| WARNING: basicauthenticator #2 (FD 7) exited
2006/04/15 16:52:51| WARNING: basicauthenticator #3 (FD 8) exited
2006/04/15 16:52:51| Too few basicauthenticator processes are running
主要是权限问题,可以用:
chown squid.squid /usr/local/squid/etc/mysql_auth.conf
解决掉!
4.
分析squid的具体运行情况可以通过查看log:
/var/log/message
/var/log/squid  这下面主要看cache.log
5.
匹配ACL,squid找到第一个匹配时,它就停止搜索了。
http_access使用“与”逻辑。
不要在http_access deny allow后加任何语句。
5.
acl访问控制元素格式:
acl name type value1 value2

相关文章

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

39

2026.02.06

java多线程方法汇总
java多线程方法汇总

本专题整合了java多线程面试题、实现函数、执行并发相关内容,阅读专题下面的文章了解更多详细内容。

17

2026.02.06

1688阿里巴巴货源平台入口与批发采购指南
1688阿里巴巴货源平台入口与批发采购指南

本专题整理了1688阿里巴巴批发进货平台的最新入口地址与在线采购指南,帮助用户快速找到官方网站入口,了解如何进行批发采购、货源选择以及厂家直销等功能,提升采购效率与平台使用体验。

289

2026.02.06

快手网页版入口与电脑端使用指南 快手官方短视频观看入口
快手网页版入口与电脑端使用指南 快手官方短视频观看入口

本专题汇总了快手网页版的最新入口地址和电脑版使用方法,详细提供快手官网直接访问链接、网页端操作教程,以及如何无需下载安装直接观看短视频的方式,帮助用户轻松浏览和观看快手短视频内容。

150

2026.02.06

C# 多线程与异步编程
C# 多线程与异步编程

本专题深入讲解 C# 中多线程与异步编程的核心概念与实战技巧,包括线程池管理、Task 类的使用、async/await 异步编程模式、并发控制与线程同步、死锁与竞态条件的解决方案。通过实际项目,帮助开发者掌握 如何在 C# 中构建高并发、低延迟的异步系统,提升应用性能和响应速度。

11

2026.02.06

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

7

2026.02.06

JavaScript 异步编程与事件驱动架构
JavaScript 异步编程与事件驱动架构

本专题深入讲解 JavaScript 异步编程与事件驱动架构,涵盖 Promise、async/await、事件循环机制、回调函数、任务队列与微任务队列、以及如何设计高效的异步应用架构。通过多个实际示例,帮助开发者掌握 如何处理复杂异步操作,并利用事件驱动设计模式构建高效、响应式应用。

11

2026.02.06

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

47

2026.02.05

java中fail含义
java中fail含义

本专题整合了java中fail的含义、作用相关内容,阅读专题下面的文章了解更多详细内容。

29

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 5.3万人学习

Rust 教程
Rust 教程

共28课时 | 5.6万人学习

Django 教程
Django 教程

共28课时 | 4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号